050-7117-8104 お見積もり

開発者ブログ

2022年5月19日

【Laravel 8】キャッシュ後に .env が反映されない

Skrumエンジニアの根岸です。

とあるプロジェクトで Laravel 6 を Laravel 9 にアップグレードしました。

ステージングサーバでステージング環境用の.envファイルを作成し、環境変数を変更しました。

cp .env.staging .env
APP_NAME=Laravel-staging  // Laravelから変更
APP_ENV=staging  // localから変更
// その他の環境変数もステージング環境用のものを設定

この状態でコンフィグキャッシュコマンドを実行。

php artisan config:cache

このLaravelアプリケーションのURLにアクセスするとエラーが発生していました。

コンフィグが正しく反映されていないことが原因のようだったので、bootsrap/cache/config.php を確認してみると、APP_NAMELaravelAPP_ENVlocalAPP_KEYは空になっていました。つまり、.envではなく、なぜか.env.stagingがキャッシュされてしまっているようでした。

Laravel 6 で運用している時は、このようなことは発生したことがなかったので、Laravel のドキュメントを確認してみると、やはりこの部分の仕様が Laravel 8 で変更されていました。

追加の環境ファイル

アプリケーションの環境変数を読み込む前に、LaravelはAPP_ENV環境変数が外部から提供されているか、もしくは--env CLI引数が指定されているかを判断します。その場合、Laravelは.env.[APP_ENV]ファイルが存在すれば、それを読み込もうとします。存在しない場合は、デフォルトの.envファイルを読み込みます。

https://readouble.com/laravel/9.x/ja/configuration.html#additional-environment-files

挙動を見るに、「APP_ENV環境変数が外部から提供されている」の「外部」というのは、.envAPP_ENVも含んでいるようでした。

つまり、.envAPP_ENVstagingと定義されていたため、.env.stagingをキャッシュした、ということのようです。

実際、.env.staging.env.staging_にファイル名変更したところ、.envに定義されている環境変数が正しくキャッシュされました。

Pagetop