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

YouTubeの「Firebase Release Notes」プレイリスト

最新のアップデートの概要を把握するのにちょうど良い

Firebase Extensions

Functionsを実装する際の参考になる

Nuxt.jsのservice workerで環境変数を切り替えられるようにする

設定情報をハードコードしたくなかったので、ビルド時にnodeコマンドでファイル生成を行い環境変数を切り替えられるように対応した。