PrAha Inc.

PrAha Inc. のブログ、あるいは社員の観察日記

Cloud Functions for Firebaseをローカルエミュレータで起動する時に環境変数で詰まった

初めまして。PrAha Inc. 代表取締役兼エンジニアの松原です。

 

Cloud Functions for Firebaseを毎回デプロイして動作確認するのは手間なのでローカルエミュレータを使おうとしたらpermission周りで想定動作と異なる動きがあったのでメモしておきます

 

何をしたのか

Firebase CLIを入れて以下のコマンドを実行。

セットアップとかの手順はこの辺りに記載されているので割愛します

 

```

firebase serve --only functions

```

 

するとこんな感じで立ち上がります

 

```

functions: Preparing to emulate functions.

functions: notify: http://localhost:5000/xxxxxx-xxx/us-central1/notify

```

 

で、curlしてみます。

 

 

想定動作

Firebase CLIにログインした状態でエミュレータのエンドポイントを叩けば、Cloud Functions for Firebaseが呼び出される

 

実際の動作

```

info: User function triggered, starting execution

info: { Error: 7 PERMISSION_DENIED: Missing or insufficient permissions.

```

 

権限が無い、と怒られました

 

 

なにゆえ?

f:id:praha-inc:20190607090704p:plain


ここに書いてある通り、エミュレータを起動する時は、環境変数に設定ファイルのパスを指定する必要があります。なのでdirenvを使って、.envrcに環境変数を書いていました。

 

この環境変数エミュレータから読めてないんじゃね・・・?

 

と考えて、エミュレータ環境変数を設定する方法を調べていたら

 

https://stackoverflow.com/questions/44766536/how-do-you-setup-local-environment-variables-for-cloud-functions-for-firebase

 

ありました。

 

`.runtimeconfig.json`にこんな感じで環境変数を設定します。

 

```

{
"GOOGLE_APPLICATION_CREDENTIALS": "path/to/key.json"
}
```
 
もう一度curlしたら、ちゃんとエミュレータが動きました。
 
 
 

教訓を川柳にした

読まれると

思い込むなよ

環境変数