APIキーを.envにいれてconfig関数で呼び出す理由と方法【Laravel入門講座】

Laravel 入門講座

Laravelでは、APIキーや接続情報などを .env ファイルに保存します。

.envファイルの情報をコントローラーやビューで使うときは、configヘルパ関数を使います。

テスト環境では不要ながら、本番環境では、このステップが必要です。

3ステップで設定方法を紹介した後に、なぜこんなことをするのか、理由を解説していきますね。

LaravelでAPIキーを.envにいれてconfig経由で使う方法

まずは方法を、3ステップで解説していきますね。

今回はStripeというサービスのAPIキーを例にとって、説明していきます。

ステップ① .envファイルに入力

まず.env(環境設定)ファイルを開き、次のようにAPIキーを入力します。

設定名=キー

なお.envに入力する際には、大文字でいれるルールがあります。

実際の入力例はこちら。

ステップ② configファイルに入力

次に app/configフォルダのservices.phpファイルを開きます。

下記のように、.envファイルの内容を読み込ませます。

return [
‘設定名’ => env(‘envファイルでの設定名’),
],

return[],はすでに入っているので、入力不要です。

ひとつのシステムに複数のキーがあって、まとめて入れる場合には、配列が使えます。

実際の入力例はこちら。

ステップ③ コントローラーやビューで設定値を呼び出す

最後に、この情報をコントローラーやビューファイルで読み込みます。

この際、configヘルパ関数を使って、下記のようにキーを呼び出せます。

confit(‘ファイル名.設定値名’)

具体的には、コントローラーでキーを呼び出す場合には、次のように書きます。

ビューファイルでは、下記のようにします。

ひとことメモ

config内の既存ファイル(service.php)に書く方法を解説しましたが、新規ファイルを作ってもOK。

入力するキーが多い場合には、そのほうが分かりやすいです。

LaravelでAPIキーを.envにいれてconfig経由で使う理由

ここまでで、設定方法を解説しました。

次に、なぜ、.envファイルの内容を直接読み込んではいけないかを解説します。

Laravelには、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ファイルからうまく読み込めないトラブルは、こちらの記事で解説しています。

困ったときには、併せて参考にしてください。

コメント

タイトルとURLをコピーしました