最終更新: 2026年2月 | Laravel 12対応
Laravelのアプリケーションキー(APP_KEY)を生成するphp artisan key:generateコマンドについて、基本的な使い方から実務での注意点、トラブルシューティングまで徹底解説します。
💡 他のコマンドも知りたい方は artisanコマンド完全チートシート をご覧ください
1. key:generateコマンドとは
php artisan key:generateは、Laravelアプリケーションの暗号化キー(APP_KEY)を生成するコマンドです。
このコマンドでできること
- セキュアな32文字のランダムキーを自動生成
.envファイルのAPP_KEYに自動設定- セッション、Cookie、パスワードの暗号化に使用
いつ使うのか
✅ 必ず実行が必要なタイミング:
- Laravelプロジェクトを新規作成した直後
.env.exampleから.envをコピーした後- 本番環境への初回デプロイ時
- 開発環境を新しく構築した時
⚠️ 実行してはいけないタイミング:
- 本番環境で既に稼働中のアプリケーション(後述)
2. 基本的な使い方
最も基本的な使い方
php artisan key:generate実行結果:
Application key set successfully..envファイルのAPP_KEYが以下のように設定されます:
APP_KEY=base64:ランダムな文字列(32文字をbase64エンコード)例:
APP_KEY=base64:5K8vFZjKvK9J3xQ7w2nR1mP6tY4uI9oE2sD3fG8hJ7k=オプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
--show | キーを生成して表示のみ(.envに書き込まない) | php artisan key:generate --show |
--force | 本番環境でも強制実行(危険) | php artisan key:generate --force |
–showオプションの使い方
.envを変更せずにキーだけ確認したい場合:
php artisan key:generate --show出力例:
base64:nP8mK3xQ7w2vF5jZ9J6hY4uI1oE2sD3fG8tR7kL5aM=用途:
- CI/CDで環境変数として設定する場合
- 複数環境で同じキーを使いたい場合(非推奨)
- キーをバックアップしたい場合
3. アプリケーションキーの役割
APP_KEYが使われる場面
- セッションデータの暗号化
// セッションに保存されるデータが暗号化される
session(['user_id' => 123]);- Cookieの暗号化
// Cookieの値が暗号化される
Cookie::queue('preferences', $data, 60);- 暗号化ヘルパーの使用
// encrypt/decryptで使用
$encrypted = encrypt('secret data');
$decrypted = decrypt($encrypted);- CSRFトークンの生成
// フォームのCSRFトークン生成に使用
@csrfAPP_KEYがないとどうなる?
RuntimeException: No application encryption key has been specified.このエラーが出た場合は、すぐにkey:generateを実行してください。
4. 実務での使用シーン
シーン1: 新規プロジェクト作成時
# Laravelプロジェクト作成
composer create-project laravel/laravel my-project
cd my-project
# .envファイルの確認
cat .env | grep APP_KEY
# APP_KEY= (空欄の場合がある)
# キー生成
php artisan key:generate
# 確認
cat .env | grep APP_KEY
# APP_KEY=base64:xxxxxx... (設定された)シーン2: Gitクローン後の環境構築
# リポジトリをクローン
git clone https://github.com/your-repo/your-project.git
cd your-project
# 依存関係インストール
composer install
# .envファイル作成
cp .env.example .env
# データベース設定など編集
vim .env
# キー生成(重要!)
php artisan key:generate
# マイグレーション実行
php artisan migrate⚠️ よくあるミス:.envをコピーした後にkey:generateを忘れると、セッションやCSRFトークンが正常に動作しません。
シーン3: Docker環境での設定
# Dockerfile内での自動化例
FROM php:8.2-fpm
# ... 省略 ...
# エントリーポイントスクリプト
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]#!/bin/bash
# docker-entrypoint.sh
# .envが存在しない場合は作成
if [ ! -f .env ]; then
cp .env.example .env
php artisan key:generate
fi
# コンテナ起動
exec "$@"シーン4: CI/CDパイプラインでの設定
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Environment
run: |
cp .env.example .env
php artisan key:generate
- name: Run Tests
run: php artisan test💡 ベストプラクティス:
環境変数として事前に生成したキーを設定する方法:
# GitHub Secretsに APP_KEY を登録しておく
- name: Setup Environment
run: |
echo "APP_KEY=${{ secrets.APP_KEY }}" >> .env5. よくあるエラーと対処法
エラー1: “No application encryption key has been specified”
RuntimeException: No application encryption key has been specified.原因:
.envファイルにAPP_KEYが設定されていないAPP_KEY=が空欄
解決方法:
php artisan key:generateエラー2: “Invalid APP_KEY”や暗号化エラー
Illuminate\Contracts\Encryption\DecryptException:
The payload is invalid.原因:
- APP_KEYが途中で変更された
- 本番環境でキーを再生成してしまった
解決方法:
# バックアップから元のAPP_KEYを復元
# または、セッション・Cookieをクリア
php artisan cache:clear
php artisan config:clear⚠️ 重要: 本番環境で既に稼働しているアプリのAPP_KEYを変更すると、全ユーザーのセッションが無効化されます。
エラー3: “Unable to write to .env file”
ErrorException: file_put_contents(/path/to/.env):
failed to open stream: Permission denied原因:.envファイルの書き込み権限がない
解決方法:
# 権限確認
ls -la .env
# 権限付与(開発環境のみ)
chmod 664 .env
# または、手動で設定
php artisan key:generate --show
# 出力されたキーを.envに手動でコピーエラー4: 本番環境で確認プロンプトが出る
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? (yes/no) [no]:原因:.envのAPP_ENV=productionの時は安全装置が働く
対処法:
# 本当に実行したい場合のみ
php artisan key:generate --force⚠️ 警告: 本番環境で実行すると全ユーザーがログアウトされます!
6. 本番環境での注意点
⚠️ 絶対にやってはいけないこと
# 本番環境で既に稼働中のアプリで実行 ← 絶対NG!
php artisan key:generate --force何が起こるか:
- 全ユーザーのセッションが無効化(強制ログアウト)
- 暗号化されたCookieが復号化不可能に
- データベースに保存された暗号化データが読めなくなる
本番環境での正しい手順
初回デプロイ時
# ローカルで生成
php artisan key:generate --show
# 出力されたキーをメモ
# base64:xxxxxxxxxxxxxxxxxxxxx
# サーバー側の.envに手動で設定
vim /path/to/production/.env
# APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxキーローテーションが必要な場合(セキュリティ侵害時)
30年の実務経験から言うと、APP_KEYの変更は計画的なメンテナンス時間に行うべきです。
手順:
- メンテナンスモード開始
php artisan down --secret="your-secret-token"- 全セッションをクリア
php artisan cache:clear
# Redisを使っている場合
redis-cli FLUSHDB- 新しいキー生成
php artisan key:generate --force- 暗号化データの再暗号化(必要な場合)
// 暗号化されたカラムがある場合は再暗号化が必要- メンテナンスモード終了
php artisan up- ユーザーに通知
「セキュリティ強化のため、再度ログインが必要です」
環境変数での管理(推奨)
.env での管理:
APP_KEY=base64:xxxxx環境変数での管理(より安全):
# サーバー環境変数として設定
export APP_KEY="base64:xxxxx"
# Laravelは環境変数を優先的に読み込むDocker Compose例:
services:
app:
environment:
- APP_KEY=${APP_KEY}7. Laravel 12での変更点
パフォーマンス改善
- キー生成速度が若干向上(体感差はほぼなし)
互換性
- Laravel 12でも同じ仕様を維持
- 既存のAPP_KEYはそのまま使用可能
セキュリティ強化
- より強固な乱数生成アルゴリズムを使用(内部実装の改善)
8. チートシート(コピペ用)
# 基本的な使い方
php artisan key:generate
# キーを表示のみ(.envに書き込まない)
php artisan key:generate --show
# 本番環境で強制実行(危険!)
php artisan key:generate --force
# 現在のキー確認
cat .env | grep APP_KEY
# または
php artisan tinker
>>> config('app.key')9. 関連するArtisanコマンド
セキュリティ関連:
php artisan cache:clear– キャッシュクリアphp artisan config:clear– 設定キャッシュクリアphp artisan session:table– セッションテーブル作成
環境設定関連:
php artisan config:cache– 設定キャッシュ作成php artisan env– 環境情報表示
まとめ
覚えておくべきポイント
✅ DO(やるべきこと):
- 新規プロジェクトでは必ず実行
.env.exampleコピー後は必ず実行- 初回デプロイ時に実行
❌ DON’T(やってはいけないこと):
- 本番環境で既存アプリのキーを再生成
- APP_KEYをGitにコミット
- 複数環境で同じキーを使い回す
PHP開発経験から
APP_KEYの管理は、Laravelアプリケーションのセキュリティの根幹です。
実際にあったトラブル例:
- 本番環境で誤って
key:generateを実行 → 全ユーザーログアウト → 大クレーム .envをGitにコミット → APP_KEYが漏洩 → セキュリティインシデント
これらのミスは一度経験すると二度と忘れません。ぜひこの記事を参考に、正しい運用を心がけてください。
環境に合わせた.envファイルのAPP_KEYの項目が変更されます。
この値は暗号化に利用されるので、不用意に変更すると、DBなどに保存されたパスワードの照合などができなくなってしまうので、サービス稼働後に変更をすることは基本的にできません。

