Laravelでは、アプリ本体は、configファイルを経由して、.envファイルの情報を読み込みます。
なぜこんな流れにするかというと、.envファイルの設定情報を直接読み込むのは危険だからです。
コンフィギュレーションキャッシュというコマンドを使うと、.envファイルを読み込めなくなってしまうのです。
と言われても、どういうことか分かりにくいですよね。
わたしも最初、??状態でした。
.envファイルとconfigファイルの役割と、なぜこの流れが必要なのか、分かりやすく解説していきます。
.envファイルとconfigファイルの役割
まずはそれぞれのファイルの役割と関係を解説します。
.envファイルとは
まずは.envファイルについて説明します。ます。
.envファイルは環境設定ファイルとも呼ばれます。
.envは、英単語environmentを省略したもの。
environmentは環境と言う意味です。
このファイルにはデータベースの名前、APIキー、メール送信のための情報などを追加します。
登録された情報は、環境によって変える可能性があります。
たとえば開発環境でのデータベースと、本番環境でのデータベースは変更しますよね。
configファイルとは
次にconfigファイルについて。
configは、英単語のconfigurationの略。
configurationは構造、設定といった意味です。
configの内容は、環境が変わっても変わりません。
ファイルは、configフォルダの中に入っています。
.envファイルとconfigファイルの関係
この2つのファイルの関係は、次のとおりです。
アプリはconfigファイルの設定情報を読み込みます。
configファイルの情報の中には、envファイルから読み込んでいるものがあります。
たとえば config/database.phpファイルを見てみましょう。
18行目あたりに、上記のように書かれています。
【config/database.php】
これは、envファイルのDB _CONNECTIONの情報を読み込むという意味です。
.envファイルに新しく項目を設定した場合には、configファイルには設定がありません。
そのため、手動で入力してあげる必要があります。
.envファイルとconfigファイルの入力例
ではどのように実際に値を入力していくのか。
StripeのAPIをLaravelの中に設定するときを例にとって説明します。
StripeはPaypalのような決済用プラットフォームです。
.envファイルには、次のようにStripeのAPIを設定します。
【.envファイル】
config用ファイルには、次のように .envファイルの内容を読み込みます。
【config/services.php】
アプリの中では、configファイルを経由して、このAPI情報を取得します。
たとえば次のように記述します。
【bladeファイル】
config/servicesフォルダの中のstipeの項目のpb_keyを読み込む、という意味になります。
なぜconfigファイルを経由するのか
.envファイルから直接情報を読み込んだほうが早そうですが、なぜconfigファイルを経由せねばならないのか。
それは、下記のconfiguration キャッシュコマンドを使うと、.envファイルを読み込めなくなるからです。
1 |
config:cache |
そうなってもconfig経由で情報を読み込んでおけば、エラーにならずにすみます。
それなら、キャッシュしなきゃよいのでは?
と思いますよね。
ただ、必須ではないものの、このコマンドは本番環境に移行する前に実行することが多いです。
これによって設定ファイルをまとめられ、アプリをスピードアップさせられるためです。
なので「キャッシュコマンドを実行する」という想定で、configファイルに.envファイルの設定を読み込ませておいたほうが無難です。
ちなみにLaravelの公式マニュアルには、次のように結構サラリと、この危険性が書かれています。
Note: 開発期間中に
config:cache
コマンドを実行する場合は、設定ファイルの中で必ずenv
関数だけを使用してください。設定ファイルがキャッシュされると、.env
ファイルはロードされなくなり、env
関数の呼び出しはすべてnull
を返します。
引用元:Laravel8.x ヘルパ [env()]
さいごに
以上、Laravelの設定ファイルの役割と関係を解説しました。
.envファイルに新規情報を加えたら、configファイルを通じて読み込むようにしておきましょう。
Laravel入門講座では、Laravelの基礎知識について解説しています。
もし分かりにくいことがあれば、他の記事も読んでみてくださいね。