くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

複数のアカウントでFirebase CLIを使えるようにする(firebase-multi)

Firebaseをよく使うようにあり、複数のGoogleアカウントでログインするようになった。

一回ログアウトしてログインするか、--reauthつけてログインすれば、切り替えできるけど、
毎回切り替えるのがめんどくさいので、いろいろ調べてみたときの備忘録。

いつもはこんな感じで毎回切り替えてる。。

# ログアウト&ログイン
$ firebase logout
$ firebase login

# 再ログイン
$ firebase login --reauth

@_monoさんがつぶやいてたのが良さそうだったので試してみた(´ω`)

firebase-multi

firebase-multiは、Firebase CLI複数アカウントでログインして使うためのヘルパーコマンド。

firebase login:ciで取得したトークンを保存でき、トークンを使ってFirebase CLIを利用できるようにしている。

インストール

まずは、インストール

$ yarn add -g firebase-multi
# or 
$ npm i -g firebase-multi

これで、firebase-multiコマンドが使えるようになる。

firebase-multiでできること

薄いヘルパーなので、トークンと名前の保存/取得/削除のみという感じ。

# 保存
$ firebase-multi set <firebase-project> <ci token>

# 削除
$ firebase-multi unset <firebase-project>

# 取得
$ firebase-multi get <firebase-project>

# トークンを使ったFirebase CLIの実行
$ firebase-multi use <firebase-project> <command>

<firebase-project>は任意の名前をつける感じ。
READMEには特に注意書きはないけど、
.(ピリオド)は含まないほうが良さそう

使い方

トークンの取得

まずは、firebase login:ciトークンを取得。
ブラウザで該当のアカウントを選択して、認証する。

$ firebase login:ci

Visit this URL on this device to log in:
https://accounts.google.com/o/oauth2/auth?.....

Waiting for authentication...

✔  Success! Use this token to login on a CI server:

<ci token>

Example: firebase deploy --token "$FIREBASE_TOKEN"

<ci token>の部分に表示されたトークンをコピーしておく。

トークンの保存

次に、取得したトークンをfirebase-multiに保存。

$ firebase-multi set mine <ci token>

これで準備はOK。

firebase-multiを使って、Firebase CLIを実行する

こんな感じで各コマンドを使えるようになる。

$ firebase-multi use mine firebase projects:list
┌────────────────────────┬──────────────────────┬────────────────┬──────────────────────┐
│ Project Display Name   │ Project ID           │ Project Number │ Resource Location ID │
├────────────────────────┼──────────────────────┼────────────────┼──────────────────────┤
# ... 略

毎回これを打つのはつらいので、aliasとかを設定するといいかも。

$ alias firebase-mine="firebase-multi use mine firebase"
$ firebase-mine projects:list
残念ながらlistコマンドはない...

コマンドはないけど、以下の場所に保存されてるので、確認できる。

$ cat ~/.config/configstore/firebase-multi.json 
{
  "projects": {
    "mine": "<個人用のトークン>",
    "projectA": "<projectAのトークン>",
    "projectB": "<projectBのトークン>"
  },
  "version": 1
}

configstoreを使ってるよう。

<firebase-project>.(ピリオド)を含んでいると、ネストするっぽい。

$ firebase-multi set projectA.teamZ AAA
$ firebase-multi set projectA.teamY AAA
$ cat ~/.config/configstore/firebase-multi.json
{
  "projects": {
    "projectA": {
      "teamZ": "AAA",
      "teamY": "AAA"
    }
  },
  "version": 1
}

カテゴリ分けできるのはいいけど、カテゴリに当たる部分を指定して、
unsetすると全部消えてしまうので注意。

$ firebase-multi unset projectA
$ cat ~/.config/configstore/firebase-multi.json
{
  "projects": {
  },
  "version": 1
}

事故らないためにも、<firebase-project>.(ピリオド)はないほうが良さそう。

以上!!

参考にしたサイト様