環境ごとに違う設定値の扱い方として正しいのはどれですか。
環境依存の値は .env に置き、config/ の中で env() を読み、アプリからは config() 経由で参照します。リポジトリには .env.example だけを入れ、本番の値は含めません。
面接官が見ているのは.env と config の関係を理解しているか。
よくある答えと、面談でどう見られるか
- .env に置き、config/ の中で env() を読み、アプリからは config() 経由で参照する
これが原則です。.env はリポジトリに入れず、本番はサーバー上に権限を絞って置きます。 - どこからでも env() を直接呼んでよい
config:cache を実行すると .env が読み込まれなくなり、config/ の外の env() はシステム環境変数しか見なくなります。定番の事故です。 - config/ に直接値を書き、環境ごとにファイルを分ける
動きますが、秘密情報がリポジトリに入ります。値は .env、構造は config/ が原則です。 - すべて定数としてコードにハードコードする
環境ごとにコードを変えることになり、秘密情報もリポジトリに入ります。
面接官は何を見ているか
- .env と config/ の役割分担を説明できた
- .env をリポジトリに含めないと言えた
- 本番の .env の配置・権限に触れた
模範解答
環境依存の値は .env に置き、config/ のファイルから env() で読んで、アプリコードは config() 経由で参照します。.env はリポジトリに含めず、.env.example だけをコミットします。本番の .env はサーバー上に直接置き、権限を絞ります(600)。鍵やパスワードがリポジトリに入ると、履歴から消すのが非常に面倒になります。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
一部しか触れられなかった場合
.env をリポジトリに入れてはいけないのはなぜですか。