[Laravel8]blade環境ごとのメッセージの出しわけ(view)

2021年9月17日

はじめに

Web開発をしているとテスト環境触っていたはずが、
本番環境触っていた!みたいなミスが発生したことはありませんか。
そしてテスト環境と本番環境を間違えたことにより、
残念ながらインシデント等重大なミスを発生させてしまうことがあると思います。

そこでブラウザでアクセスした際にどの環境にアクセスしているか確認できるようにする方法をご紹介します。

開発、テスト、本番環境の環境の違いはそれぞれシステムによって異なります。
もっと厳密に出来る、厳密にしたほうがいいというご意見はあると思いますが、
まずはLaravel上で簡単に出来る内容でご紹介したいと思います。

環境ごとによる表示の出しわけ方法

1..envのAPP_ENVを環境ごとに設定値を変える
例 開発環境 APP_ENV=local
  STG環境 APP_ENV=staging
本番環境 APP_ENV=production 

2.view側でAPP_ENVの設定値を元に表示変更

OKパターン

views/xxxx.blade.phpを編集

{{--enddev--}}
@env('local')
    // アプリケーションは"local"環境で動いている
@endenv
@env('staging')
    // アプリケーションは"staging"環境で動いている
@endenv
@env('production')
    // アプリケーションは"production"環境で動いている
@endenv

こんな感じでいけます!

ユーザーに公開しているサービスは本番環境では何も出さないのが良いかと思うので、
何も出てなければ本番環境というふうに切り分けしてもらえれば良いかと思います。

NGパターン

他の人も書いてますが、この書き方は似ていますがphp artisan config:cache    
こんな感じでキャッシュを作成したときに値が取れなくなるのでダメです。

今はキャッシュ使ってなくても後々負荷対策でキャッシュ使うこともあるのでやめておきましょう。
テスト環境ではキャッシュ使ってなくて再現しなかったのに、
本番環境だけ再現したとかいう怖いことになります。

↓この書き方(envを直接読む)はNG 

{{-- env() --}}
@if (env('production')) 
     production環境っす
@elseif (env('staging')) 
     staging環境っす
@elseif (env('local'))
     local環境っす
@else
    ERROR! APP_ENVが空か環境名以外の値が入ってる 
@endif


Posted by karaagelovers