Firebase Local Emulatorでfunctions:config:setによる環境変数を利用したい場合
Firebase Functionsでは process.env
によるユーザ独自の環境変数設定ができない。
代わりに functions:config:set
でconfigオブジェクトを設定できる。
yarn run firebase functions:config:set someservice.key="THE API KEY"
function内では↓で設定した値を取得できる。
functions.config().someservice.key
本番環境では上記の設定で問題ないが、ローカル開発用にFirebase Local Emulator Suiteを使っている場合にconfigオブジェクトが取得できずハマったのでメモを残しておく。
前提として ./functions
にFirebase Functionsのコードが配置されているとする。
./functions/.runtimeconfig.json
を配置すると、ローカルでのconfigオブジェクトとして認識される。
本番環境のconfigオブジェクトをコピーする場合は↓でできる。
yarn run --silent firebase functions:config:get > functions/.runtimeconfig.json
functions/.runtimeconfig.json
は↓のようになっている。
{
"someservice": {
"key": "THE API KEY"
}
}
ローカルのみの設定に変更したい場合は .runtimeconfig.json
の内容を更新すれば良い。
.runtimeconfig.json
にはAPI Key等が含まれる可能性があるので .gitignore
に追加してリポジトリ管理対象から外しておく。
これでローカル環境でもconfigオブジェクトが利用できるようになった。
今回はFirebase管理者が自分のみだったので手軽さを優先してconfigオブジェクトにシークレット情報を格納したが、より厳密なアクセス制限が必要な場合は「Secret Manager」を組み合わせるのが良いと思われる。