Laravelの.envファイルについてのトピックス3つ!

Laravel Laravel

Laravelの.envファイルについて、覚えておいた方が良い基本的なことや
envヘルパーを使用した値の取り方などを書いています。

Laravelの.envファイルとは?

Laravelの.envファイルは環境ごとに異なる設定をするためのファイルです。
ローカルと本番で設定値を変えたい場合などに.envファイルに記載しておくと、Laravel内のプログラムの中で好きなときに呼び出すことが可能です。

呼び出すときにはenvヘルパーを使用して呼び出します。
Laravelでphpdotenvが採用されているため、この形式で環境ごとの設定を持っておくことになっています。

ファイルの初期について

Laravelを立ち上げると、.env.env.exampleという2つのファイルがあると思います。

.env.exampleはファイル名の通り、設定の例となりGithubなどで管理するためのファイルになります。
本番環境で使用するような「重要な値」は記載せずに、値なしでとりあえずキーだけ書いといてGithubなどでソース管理することが多いです。

.envファイルは実際にLaravelから読み込まれるファイルになります。
こちらに環境によって必要な値を設定します。

GithubからLaravelのソースを落としてきた場合は.env.exampleしかないので、.envというファイル名に変えて値を設定して、Laravelを動かします。
.envファイルは、通常.gitignoreファイルで弾かれているためGithubに上がらないようになっています。

ファイルの中身

実際に.envファイルを確認すると、下記のようになっています。
左が値を取ってくるときのキーで、右が設定する値です。

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_LEVEL=debug
// ---- 省略 ----

.envファイルがない?気をつけること

.envファイルのような「.」ドットがついているファイルは隠しファイルと言って、LinuxやMac上では通常は非表示になっています。

表示するようにすることも可能です。
Macでは、Finder上で「shift + command + .(ドット)」同時押しで確認できます。

envヘルパーの使い方

envヘルパーの呼び出し方ですが、下記のように引数にキーを渡すと、値が返ってきます。

echo env("APP_NAME"); // Laravelが表示される

デフォルト(上記の例)だと、”Laravel”が表示されます。簡単ですね。

envヘルパーには第2引数を渡すこともできます。
第2引数に値が渡された場合、キーが定義されていない場合のデフォルト値となります。

たとえば、下記のようにAPP_NAME_HOGEという、.envファイルに定義されていないキーで呼び出された場合です。

echo env("APP_NAME_HOGE", "DefaultHoge"); 

キーがないので、第2引数の”DefaultHoge”が返ってきます。

configファイルにenvヘルパーが使用されている?

config/app.phpをデフォルトの状態で開くと、下記のようにconfigファイルで、envヘルパーが使用されている箇所があります。

return [
  'name' => env('APP_NAME', 'Laravel'),
];

この場合も、通常通りenvヘルパーを呼び出した時と同じ挙動になります。

つまり、config("app.name")とconfigヘルパーから上記の”name”項目を参照した場合ですが

.envファイルのAPP_NAMEの値が返されます。
.envファイルにキーが定義されてない場合はLaravelが返ってきます。

configを使用するメリットですが、configに書かれた内容はキャッシュを作成することで高速に動作するようです。
(実際に速度計測などは試してみていませんが、公式のこちらに書いてありました)

注意点としてphp artisan config:cacheを使用して、 キャッシュを作成するとenvヘルパーの呼び出しが効かなくなります。
.envのキーが定義されていない状態と同じように、nullを返すようになってしまいますので注意が必要です。

なので、キャッシュを使用して高速化する場合は、”APP_NAME”と同じようにconfigに定義しておく必要がありますね。

コメント

タイトルとURLをコピーしました