複数環境にデプロイしたい
dev,stg,prodなど環境を分けたい場合など
Firebaseのコンソールで必要なプロジェクトの作成する
設定の確認
プロジェクトディレクトリのルートにある.firebaserc
を確認
このファイルを直接編集してもデプロイ先の追加ができる
{
"projects": {
"default": "[プロジェクトID]"
}
}
コマンドでプロジェクトを追加する
$ firebase use --add
$ firebase use --add
? Which project do you want to add? (Use arrow keys) # 追加するプロジェクトを選択
❯ [プロジェクトID dev]
[プロジェクトID]
? What alias do you want to use for this project? (e.g. staging) dev # エイリアスを指定
{
"projects": {
"default": "[プロジェクトID]",
"dev": "[プロジェクトID dev]"
},
"targets": {},
"etags": {}
}
projects
にdev
が追加されていれば成功
$ firebase use dev # 使用するプロジェクトをエイリアスで指定
$ firebase deploy
CIツールからデプロイしたい
紹介するやり方は非推奨でバージョンアップで削除される予定という警告が出ていたので使えないかもしれない
デプロイ用のユーザーの準備
$ firebase login:ci
$ firebase login:ci
Visit this URL on this device to log in:
https://accounts.google.com/o/oauth2/... # URLを省略してます
Waiting for authentication...
✔ Success! Use this token to login on a CI server:
[Firebaseトークン]
Example: firebase deploy --token "$FIREBASE_TOKEN"
表示に従ってユーザーの認証をするとFirebaseトークン
が取得できます
後は対話型にならないようにforce
オプションを使用してデプロイ
firebase deploy --force --token "[Firestoreトークン]"
コンソールで設定したFirestoreのindexをローカルに反映したい
$ firebase firestore:indexes > firestore.indexes.json
firestore.indexes.json
は各環境の設定に合わせて指定
わからなかったらfirebase.json
のfirestore > indexes
を確認
Functionsのレイテンシが遅い
インスタンスが立ち上がってるか確認
Firebaseのコンソールから確認できないのでgcpのコンソールから確認する
URL: https://console.cloud.google.com/functions/list
インスタンスを立ち上げるときは4秒くらいかかってる印象
最小インスタンスを設定するのも良さそう
exports.hogehoge = functions
.runWith({"minInstances": 1}) // インスタンスの設定
.https.onRequest(async (req, res) => {
// 省略
});
ロケーションを近い地域に変更
日本からusのロケーションにアクセスした場合とasia-northeast1 (Tokyo)
からアクセスした場合
レイテンシが一気に短くなった
exports.hogehoge = functions
.region("asia-northeast1") // リージョンの設定
.https.onRequest(async (req, res) => {
// 省略
});
インスタンスのメモリサイズを大きくする
割り当てられたメモリサイズによってCPUのスペックが変わる
デフォルトで256MBが割り当てられてる
URL: https://firebase.google.com/docs/functions/manage-functions?hl=ja#set_timeout_and_memory_allocation
CPUを使うような処理を行ってない場合は効果が殆ど無い
exports.hogehoge = functions
.runWith({"memory": "1GB"}) // インスタンスの設定
.https.onRequest(async (req, res) => {
// 省略
});
その他
public previewの2nd genから関数インスタンスで一度に複数のリクエストを実行できるようになるみたいなので
試してないのでわからないけど正式リリースになったら早くなるかも
URL: https://firebase.google.com/docs/functions/beta
この他に早くなる方法があればコメント欄で教えてほしい