たいした話じゃないんだけれど、ビックリしたのでメモ。
現象
firebase-toolsを使ってコマンドからデプロイとかやろうと思うじゃないですか。
(firebase-toolsのバージョンは 6.1.2)
で firebase init
で対話的にポチポチ初期設定していくと、デフォルトのデプロイ先プロジェクトを選択するところがある。
ところが、Firebaseのコンソール画面から作ったばかりのプロジェクトがこの選択項目に出てこないことがあった。なんでかわからない、ちょっと待たないとダメなのかもしれない、まあそれはいい。
とりあえず適当な別のプロジェクト hoge-app
を選択しておいて、あとから本来使いたい piyo-app
に書き換えよう。
セットアップを終えると、 .firebaserc
が以下のようになる。
{ "projects": { "default": "hoge-app" } }
このdefaultを piyo-app
に書き換えて、よし firebase deploy
だと思ったら、デプロイ先が hoge-app のままになっていて、困惑したのち、勘違いに気がついた。
プロジェクトの選択コマンド
firebase-toolsでは、 firebase use
コマンドでデプロイ先のプロジェクトを選択できるようになっている。
hoge-app
を選択するときは firebase use hoge-app
となる。
で、じゃあ .firebaserc
の projects
はなんだってゆーと、ここには firebase use
で選択可能なプロジェクトのエイリアス名が定義できるようになっているわけである。
たとえば .firebaserc
を以下のようにして
{ "projects": { "hoge": "hoge-app", "piyo": "piyo-app" } }
firebase use hoge
とやっても hoge-app を選択することができる。
で、さらにさらに firebase-tools は プロジェクトが直接選択されているのかエイリアスで選択されているのかを区別している らしい。
.firebaserc
を以下のように直して実験。
{ "projects": { "default": "hoge-app" } }
firebase use default
で hoge-appを選択する。現在のデプロイ先は firebase target
コマンドで確認できる。
> firebase target Resource targets for hoge-app:
この状態で、 .firebaserc
の defaultを piyo-app
に書き換える。
{ "projects": { "default": "piyo-app" } }
確認。
> firebase target Resource targets for piyo-app:
default
というエイリアス名で選択されている場合は、 .firebaserc
を書き換えるだけでデプロイ先も変更されるのである。
最初の現象の解明
firebase init
コマンドの対話でデフォルトプロジェクトを選択した際、 default
というシンボルで選択された状態になるのかと思いきや、プロジェクトそのものが直接選択された状態になっているわけですね。
なので .firebaserc
の default
を書き換えただけではデプロイ先は変わらない。
明示的に firebase use default
コマンドを打っておけば、以降は default
で定義されたプロジェクトが動的にデプロイ先として使用されるようになる。
感想
このデプロイ参照のしくみはちょっとこわいので、複数のデプロイ先を切り替えて使う場合は、明示的に名前をつけて切り替えたほうがいいっすね。