【Laravel】.envファイルの値の正しい取得方法【env関数を使うのは間違い】

Laravel で本番環境と開発環境を使い分けたいときに、.envの値を取得する場合があると思います。

私の場合は本番環境のみGoogle Analyticsのコードを仕込みたかったので、if文で本番環境か開発環境かどうかを判定する必要がありました。

 

イメージはこんな感じです。

<head>
〜略〜
@if(本番環境ならば)
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜

※bladeファイルです

 

【問題発生】Webアプリをデプロイしたが、アナリティクスが機能していない。。

MusicStore Reviewsという楽器店のレビューサイトを公開した際、Google Analyticsのコードを仕込んだのですが、アクセス数が数日連続で0だったため、これはオカシイと思い今回の問題が発覚しました。

ちなみに以下のサイトです。

MusicStore Reviews 楽器店のレビューサイト
ミュージシャンのための楽器店レビューサイト「MusicStore Reviews」は全国の楽器店の口コミや評判を掲載中。レビューを投稿し合うことでこれから楽器を始めたい人や、より良い楽器を探すプレイヤーにとって最適な楽器店を見つけられます!

 

.envファイルの値の取得方法

結論から言うと正しい.envファイルの値の取得方法は以下です。

 

config('app.env')
※config/app.phpの'env'の値を取得する場合

 

.envファイルに直接アクセスする env('APP_ENV') という書き方は良くないです。

理由は、設定ファイルがキャッシュされている場合、env関数がnullを返すためです(envファイルを読み込まなくなる)。

本番環境ではキャッシュを保存するため、env(変数名)を使ってしまうとnullとなりエラーの原因となります。

※今回Google Analyticsのコードが読み込まれなかったのはif文の条件式で env('APP_ENV') を使用しており値がnullとなっていたためだった。。

 

configディレクトリ以下のファイル(この場合config/app.php)に、

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

のような書き方をして、その他の場所(bladeファイルやコントローラーなど)では

config('app.env')

のようにconfig('ファイル名.変数名')でアクセスしましょう。

 

本番環境のみ適用させたい場合は、

<head>
〜略〜
@if(config('app.env') === 'production')
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜

このように書きます。

技術メモ
スポンサーリンク
スポンサーリンク
のすけをフォローする
やばブロ!

コメント