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

SharedArrayBuffer updates in Android Chrome 88 and Desktop Chrome 92

クロスオリジン分離対応を実施

Firebase Emulator Suiteで起動しているFunctionsから本番のFirestoreにアクセスする

functionsのみエミュレータを使うようにするとできる

Firebase Functions呼び出し時に Error: function terminated. が発生した場合

firebase functions:logで詳細を確認できる

Cloud BuildでFirebase Hostingのデプロイを行う

リポジトリへのpush以外をトリガーにしたい場合に使用

Firebase FunctionsでonCallで実装しているにも関わらずCORSエラーが発生した場合

Cloud Functions(GCP)の管理画面を確認してみる

JestでFirestoreセキュリティルールのテストを書く

Github ActionsでCIを回せるようになった