| この記事の要点 |
|
エラー内容
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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38