Open3

Firebase Functions(v2) ✕ Crashlytics Reportで自動でGithub Issue化するまで

NoriyoshiSatoNoriyoshiSato

環境の切り分け

./.firebaserc

{
  "projects": {
    "production": "<production-project-id>",
    "staging": "<staging-project-id>"
  }
}

環境の確認

$ firebase projects:list
✔ Preparing the list of your Firebase projects
┌──────────────────────┬────────────────────────────────┬────────────────┬──────────────────────┐
│ Project Display Name │ Project ID                     │ Project Number │ Resource Location ID │
├──────────────────────┼────────────────────────────────┼────────────────┼──────────────────────┤
│ hoge-production │ hoge-production (current) │ ****  │ asia-northeast1      │
├──────────────────────┼────────────────────────────────┼────────────────┼──────────────────────┤
│ hoge-staging    │ hoge-staging              │ ****   │ us-central           │
└──────────────────────┴────────────────────────────────┴────────────────┴──────────────────────┘

2 project(s) total.

環境変数

functions/.env / functions/.env.staging にそれぞれ配置。 firebase deploy 時にそれぞれのaliasに合わせた環境で変数が設定される

https://firebase.google.com/docs/functions/config-env#deploying_multiple_sets_of_environment_variables

他にもCLIで直接設定する方法もあるようです。
実際console.cloudでは .env ファイルも参照できてしまうので、デプロイ時に変数を読み込む形でもいいかも

NoriyoshiSatoNoriyoshiSato

index.ts

import * as productions from "./productions";
import * as developmemts from "./developments";

exports.productions = productions;
exports.developmemts = developmemts;

ファイルに分割することでFunctionのgroup化ができ、deploy時に特定groupだけdeloyするようなことが可能
https://firebase.google.com/docs/functions/organize-functions#group_functions

package.json

... 略
  "scripts": {
    "lint": "eslint --fix --ext .js,.ts .",
    "build": "tsc",
    "build:watch": "tsc --watch",
    "serve": "yarn build && firebase emulators:start --only functions",
    "shell": "yarn build && firebase functions:shell",
    "start": "yarn shell",
    "deploy": "firebase use production && firebase deploy --only functions:productions",
    "deploy:staging": "firebase use staging && firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
... 略

yarn deploy 時には functions/developmemts の関数をデプロイしないようにしています

NoriyoshiSatoNoriyoshiSato

書きかけ

  • v2 function 名の制約にハマった話
  • axiosのエンコードにハマった話
  • tsのenumを使わなかった話
  • firebase project idの取得方法