Laravelの環境変数とは何か?読み込み方・新しく設定する方法

Laravelの環境変数とは何か?読み込み方・新しく設定する方法

59 回閲覧されました

みなさんこんにちは、jonioです。

今回はLaravelの環境変数の使い方のメモになります。

Laravelのバージョン

8になりますが他のバージョンで書き方が変わってなかったら使えると思います。

環境変数とは

開発環境や本番環境など環境に応じて使う変数のことです。

環境変数は「Laravelのプロジェクト > .env 」にあります。

環境変数の読み込み

「Laravelのプロジェクト > config」の下の階層にapp.php・auth.phpなどファイルが色々とありますがそこから.envファイルを読み込んでいます。

わざわざconfigの下の階層のファイルから.envファイルを読み込むのではなく直接.envファイルを読み込んだ方が早いと思いませんか?

本番環境にする時は下記のコマンドを叩いた方がいい(叩かなくてもエラーは出ない)ですが.envファイルを読み込まれなくなります。

php artisan config:cache

このコマンドを叩くとファイルの読み込みが少しだけ早くなります。(私の体感では分かりません)

話を戻して「php artisan config:cache」を叩いても.envファイルを読み込めるようにconfigの下の階層のファイルから読み込んでいます。

環境変数の使い方

.envファイルの中身を見ていきます。

.envの中の一番上辺りは下記になっています。

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

「APP_NAME」や「APP_ENV」が環境変数名です。

5行目の「APP_URL」は「Laravelのプロジェクト > config > app.php」の下記で読み込んでいます。

'url' => env('APP_URL', 'http://demo'),

第一引数は.envにAPP_URLの項目があるならその値(http://localhost)を読み込んでない場合は第二引数(http://demo)を読み込むという意味になります。

環境変数を新しく設定する場合

ライブラリを導入してAPIキーを使うなど環境変数を新しく設定しないといけない場合があります。

その場合を見ていきましょう。

例えば.envファイルに下記を記述したとします。

"DEMO_NAME" = "デモ"

「Laravelのプロジェクト > config」の下の階層に「demo.php」を作成します。

configの下の階層にあるファイルならどのファイルでも使えるみたいですが自分で設定したことをわかりやすくする為に新しく作成しました。

まず下記の記述をします。

<?php 
  return [
        
  ];

そして.envファイルを読み込む記述をします、「key => value」の書き方をします。

<?php 
  return [
        'test' => env('DEMO_NAME', 'これはデモですこれはデモです')      //この行を追加
  ];

環境変数を使う時は下記の記述をします。

config('ファイル名.key');

今回の例ではファイル名が「demo」でkeyが「test」ですがこれをコントローラーで使ってみます。

適当なアクションで下記の記述をします。

public function index(Task $task)
{
  echo config('demo.test');

  return view('task.index');
}

ブラウザで確認すると「デモ」と表示され.envファイルの「”DEMO_NAME” = “デモ”」を削除すると「これはデモですこれはデモです」と表示されます。

本番環境と開発環境で表示を切り分ける

開発環境の場合.envファイルに下記の記述があるはずです。

APP_ENV=local

これを読み込んでいるはconfigの下の階層にあるapp.phpです。

'env' => env('APP_ENV', 'production'),

本番では.envファイルの「local」を「production」に変えます。

そしてコントローラーに下記の記述をすれば開発環境と本番環境で表示を切り替えることができます。


if(env('APP_ENV') == 'local'){
  echo 'ローカルです';
}else{
  echo '本番です';
}