Firestore EmulatorとGoで開発する際に指定するプロジェクトIDはdummy-emulator-firestore-projectがいいかも
はじめに
本記事で指している Firestore Emulator とは gcloud components で提供されているエミュレータではなく、Firebase の Local Emulator Suite から提供されている方です。
また、実行環境の環境変数に FIRESTORE_EMULATOR_HOST
が設定されている前提で話を進めます。
何をすればいいのか
- Firestore Emulator 起動時に
--project=dummy-emulator-firestore-project
フラグを追加する。 - Firestore のクライアントライブラリで NewClient を行う際に
DetectProjectID
を利用する。
Go 側の解説
Firestore のクライアントライブラリで NewClient を行う際には引数で ProjectID の指定が必要ですが、私は DetectProjectID という定数を利用しています。(余談ですが Datastore のクライアントライブラリでも同様の定数が利用できます。)
DetectProjectID を指定した場合、実行環境の認証情報からプロジェクトIDを取得してくれるのですが、ローカル環境で特に認証情報を設定していなかった場合、プロジェクトIDにはdummy-emulator-firestore-project
という文字列が設定されます。なので Firestore Emulator を起動する際のプロジェクトIDも dummy-emulator-firestore-project
に合わせてあげるとシームレスに接続できるようになります。
おわりに
Local Emulator Suite の UI 機能が便利そうだったので gcloud components 版のエミュレータから移行しましたが、 移行前はアプリ側の環境変数に FIRESTORE_EMULATOR_HOST
を設定するだけで接続できており、Local Emulator Suite 移行後にアプリから接続出来なくなったため意外なハマりポイントかな?と思って記事を書いてみました。