Laravelでは、APIキーや接続情報などを .env ファイルに保存します。
.envファイルの情報をコントローラーやビューで使うときは、configヘルパ関数を使います。
テスト環境では不要ながら、本番環境では、このステップが必要です。
3ステップで設定方法を紹介した後に、なぜこんなことをするのか、理由を解説していきますね。
LaravelでAPIキーを.envにいれてconfig経由で使う方法
まずは方法を、3ステップで解説していきますね。
今回はStripeというサービスのAPIキーを例にとって、説明していきます。
ステップ① .envファイルに入力
まず.env(環境設定)ファイルを開き、次のようにAPIキーを入力します。
なお.envに入力する際には、大文字でいれるルールがあります。
実際の入力例はこちら。
1 2 |
STRIPE_KEY=STRIPE公開可能キー STRIPE_SECRET=STRIPEシークレットキー |
ステップ② configファイルに入力
次に app/configフォルダのservices.phpファイルを開きます。
下記のように、.envファイルの内容を読み込ませます。
‘設定名’ => env(‘envファイルでの設定名’),
],
return[],はすでに入っているので、入力不要です。
ひとつのシステムに複数のキーがあって、まとめて入れる場合には、配列が使えます。
実際の入力例はこちら。
1 2 3 4 |
'stripe' => [ 'pb_key'=>env('STRIPE_KEY'), 'st_key'=>env('STRIPE_SECRET'), ], |
ステップ③ コントローラーやビューで設定値を呼び出す
最後に、この情報をコントローラーやビューファイルで読み込みます。
この際、configヘルパ関数を使って、下記のようにキーを呼び出せます。
具体的には、コントローラーでキーを呼び出す場合には、次のように書きます。
1 |
$value=config('services.stripe.pb_key'); |
ビューファイルでは、下記のようにします。
1 |
{{ config('services.stripe.pb_key') }} |
LaravelでAPIキーを.envにいれてconfig経由で使う理由
ここまでで、設定方法を解説しました。
次に、なぜ、.envファイルの内容を直接読み込んではいけないかを解説します。
Laravelには、config:cacheというコマンドがあります。
1 |
php artisan config:cache |
本番環境に移行する前に、実施したほうが良いコマンドのひとつ。
これを行うと、設定情報が1つのファイルに統合され、高速でロードができるようになります。
公式マニュアルには、本コマンドについて、下記のように説明があります。
アプリケーションをスピードアップさせるために、全設定ファイルを一つのファイルへまとめる、
config:cache
Artisanコマンドを使ってください。これによりアプリケーションの全設定ファイルのオプションが、単一のファイルに結合され、フレームワークが素早くロードできるようになります。一般的には、本番環境へのデプロイ作業の一環として、
php artisan config:cache
コマンドを実行すべきでしょう。
*参考元:Laravel8 公式マニュアル
ところが、このコマンドには、大きな落とし穴が!
config:cacheコマンドを入力すると、.envファイルはロードされなくなってしまうのです。
そのため、.envから直接 設定値を呼び出している箇所では、すべて null という値が返ってきてしまうことに。
つまり、外部のキーが呼び出せなくなるコワい事態になります。
これを回避するため、.envの設定値を直接呼び出さず、configヘルパ関数を使ってアクセスする必要があるのです。
configを経由していれば、config:cacheを行っても、設定値は保持されます。
まとめ
今回のまとめ
◆APIキーや接続情報は次の3ステップで呼び出す
①.envファイルに保存
②configに保存
③コントローラーやビューで、configヘルパ関数を使って呼び出す
◆.envから直接キーを呼ぶ出すのがダメな理由は、config:cache を行った際に、.envファイルはロードされなくなるから。
ちなみにLaravelの英語の公式文書には、今回お伝えした注意点が下記のように書かれています。
エクスクラメーションマーク(!)がバンっと付いていて、しっかり注意喚起がされていますよね。
*参考元:Laravel [configuration]
ですが普段用(?)の公式マニュアルには、この件はさらりと書かれており、事の重要さが分かりにくい気がします^^;
アプリケーションを外部と接続させる際には、ぜひご注意ください。
なおconfigファイルからうまく読み込めないトラブルは、こちらの記事で解説しています。
困ったときには、併せて参考にしてください。
ひとことメモ
config内の既存ファイル(service.php)に書く方法を解説しましたが、新規ファイルを作ってもOK。
入力するキーが多い場合には、そのほうが分かりやすいです。