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」を組み合わせるのが良いと思われる。

参考


Related #firebase

Firestore エミュレータ使用時にデータをリセットする

エミュレータの場合のみ一括削除用のAPIが用意されている

Error: Input required and not supplied: firebaseServiceAccount

Dependabotによって作成されたPull Requestのみで発生している

Firebase公式Github ActionsでPull RequestごとにHostingのプレビュー環境を作る

手軽にプレビュー環境で動作確認できるようになったので、継続的なアップデートがやりやすくなった

GitHub Actionsのワークフローを定期実行する

scheduleトリガーを設定する