【Laravel】 configとenvで環境を設定して値を取得する

Laravelは様々な設定を行うことができますが、一般的にはconfig関連のファイルと.envファイルの2つを使用して設定を行います。

設定の参照

Laravelの各種設定は、configディレクトリ内に入っています。

Laravelのconfigファイル

これらのconfigファイルはLaravelが実際に読み込むファイルですが、その中身では多数のenv関数が呼ばれています。

このenv関数で取得しているのは、.envファイルに書かれている変数です。

Laravelの設定の参照のしかた

.envは、OSの環境変数 ($_ENVで取れるもの) とは別物です。あくまでLaravel用の環境変数です。

envの扱い方

各configは、それぞれを実装する際に設定の仕方を知ればよいだけですが、.envをどのように扱えばよいのでしょうか。

.envは、基本的に環境ごとに作成されます。

app
├ config/
│ └ ...
├ .env
├ .env.develop
├ .env.local
└ .env.production

.envは、通常はgitの管理対象に含めません.env.localなどの各環境ごとの.envをgitに含め、デプロイの処理の中でdevelopやproductionなどの環境ごとに適切なファイルを選択して.envにリネームします。ローカルは手動で.env.localをリネームすることもあります。

値の呼び出し

設定した値は呼び出すためにあります。.envとconfigのそれぞれの参照方法を見ていきましょう。

設定を変更後にそれを反映させるには、必ずphp artisan config:clearoptimize等して、configのキャッシュをクリアする必要があります。

env関数

Laravelではしばしばenv関数を利用しています。env関数は.envから値を取り出すためのものです。

env関数の第1引数には.envにあるキー名を、第2引数にはそこになかった場合のデフォルトの値を書きます。

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

普通のロジック内でも呼べますが、多くは設定ファイルを経由するはずです。

configを参照

各configから値を取得するには、config関数を用います。

config関数では、第1引数に対象となるキーを書きますが、ファイル名.設定のようにして取得します。第2引数には設定がなかった場合のデフォルト値を設定できます。

// app.php の name を参照
$name = config('app.name');

// デフォルト値付き
$name = config('app.abc', 'hogehoge');

階層構造になっている場合、app.hoge.fugaのようにドット区切りで指定します。また、階層の途中までなら配列で取得できます。

また、設定ファイルは自由に追加することができます。

config/sample.php
return [
    'hoge' => [
        'fuga' => 100,
        'hige' => 'abc',
    ],
];
Log::debug(config('sample.hoge'));
Log::debug(config('sample.fuga'));
result
[2022-03-24 14:04:44] local.DEBUG: array (
  'fuga' => 100,
  'hige' => 'abc',
)  
[2022-03-24 14:04:44] local.DEBUG: 100  

これらのenvconfigといったヘルパはほぼどこからでも呼べるため、bladeから呼ぶなども可能です。

<p>{{ config('app.name') }}</p>

configを一時的に更新

もしconfigを一時的に更新したい場合もconfig関数を使用します。

config(['app.name' => 'MyApp']);
Log::debug(config('app.name')); // local.DEBUG: MyApp

これによる設定変更はその実行限りで、次にページにアクセスするなどの際は元に戻っています。

まとめ

Laravelではenvとconfigの2つを使用して設定を参照しています。.envは環境ごとにファイルを分け、それぞれの環境ごとに固有の設定を書き込みます。.envを使用して、デプロイしてうまく設定を切り分けられるようにしましょう。

laravel config thumb

役に立ったらシェアしよう!