LoginSignup
0
0

More than 1 year has passed since last update.

[メモ]Firebase関連HowTo

Posted at

複数環境にデプロイしたい

dev,stg,prodなど環境を分けたい場合など

Firebaseのコンソールで必要なプロジェクトの作成する

設定の確認

プロジェクトディレクトリのルートにある.firebasercを確認

このファイルを直接編集してもデプロイ先の追加ができる

.firebaserc
{
  "projects": {
    "default": "[プロジェクトID]"
  }
}

コマンドでプロジェクトを追加する

コマンド
$ firebase use --add
例 devプロジェクトを追加
$ 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 # エイリアスを指定
.firebasercで追加されてか確認
{
  "projects": {
    "default": "[プロジェクトID]",
    "dev": "[プロジェクトID dev]"
  },
  "targets": {},
  "etags": {}
}

projectsdevが追加されていれば成功

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.jsonfirestore > indexesを確認

Functionsのレイテンシが遅い

インスタンスが立ち上がってるか確認

Firebaseのコンソールから確認できないのでgcpのコンソールから確認する
URL: https://console.cloud.google.com/functions/list

インスタンスを立ち上げるときは4秒くらいかかってる印象
最小インスタンスを設定するのも良さそう

最小インスタンスを1に設定
exports.hogehoge = functions
    .runWith({"minInstances": 1})  // インスタンスの設定
    .https.onRequest(async (req, res) => {
        // 省略
    });

ロケーションを近い地域に変更

日本からusのロケーションにアクセスした場合とasia-northeast1 (Tokyo)からアクセスした場合
レイテンシが一気に短くなった

リージョンをasia-northeast1に設定
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

この他に早くなる方法があればコメント欄で教えてほしい

0
0
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
0
0