【Laravel】.envファイルとconfigヘルパを知る
もくじ
- .envファイルとは
- ファイル変更したら更新コマンドを実行
- 環境変数は.envファイルで管理
- env()ヘルパとconfig()ヘルパ
- 何故直接env()を使ってはいけないのか
- 各キーについて
- 参考URL
.env
ファイルとは
Laravelにおける設定をまとめたファイルのことです。
env
は environment の短縮形で「環境」という意味です。
.env
ファイルにはキーと値のペアが記述されており、それらのペアはconfig
ディレクトリ以下の各種機能の設定ファイルの中で利用されます。
ファイル変更したら更新コマンドを実行
.env
ファイルを変更するだけではアプリに反映されません。
反映するために以下のコマンドを実行します。
$ php artisan config:clear
これを実行することで変更した内容が反映されます。
意外にコマンド実行を忘れて設定が反映されずに頭を抱えることも少なくありませんので、念頭に置いておきましょう。
次項から各キーについて説明していきますが、設定を変更して確認する際には必ず実行してください。
環境変数は.env
ファイルで管理
dev環境や本番環境など、環境の違いによって.env
ファイルは初めから違う値を設定していると思います。したがって、環境変数は.env
ファイルで管理すべきです。
/config/XXXXX.php
にenv()
ヘルパを用いることで.env
ファイルを読み込みに行きますが、/config/XXXXX.php
に直接書いてしまうと環境によって値を変えることができません。
たとえば/config/session.php
のsecure
をみてみます。
'secure' => true,
SESSION_SECURE_COOKIE=true
これらはここだけを見ると同じ意味になります。
しかしこのsecure属性は以下のようにすることがほとんどでしょう。
- dev環境では
false
- 本番環境では
true
環境によって違いを持たせられるのは.env
ファイルです。
すなわち/config/session.php
に直接値を指定してしまうとどの環境でもtrue
になってしまいますが、.env
ファイルを読み込むようにしておけば環境を考慮した設定ができるのです。
'secure' => env('SESSION_SECURE_COOKIE'),
※Laravelの初期値はこうなっています。今回説明のために変更しました。
env()
ヘルパとconfig()
ヘルパ
env()
ヘルパはコントローラーやモデルなどの中で直接使いません。
コントローラー等で使用する場合は、まずconfig
ディレクトリにあるファイルの中でenv()
ヘルパの値を入れて設定しておき、コントローラー等ではconfig()
ヘルパを用いて参照します。
return [ // configに.envのキー名を入れる。 'my-env' => env('MY_ENV'), ];
$my_env = config('my-app.my-env');
このように、config()
ヘルパでファイル名と変数名を用いて参照できます。
config('[configファイル名].[変数名]')
何故直接env()
を使ってはいけないのか
コントローラー等で直接env()
ヘルパを使ってはいけない理由は、本番環境でconfig:cache
コマンドを実行した際.env
ファイルを読み込まないためです。
読み込む前にconfig
のキャッシュの有無を確認し、キャッシュがあった場合は.env
ファイルを読み込まない仕様になっています。
・・・ってどういうこっちゃ?になりますよね。どういうことかもう少し噛み砕きます。
config
配下以外でenv()
ヘルパを使用すると、.env
の値(環境変数)を取得しようとするとき.env
ファイルをロードせずnull
が返ってきます。
それを回避するために一度config()
ヘルパをはさむことで.env
の値を取得します。
各キーについて
.env
ファイルには複数のキーに対してそれぞれ値が記述できます。
APP_NAME:サイト名
開発しているサイトの名前を設定できます。
APP_NAMEが利用されているファイルは、以下の2つです。
/config/cache.php /config/session.php
APP_ENV: 環境名
開発しているサイトの実行環境を指定します。
以下のようなものがよく使われるでしょう。
- local … ローカル(開発)
- dev … 開発
- staging … ステージング
- production … 本番
APP_ENVで指定した環境は以下のようなコードに影響します。
$env = app()->environment();
APP_KEY: 暗号化に使われるキー
Laravelがインストールされると各自ランダムで作成されます。
暗号化に関連する以下の場面で利用されています。
encrypt()
、decrypt()
など暗号化/復号する- パスワード・リマインダーで使われるトークンをつくる
このキーは以下のコマンドを実行することで変更することができます。
$ php artisan key:generate
自動で.env
ファイルが変更されます。
APP_DEBUG
エラーがあった場合に、エラー詳細をデバッグするかどうかです。
値はtrue
かfalse
を指定します。
APP_DEBUG=true
APP_DEBUG=true
APP_DEBUG=false
APP_DEBUG=false
false
だとなぜエラーなのか教えてくれませんが、本番環境の場合はユーザが知る必要のない(ユーザに知られてはいけない)情報なので「ページを表示できない」ということだけを知らせてくれるメリットがあります。
APP_URL: サイトのURL
サイトのURLに関連する部分で利用されています。
config('app.url')
LOG_CHANNEL: ログ情報の設定
インストールしたままであればLOG_CHANNEL=stack
になっているでしょう。stack
がデフォルト値であり、.env
ファイルのLOG_CHANNELの設定がなければstackに設定されます。
stack
以外にsingle
チャネルやdaily
チャネル、slack
チャネルなどがあります。チャネルによってログメッセージを処理する方法が異なりますので、詳細は他の記事で調べてみてください。
参考URL:Laravelのログ設定を理解する | アールエフェクト
DB_*****: データベースへの接続情報
DB_CONNECTION
利用するデータベースの種類を指定します。
config/database.php
のconnections
にデフォルトで選べるデータベースがあります。
- sqlite … SQLite
- mysql … MySQL
- pgsql … PostgreSQL
- sqlsrv … SQL Server
DB_HOST
データベースのホストです。
127.0.0.1
やlocalhost
が多いでしょうか。
DB_PORT
データベースが利用するポート番号です。
DB_DATABASE
利用するデータベース名です。
DB_USERNAME
利用するデータベース名にアクセスするユーザー名です。
DB_PASSWORD
利用するデータベース名にアクセスするパスワードです。
BROADCAST_DRIVER: ブロードキャスト設定
ブロードキャストの種類を設定する項目です。
CACHE_DRIVER: キャッシュ方式
Laravelで扱えるキャッシュは以下の6種類です。
デフォルト値はfile
です。file
はファイルベースでのキャッシュを行います。
参考URL:Laravelのキャッシュを用いてDB負荷の削減と高速化を行う(入門/導入編)
QUEUE_CONNECTION: キュー方式
利用するキューの方式を設定する項目です。
SESSION_*****: セッション関連
SESSION_DRIVER
利用するセッションの方式を設定する項目です。
SESSION_LIFETIME
セッションの継続時間(分)です。デフォルトは120(分)です。
ただし、php.ini
のsession.gc_maxlifetime
やsession.cookie_lifetime
の値がこれよりも短い場合は、そちらが優先されますので注意です。
MAIL_*****: メール関連
MAIL_DRIVER
メール送信方式を指定します。
MAIL_HOST
メールサーバーのホスト名を指定します。
MAIL_PORT
メールサーバーのポート番号を指定します。
MAIL_USERNAME
メールサーバーのユーザ名を指定します。
MAIL_PASSWORD
メールサーバーのパスワードを指定します。
MAIL_ENCRYPTION
tsl
やssl
などのメールを暗号化するプロトコルを指定します。
その他
初期値では設定されていない項目も多々あるようです。
AWSの接続設定なども.env
ファイルから指定できます。
いろいろ活用してみましょう!
参考URL
入門者のためのLaravel .envファイルの基礎と理解 | アールエフェクト
保存版!Laravelの.envでできること大全 – console dot log