はじめに
LARAVELをインストールしたまではよかったのですが、いざPostgreSQLを使おうとした際にデフォルト設定では接続できないらしい、設定を変更する必要がある、とのこと。
そこで公式ドキュメントを読んでみたところ、どこをいじってよいのかよくわからないので、自分なりに調べてまとめてみました。
設定のある場所
- [root]/.env
- [root]config/*.php
- 'php artisan config:cache' コマンドで作成された設定
[root]/.env について
LARAVELをインストールすると作ってくれる、インストール時の環境に応じた環境設定。
これそのものは何もしない(と思うのだが…。)
[root]/config/*.phpについて
設定ファイル群。キャッシュファイルを作らない限りここから設定を読み込む。
'php artisan config:cache' コマンドで作成された設定 について
上記設定ファイル群から読み込んだ設定をまとめたもの。これを作成するとアプリが早くなるらしい。
そしてこの設定キャッシュファイルの存在が確認できた場合には、/.envファイルは読み込まれなくなる。
#それぞれの関係について
[root]/config/*.php を開いてみると、ところどころで'env()'関数を使っている。ではこの関数はなんぞやというと、
env([ パラメータ1 ],[ パラメータ2 ]);
パラメータ1の環境設定値を返す。
パラメータ1の環境設定値がない場合には、パラメータ2の値を返す。
パラメータ1のみでパラメータ1の環境設定値がないときにはnullを返す。
つまり、
HOGE=hogehoge
のとき、
'fuga' => env('HOGE');
で fuga = 'hogehoge'
となる。また、
'fuga' => env('PIYO');
であれば、PIYOという値の設定はないので、
fuga = null
となるし、
'fuga' => env('PIYO','piyopiyo');
であれば
fuga = 'piyopiyo'
となる。
#つまりなんなんだよ
結論としては、
- /config/*.php の内容を確認する
- 環境設定でいじれるものは/.envでいじる
- env()関数を使ってなさそうなものは/config/*php を直接編集する(カスタムのconfigファイルを作る方法もあるらしいですが、ここでは触れません。)
- いよいよ設定も固まってきたぞといったところで 'php artisan config:cache' で設定キャッシュファイルを作成する。これによって設定は固定化され、
/.envに依存する設定はnullとなる。/.envはロードされなくなり、env()関数は全てnullを返す。
だから公式ドキュメントでは「アプリケーションの開発期間中は設定が頻繁に変更されることも多いので、ローカルでの開発中にこのコマンドを実行してはいけません。」と書かれているのでしょう。
#参考
Laravelのデータベース設定(config/database.php)の意味
Laravel 5.8 設定
Laravel の .env の値は config() 経由で使う。
2019-06-26 追記
Laravelヘルパ envメソッド
ありがとうございます。