ページビューの合計

2023年2月16日木曜日

Laravle: .envの扱いに関して

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のような感じ。

上記の掲示板で言及されているように既にフレームワークにある機能を自分で実装する必要はないでしょう。

公式マニュアルによると

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


確かにLoadEnvironmentVariables.phpの中で環境変数"APP_ENV"とマッチする設定ファイルをロードしていますね。

  1. --env CLI引数が指定されていれば該当するものを読み込む
  2. APP_ENVが指定されていなければリターン(デフォルトを使用)
  3. APP_ENVが指定されていれば該当するものを読み込む


なので
.envを.env.localにコピー
.env.localの内容を編集
.env.localはGitで管理しないようにする(.gitignoreに書く)
環境変数APP_ENVに"local"を設定する
という感じにすれば、ローカル用の設定を別ファイルにしつつ間違って本番環境を壊したりしなくすむでしょう。

簡単にアプリを作ってみます。
envを使って.envの内容を表示するものです。

    <body class="antialiased">
            <p>Check env</p>
            @php
                $value = env('DB_CONNECTION', 'NotFound'); 
            @endphp
            <h1>DB_CONNECTION(env): {{ $value }}</h1>
    </body>
.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

あれ?変わらない。
PCリブートしました。 
その後だと.env.localの方を読み込みましたね。
環境変数の設定だけではダメらしいです。


4..envのみがあり環境変数APP_ENVに"local"を設定する
環境変数は設定されているが.env.localはないので.envが読み込まれるはず:OK

ということで3.のパターンでやればOKっぽいですね。

0 件のコメント:

コメントを投稿

Laravel再学習

フロントエンド系の方に興味が行っていましたがまたバックエンド系に戻ってきました。 Laravelです。 かなり忘れてます、自分のブログを見ながらもう一度です。 今回はMVCパターン、そして Eloquentを使えるようになるのが目的です。 まずはプロジェクト作成から 1. Com...