https://readouble.com/laravel/9.x/ja/configuration.html
設定を読んでいましたが環境ファイルのところは重要なので別にすることにしました。
.envの扱いに関して
ぐぐってたら、プチ炎上してるの掲示板を見つけました。
https://teratail.com/questions/l9i2i08pzhw12p
.envの後ろに付ける修飾子は
- local
- production
- testing
というキーワードでもう決まっているようです。
なので
.env.local
.env.production
.env.testing
という名前でENVファイルを作れば良いのでしょう。
プロジェクトを生成した場合はプロジェクトのルートフォルダに「.env」と「.env.example」
というファイルがあり、中身は全くの同一です。
実際のプロジェクトを想定して、
.env 本番用の設定でGitで管理する
.env.local 開発用の設定でGitで管理しない
というようにシンプルにできないかと思います。
https://kaki-engine.com/laravel-env-file-referenced/
このサイトの案3のような感じ。
上記の掲示板で言及されているように既にフレームワークにある機能を自分で実装する必要はないでしょう。
公式マニュアルによると
追加の環境ファイルデフォルトが「.env」で環境変数「APP_ENV」にマッチしたものが存在すればそれを読み込むようです。
アプリケーションの環境変数を読み込む前に、LaravelはAPP_ENV環境変数が外部から提供されているか、もしくは--env CLI引数が指定されているかを判断します。
その場合、Laravelは.env.[APP_ENV]ファイルが存在すれば、それを読み込もうとします。存在しない場合は、デフォルトの.envファイルを読み込みます。
確かにLoadEnvironmentVariables.phpの中で環境変数"APP_ENV"とマッチする設定ファイルをロードしていますね。
- --env CLI引数が指定されていれば該当するものを読み込む
- APP_ENVが指定されていなければリターン(デフォルトを使用)
- APP_ENVが指定されていれば該当するものを読み込む
なので
.envを.env.localにコピー
.env.localの内容を編集
.env.localはGitで管理しないようにする(.gitignoreに書く)
環境変数APP_ENVに"local"を設定する
という感じにすれば、ローカル用の設定を別ファイルにしつつ間違って本番環境を壊したりしなくすむでしょう。
簡単にアプリを作ってみます。
envを使って.envの内容を表示するものです。
DB_CONNECTION=Production.env.local
DB_CONNECTION=local
以下の4パターン
1..envのみで環境変数APP_ENVは設定しない
本番用の.envが読み込まれるはず:OK
2..envと.env.localがあるが環境変数APP_ENVは設定しない
本番用の.envが読み込まれるはず:OK
3..envと.env.localがあり環境変数APP_ENVに"local"を設定する
ローカル用の.env.localが読み込まれるはず:NG
4..envのみがあり環境変数APP_ENVに"local"を設定する
環境変数は設定されているが.env.localはないので.envが読み込まれるはず:OK
ということで3.のパターンでやればOKっぽいですね。
0 件のコメント:
コメントを投稿