既存のLaravelプロジェクトでもキーを生成する
新規プロジェクトの作成時にはキーが生成される
Laravelのプロジェクトをcomposerのコマンドで生成すると、
composer create-project laravel/laravel example-app
下記のようなcomposer.jsonファイルが作成され、
post-root-package-installpost-create-project-cmdpost-autoload-dump
のスクリプトが実行される。
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
...
},
"require-dev": {
...
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": [
]
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
}
上記の結果、.envファイルが作成されて、APP_KEYがセットされる。
既存プロジェクトのクローン時は生成されない
上記のcomposer.jsonを含むプロジェクトをクローンしてcomposer installを実行すると、
post-root-package-installpost-create-project-cmd
が実行されず、
post-autoload-dump
のみ実行される。そのため、.envファイルが作成されず、APP_KEYの値も生成されない。
プロジェクトを実行するにはAPP_KEYが必要になるため手動で生成する必要がある。
既存プロジェクトでも生成させる
既存プロジェクトでcomposer installを実行した場合でも生成されるようにするにはスクリプトを変更すれば良い。
{
...
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
"grep ^APP_KEY=. .env > /dev/null || php artisan key:generate",
"php artisan package:discover"
]
},
...
}
post-autoload-dumpはcomposer installの度に実行されるためAPP_KEYが生成済みかチェックする必要がある。
@phpはphpの実体に書き変わるが、先頭でしか有効でないため全てphpを直接指定している。