php artisan key:generateの使い方と構文|APP_KEY生成コマンドの注意点とオプション解説

未分類

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 を上書きする
  • 戻り値:なし(成功時はメッセージ出力)
  • 例外/副作用.envAPP_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.phpcipher(既定は 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:cache
    • APP_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が変わってしまい、セッションの共有やロードバランサ配下での動作に問題が起きます。この場合は次の手順が安全です。

  • 初回のみローカルまたはCIphp 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 }} として注入する

関連記事

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする