Laravelには、ルートキャッシュやビューキャッシュなどいろいろなキャッシュがあるが設定キャッシュについてまとめてみる。
設定キャッシュについてあまり知られてないこと
・デフォルトでは有効になっていない。
・コマンドを入力することにより有効にできる。
・設定キャッシュのクリアとは設定キャッシュを無効にすること。
デフォルトで有効になっていると思っている人が多そうだけどなっていない。
以下の「設定キャッシュの生成」と「設定キャッシュのクリア」で有効/無効を切り替えることが出来る。
設定キャッシュの生成
php artisan config:cache
設定キャッシュのクリア
php artisan config:clear
つまり、「設定キャッシュの生成」コマンドを実行した時点の設定値でキャッシュを作り、以降ファイルからではなく高速なキャッシュから値を参照することができる。
そして、「設定キャッシュのクリア」は、再度新しい設定値でキャッシュを作り直してくれるようなイメージだけど、実はキャッシュを無効化するコマンドである。
つまり、新しい設定値でキャッシュを作り直すには、「設定キャッシュの生成」コマンドを再度実行する必要がある。
実際の運用方法としては
設定値を頻繁に変更するような開発環境:キャッシュを無効
本番環境:キャッシュを有効
※デプロイ時は、デプロイスクリプトに「キャッシュの生成」コマンドが必要!!
にしておけば良いと思われる。
設定キャッシュの状態確認方法
現在の環境で設定キャッシュの有効/無効確認は
\bootstrap\cacheフォルダに、config.phpファイルが存在していれば有効になっている。
設定キャッシュの謎仕様!!
しかし、設定キャッシュ有効状態でenv(‘xxx’)をするとnullが返ってくる!!
configフォルダ配下のキャッシュされていない設定値への参照なので現在値が返ってくるのならまだ分かる。
しかし、nullが返ってくるのである!!
ドキュメントでもアプリケーションから直接env(‘xxx’)をせず、一旦config配下の設定ファイルを経由して(config(‘xxx.xxxx’))その設定ファイルの中でenv(‘xxx’)して下さいと記述されているのはそういう理由である。
結論
よほどスピードが必要なサイトでない限り設定キャッシュは使わない方が安全な気がする。
もし関数内で大量に参照する場合でも1度変数にセットして使えば良いし、そもそも他のオーバーヘッドに比べれば、設定ファイルからの取得なんてわずかなスピードである。
それでもどうしても設定キャッシュを使いたい場合は
・デプロイ時のスクリプトでキャッシュの作り直し
・/config配下の設定ファイル以外からはenv()を使わないようにする
を徹底すればOKだと思う。