php artisan key:generateは、Laravelアプリの暗号化に使うAPP_KEYを自動生成して.envに設定するArtisanコマンドです。構文はphp artisan key:generate [--show] [--force]で、新規プロジェクト作成直後に一度実行すればよく、本番環境で再実行するとセッションや暗号化済みデータが読めなくなるため注意が必要です。
- カテゴリ: artisan
- 掲載バージョン: Laravel 12・PHP 8.4
- 名前空間 / FQCN / コマンド:
php artisan key:generate - 関連: config:clear, config:cache, env, APP_KEY
- 変更履歴: 早期バージョンから継続提供(挙動は安定)
要点(TL;DR)
- Laravel アプリの 暗号化に使う APP_KEY を生成・設定する
php artisan key:generateを一度実行すればよい- 既存環境で再実行すると暗号化データが読めなくなる点に注意
概要
key:generate は、Laravel アプリケーションで使用される 暗号化キー(APP_KEY) を生成し、.env に設定する Artisan コマンドです。
セッション、Cookie、Crypt ファサードなどの暗号化処理は、このキーを前提に動作します。
新規プロジェクト作成後や、.env を新しく用意した直後に必ず実行します。
構文 / シグネチャ
php artisan key:generate [--show] [--force]
オプション
| オプション | 必須 | 説明 |
|---|---|---|
--show | 任意 | 生成したキーを表示する(.env は変更しない) |
--force | 任意 | 既存の APP_KEY を上書きする |
- 戻り値:なし(成功時はメッセージ出力)
- 例外/副作用:
.envのAPP_KEYを更新(--showを除く)
使用例
最小例
php artisan key:generate
.env に以下のような値が設定されます。
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
実務例
Docker / CI で初回セットアップ時に実行
php artisan key:generate --force
php artisan config:clear
- 初回デプロイ時のみ実行
- 既存データが無い状態であれば
--forceでも問題ありません
APP_KEYは何を守っているのか
key:generate で生成される APP_KEY は、Laravelの暗号化基盤である Crypt ファサードが使う秘密鍵です。base64: の接頭辞は値のエンコード形式を表しているだけで、実際の暗号化アルゴリズムは config/app.php の cipher(既定は AES-256-CBC)で決まります。
このキーは以下のような重要データの保護に直接使われます。
- セッションデータ(
SESSION_DRIVER=cookieやCookie暗号化) Crypt::encrypt() / decrypt()を使う自前の暗号化データ- パスワードリセットトークンなど、署名付きURLの検証
そのため APP_KEY が漏洩・紛失すると復号不能なデータが発生する一方、第三者に漏れると暗号化データを復号されるリスクがあります。生成・管理の考え方をより詳しく知りたい場合はLaravelのAPP_KEYを安全に生成・管理する方法とその重要性も参照してください。
よくある落とし穴・注意
- 本番環境で再実行しない
→ セッション、暗号化済みデータ、パスワードリセットトークンが無効になります config:cache実行後にキー変更すると反映されない
→ 変更後はphp artisan config:clearを実行.envが書き込み不可だと失敗
→ 権限やデプロイ方法を確認.envをGitにコミットしない
→.gitignoreで除外し、誤ってコミットした場合は履歴から削除したうえで--force付きで再生成する
代替・関連APIとの比較
--show.envを直接編集したい場合に使用
config:cacheAPP_KEY設定後に実行するとパフォーマンス向上
- 環境変数で直接指定
- コンテナ環境では
.envを使わずAPP_KEYを外部注入することも多い
- コンテナ環境では
テスト例(Pest)
it('has application key', function () {
expect(config('app.key'))->not->toBeEmpty();
});
トラブルシュート(エラー別)
| 症状/エラー | 原因 | 対処 |
|---|---|---|
No application encryption key has been specified. | APP_KEY 未設定 | php artisan key:generate を実行 |
| セッションが突然切れる | キー再生成 | バックアップから復元、再生成しない |
| 設定が反映されない | config キャッシュ | php artisan config:clear |
よくある質問(FAQ)
Q. 本番環境で誤って.envをGitにコミットしてしまった場合は?
A. まず該当コミットをリポジトリの履歴から削除し、公開されてしまったAPP_KEYは漏洩済みとみなしてphp artisan key:generate --forceで再発行します。再発行すると既存のセッション・暗号化データは復号できなくなるため、ユーザーには再ログインが必要になる旨を周知してから実施してください。
Q. 開発・ステージング・本番でAPP_KEYを使い回してもいい?
A. 推奨されません。環境ごとに個別のAPP_KEYを発行してください。同じキーを使い回すと、ある環境で暗号化データが漏洩した場合に他環境のデータも復号可能になってしまいます。
Q. APP_KEYを紛失した場合、データは復元できる?
A. 復元できません。Cryptで暗号化した既存データやCookie暗号化されたセッションは、キーを失った時点で復号不能になります。.envはバックアップ対象に含め、キー自体は秘密情報として安全な場所(Secret Manager等)に保管することをおすすめします。
コンテナ/Secret Manager運用でのAPP_KEY
複数サーバーやコンテナで動かす場合、デプロイのたびにkey:generateを実行するとサーバーごとにAPP_KEYが変わってしまい、セッションの共有やロードバランサ配下での動作に問題が起きます。この場合は次の手順が安全です。
- 初回のみローカルまたはCIで
php artisan key:generate --showを実行し、生成された値を控える - 控えた値をAWS Secrets ManagerやGCP Secret Manager、Kubernetes SecretなどSecret管理サービスに登録する
- 各サーバー/コンテナには環境変数としてAPP_KEYを注入し、以降は
key:generateを再実行しない
GitHub Actionsでの初回セットアップ例
- name: Generate APP_KEY (initial setup only)
run: php artisan key:generate --show
# 出力された値を Secrets に登録し、以降のデプロイでは
# env: APP_KEY: ${{ secrets.APP_KEY }} として注入する
関連記事
- LaravelのAPP_KEYを安全に生成・管理する方法とその重要性
- config:clear — 設定キャッシュをクリアするコマンド
- config:cache — 設定をキャッシュするコマンド
- php artisanとは?使い方とコマンド一覧|最速チートシート&現場ノウハウ
参考リンク
- Laravel 公式ドキュメント(Application Key)
https://laravel.com/docs/12.x/encryption - Artisan コンソールドキュメント
https://laravel.com/docs/12.x/artisan
