LoginSignup
15
2

More than 3 years have passed since last update.

Firebase Local Emulator における config の設定

Posted at

Firebase の functions や hosting を書いて毎回デプロイして動作を確かめるのは大変です。
Firebase には Local Emulator があり、すぐにローカルでコードの動作を確かめることができます。

コードとしてレポジトリに含めたくない情報は config として環境変数のような形で実行時に読み込むようにするのですが、Local Emulator ではハマりどころがあったので共有します。

通常の config 設定

アプリ名を your-application-name だとすると、以下のように key value を設定します。

$ firebase functions:config:set your-application-name.key=dummykeystring

Local Emulator では読み込めない

上記のように config:set した設定は下記のようにシェルコマンドからは呼び出せました。

$ firebase functions:config:get
{
  "your-application-name": {
    "key": "aaaaaaaaaasadfffffffffffffffreewfdsdsf"
  }
}

しかし以下のようなコードにおいて、 Local Emulator 上では呼び出せませんでした(確か undefined だったと思います)。
一方でデプロイした先のFunctionsからは値を取得することができました。

import * as functions from 'firebase-functions';

export const showTrigger = functions.https.onRequest((request, response) => {
    const apiKey = functions.config()['your-application-name'].key;
    console.log('apiKey') // undefined
});

Local Emulator でも読み込めるようにする

以下のようにして .runtimeconfig.json に同様のものを入れておくとうまくいきました。

$ cd functions/
$ firebase functions:config:get > .runtimeconfig.json 

ただし、このjsonファイルがGitHub上などに上がってしまうと問題があるので、gitを使っている場合には .gitignore などに該当ファイルを入れるのを忘れないようにしましょう。

参考

公式: https://firebase.google.com/docs/functions/local-emulator#serve_http_functions_from_the_command_line

ググって引っかかった記事: https://stackoverflow.com/questions/54689871/set-firebase-local-emulator-cloud-function-environment-config-values

言い訳

公式ドキュメントにもちゃんと書いてあるのに微妙にハマりました。

関数を設定する(省略可)

省略可と書いてあったので最初のデプロイをして動くまではセクションごと無視していたのでした。

カスタム関数の構成変数を使用している場合は、最初にローカル環境でカスタムの構成を取得するコマンドを実行します(functions ディレクトリ内で実行します)。

この設定できる変数は 構成変数 と呼んでいるようです。普段ランタイムだけで使う変数は 環境変数 みたいな呼び方をすることが多いので最初ざっと読んでいる時には気がつかなかったのでした。

15
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
2