| この記事の要点 |
|
エラー内容
production.ERROR: No application encryption key has been specified.
ログファイル(storage/logs/laravel.log)や画面に表示されます。Laravel 8 以降では例外クラスは Illuminate\Encryption\MissingAppKeyException です。行頭の production は APP_ENV の値で、開発環境なら local.ERROR と表示されます。
原因
Laravel は Cookie、セッション、Crypt ファサードによる暗号化などに、.env の APP_KEY を鍵として使います。この値が取得できないと、暗号化を使う最初の処理(多くはセッション開始)でこのエラーになります。
| 原因 | よくある場面 |
|---|---|
| .env ファイルそのものが無い | git clone した直後。.env は .gitignore されていてリポジトリに含まれない |
| .env の APP_KEY が空 | .env.example をコピーしただけで key:generate を実行していない |
| 設定キャッシュに古い値が残っている | APP_KEY が空の状態で php artisan config:cache を実行した |
| .env の場所や権限が違う | .env をプロジェクトルート以外に置いた、Web サーバーのユーザーが読めない |
| 環境変数が渡っていない | Docker やクラウドで .env を使わず環境変数で設定する構成なのに、APP_KEY を設定し忘れた |
対処法
1. .env ファイルを作成する
プロジェクトのルートディレクトリ(artisan ファイルがある場所)で、.env.example をコピーして .env を作ります。
# Linux / macOS / Git Bash
cp .env.example .env
# Windows コマンドプロンプト
copy .env.example .env
2. APP_KEY を生成する
キーを生成するには、以下のコマンドを実行します。.env の APP_KEY= の行に base64: で始まるランダムな値が書き込まれます。
php artisan key:generate
新しい Laravel では、.env に APP_KEY= の行自体が無いと「Unable to set application key. No APP_KEY variable was found in the .env file.」というエラーで止まります。その場合は .env に空の APP_KEY= 行を追加してから再実行します。
3. 設定キャッシュを作り直す
過去に config:cache を実行している環境では、.env を直してもキャッシュの値が優先されます。キャッシュを消すか、作り直します。
php artisan config:clear
# 本番では、.env が正しいことを確認してから再度キャッシュする
php artisan config:cache
php-fpm、キューワーカー(php artisan queue:work)、Octane など常駐プロセスを使っている場合は、それらも再起動します。
4. 環境変数で渡す構成の場合
Docker や PaaS で .env を置かない構成では、php artisan key:generate --show でキーを表示だけさせ(ファイルは書き換えない)、その値をコンテナやサービスの環境変数 APP_KEY に設定します。キーはパスワードと同じ扱いで、リポジトリやログに残さないようにします。
注意: 本番で key:generate をやり直さない
APP_KEY を変えると、それまでの鍵で暗号化されたものがすべて復号できなくなります。
- ログイン中のユーザーのセッションや「ログイン状態を保持」の Cookie が無効になり、全員がログアウトされる
Crypt::encryptString()や Eloquent のencryptedキャストで保存したデータが読めなくなる(DecryptException)- 署名付き URL(パスワードリセットのリンクなど)が無効になる
このエラーが出ているということは「キーが読めていない」だけで、元のキーがどこかに保存されていることもあります。運用中のサーバーでは、新しいキーを作る前にバックアップや旧サーバーの .env、シークレット管理サービスに元の APP_KEY が残っていないかを確認してください。どうしてもキーを入れ替える場合、Laravel 11 以降では古いキーを APP_PREVIOUS_KEYS に書いておくと、古いキーで暗号化されたデータも復号できます。
確認方法
# .env に値が入っているか
grep APP_KEY .env
# Laravel が実際に読み込んでいる値(空でなければ OK)
php artisan tinker --execute="echo config('app.key') ? 'set' : 'empty';"
# 設定キャッシュの有無を含めた環境の概要
php artisan about
php artisan about の Cache 欄で Config が CACHED になっていれば、キャッシュの値が使われています。最後にブラウザでページを開き、エラーが出ないことを確認します。
初回セットアップの手順まとめ
Git からプロジェクトを取得して動かすときは、次の順で実行すればこのエラーを避けられます。composer create-project で新規作成した場合は、.env の作成と key:generate は自動で行われます。
composer installcp .env.example .envして DB などの値を編集php artisan key:generatephp artisan migrateなど、必要な初期化
関連
- Laravel .env 設定完全ガイド(DB / APP_KEY / config:cache / 複数環境)
- .env ファイル完全ガイド — 環境変数・dotenv・12-factor app・シークレット管理
- Laravel Artisan コマンド一覧完全リファレンス
- Laravel 新規プロジェクト作成|composer create-project と初期設定
子ページはありません
- SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost'
- Add [~] to fillable property to allow mass assignment on [App\~].
- PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in ~
- Changing columns for table "~" requires Doctrine DBAL; install "doctrine/dbal"
- MethodNotAllowedHttpException No message
- Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found
- production.ERROR: No application encryption key has been specified.
- Dotenv values containing spaces must be surrounded by quotes.
- Laravel \ Socialite \ Two \ InvalidStateException
- The page has expired due to inactivity. Please refresh and try again.
- Failed to clone https://github.com/symfony/thanks.git via https, ssh protocol
- Illegal offset type
- Cannot access protected property Illuminate\Http\Request::$...
- Emitted value instead of an instance of Error
- 画像保存時にInternal Server Error
- Failed to authenticate on SMTP server with username ...
- PostTooLargeException
- Database hosts array is empty.
- Invalid request (Unsupported SSL request)
- does not comply with psr-4 autoloading standard. Skipping.
- MySQLのSTR_TO_DATE関数を使用するとnullが返却される問題
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09