Firebase CLIを複数のGoogleアカウントで利用する


**会社アカウントと個人アカウントなど、複数のGoogleアカウントを、1つの端末で利用することがある方向けの記事です**


### 実行環境

実行環境は以下のとおりです。

> macOS Catalina 10.15.2
> zsh 5.7.1
> firebase-tools 7.14.0

### Firebase CLI

Firebase CLIの詳細は以下をご参照ください。

https://firebase.google.com/docs/cli?hl=ja


### 設定ファイルについて

Firebase CLIは、設定ファイルを configstore で管理しています。

https://www.npmjs.com/package/configstore


configstoreは、以下のように
> 環境変数の `$XDG_CONFIG_HOME`で指定するディレクトリ配下
> `~/.config` ディレクトリ配下

のPathに存在する設定ファイルを参照する仕組みになっています。
そのため、Firebase CLIを通常のセットアップを実行すると、

```
$ ~/.config/configstore/firebase-tools.json
```

のように、 firebase-tools.json という名前の設定ファイルが格納されます。

### 手順

設定ファイルが1つだと、そのログイン済みのGoogleアカウントのみでしかFirebaseにアクセスできないので、以下の方針で解決します。

> 1. Googleアカウントごとに
> 2. 参照する設定ファイルを格納するディレクトリをつくり
> 3. プロジェクトごとに
> 4. 参照する先を指定した環境変数で
> 5. 参照するディレクトリを指定する


### 設定ファイルのためのディレクトリを作成する

例えば、会社用、個人用として、以下のように作成します

```
$ mkdir -p ~/.config-firebase-company/configstore
$ mkdir -p ~/.config-firebase-personal/configstore
```

これらディレクトリに設定ファイル（JSONファイル）を格納すればOKです。

### プロジェクトごとに環境変数を設定する

それぞれのプロジェクトで、同じ環境変数のPathを参照したいので、direnvを利用します。

https://github.com/direnv/direnv

ここでは、homebrewを利用してインストールします。

```
$ brew install direnv
```

direnvを利用するためにプロジェクトルートへ `.envrc` を作成します。
また、ファイル作成と合わせて、環境変数 `XDG_CONFIG_HOME` に参照パスを設定します。（好みですが、自分は .gitignore_global に .envrc を追加しています）

まずは会社用のプロジェクトです。

```
$ cd ~/awesome-company-project
$ echo export XDG_CONFIG_HOME=~/.config-firebase-company > .envrc
```

デフォルトでは .envrc を参照できないようになっているので、

```
$ direnv allow .
```

として、有効化します。（これをやらないと以下のように怒られます。）

```
direnv: error /Users/user_name/awesome-company-project/.envrc is blocked. 
Run `direnv allow` to approve its content
```

そして、Firebaseにログインします。

```
$ firebase login
```

ブラウザが表示されて、対象のGoogleアカウントを選び、ログインします。この際、生成される設定ファイルは冒頭に説明したディレクトリです。

```
$ ~/.config/configstore/firebase-tools.json
```

このファイルを会社用の設定ファイルを格納するディレクトリに移動します。

```
$ mv ~/.config/configstore/firebase-tools.json ~/.config-firebase-company/configstore
```

設定ファイルが目的のディレクトリに移動したので、Firebaseのプロジェクト一覧を確認します。

```
$ firebase projects:list
✔ Preparing the list of your Firebase projects
┌──────────────────────┬──────────────────┬──────────────────────┐
│ Project Display Name │ Project ID  │ Resource Location ID │
├──────────────────────┼──────────────────┼──────────────────────┤
│ awesome company app │ awesome-company-app-xxx │ asia-northeast1 │
└──────────────────────┴──────────────────┴──────────────────────┘
1 project(s) total.
```

プロジェクトが表示されれば、新しいディレクトリから設定ファイルが参照できています。

また、個人用のプロジェクトも同様です。

```
$ cd ~/awesome-personal-project
$ echo export XDG_CONFIG_HOME=~/.config-firebase-personal > .envrc
```

```
$ firebase login
$ mv ~/.config/configstore/firebase-tools.json ~/.config-firebase-personal/configstore
```

```
$ firebase projects:list
✔ Preparing the list of your Firebase projects
┌──────────────────────┬──────────────────┬──────────────────────┐
│ Project Display Name │ Project ID  │ Resource Location ID │
├──────────────────────┼──────────────────┼──────────────────────┤
│ awesome personal app │ awesome-personal-app-xxx │ asia-northeast1 │
└──────────────────────┴──────────────────┴──────────────────────┘
1 project(s) total.
```

### まとめ

これで、Firebase CLIを複数のGoogleアカウントで利用する、開発をすることができます👏
Google Cloudも同様にconfigstoreを利用しているようなので、もし同じように利用する場合は .config-personal / .config-company などでもよいかも。（自分はパッとみたときにfirebaseであることに気付きたいな思い、このような命名にしました） 

以上、参考になれば幸いです。