Cloud Functions for Firebaseでちょっとしたものを開発したときに、便利だなーと思ったことをまとめます。
外部サービスのAPIを叩くにはプランの有料化が必要(ただし無料枠あり)
例えばSlack APIを使ってSlack上のなんやの自動化をサーバレスでやりたい、ということは無料プランではできません。アウトバウンドネットワークの制限が無い定額プランにするか、従量課金制のプランにする必要があります。従量課金制のプランには無料枠があり、何かをテスト的にやってみる分には十分なので、ほとんどの場合無料で試せます。テスト後は無料プランに戻しておきましょう。
環境変数の設定
シークレットキーやパスワードなど、コード中に埋め込みたくない値は環境変数として設定できます。
# 設定
firebase functions:config:set slack.api_key="XXXXXXXXXXXX"
# 確認
firebase functions:config:get
# 削除
firebase functions:config:unset slack.api_key
環境変数はコード中からは次のように参照可能です。
const functions = require('firebase-functions')
const { WebClient } = require('@slack/web-api')
const slack = new WebClient(functions.config().slack.api_key)
ローカルで動作確認
Functionsはデプロイする前にローカルで動作確認することが可能です。
firebase emulators:start
# もしくは
firebase emulators:start --only functions
これでローカルにサーバが立ち上がり、コンソールにエンドポイントが表示されているはずです。
ローカルサーバに環境変数を反映
functions:config:set
で追加した環境変数を利用したコードをローカルで動作確認する場合、環境変数の内容をファイル化しておかないと、環境変数が利用できません。
! Non-existent functions.config() value requested!
のようなエラーメッセージが出ます。
firebase functions:config:get > .runtimeconfig.json
ポイントとして、このファイルはfunctions
ディレクトリにある必要があります。
app/
├ functions/
│ ├ index.js
│ ├ …
│ └ .runtimeconfig.json
└ .firebaserc
また、忘れず.gitignoreに追加しておきましょう。
ちょっとしたものならこれでもうサクッと開発してしまえるのではないかと思います。