3行まとめ
- 環境分けるために複数のfirebase projectを運用してる時、firestoreのindex同期化が面倒
- firebase cliを利用し、開発のprojectで
firebase init
→本番projectでfirebase deploy
すれば解決 - firebase cliを使うdirectoryは仮で作っても、既存に使っているところでも良い
本文
firebaseを利用してプロダクトを開発する時、
開発環境と本番環境用でそれぞれ別のprojectを作ることがあります。
firestoreを使っている場合は
collectionが増えるとruleの、
queryが増えるとindexの更新が必要になる訳ですが…
ruleは兎も角、indexの更新が面倒なんですよね。
開発環境の方は簡単です。
とりあえずquery作って、動作させればwarning logが流れるので、
そのlogが発行してくれるlinkを踏むとconsoleが開き、勝手に必要なindexを作ってくれます。
これもindex一個に付き一度行う必要があるので、数が多ければ面倒な作業には変わりませんが。
問題は本番の方。
流石に本番デプロイの後に同じことをする訳にも行きません。
なので開発環境で発行したindexを持ってくることができれば良いですが…
firebase consoleとcliで調べてみても現在のindexを丸ごと取る方法は見つからず。
(実はあるようでしたら是非ご教示お願いします!)
それで色々試してみた結果、以下の方法で落ち着きました。
- firebase cliをインストール
- 開発環境でindexを作っておく
- 適当なdirectoryで
firebase init
-
firestore
だけ選択して初期化を進める - 選択するprojectはもちろん開発環境
- 名前を変えてなければ
firestore.indexes.json
が生成されているはずなので、中身が最新であることを確認 firebase use {本番project}
firebase deploy
もしfirebase cliでのdeployを行ったことがあるdirectoryがある場合は
普通にそこで作業しても大丈夫です。
firebase use {開発環境}
の後、何度 firebase init
を実行しても
都度開発環境の最新を持ってきてくれます。
.firebaserc
firebase.json
が既に存在してたら上書きされないか…という心配を個人的にはしてましたが
現在は特にそのようなこともありません。
indexのためだけに毎回これをやるのも若干違う感じはしますが…
現状では、多分これが一番楽だと思います。