Goでfirebaseエミュレータを使い安全にテストする方法

1

2022年03月14日 4:53

はじめに

先日実務でGoとfirebaseエミュレータを使ったテストを実装しようとしたのですが、Goが組み合わさるとあまり記事が見当たりませんでした。そこで今回はGoでfirebaseエミュレータを実装する方法をご紹介します。

この記事でわかること

  • firebaseエミュレータのセットアップ方法
  • Goでfirebaseエミュレータを利用する方法
    • firebaseエミュレータはUI、Authentication、Firestoreに接続する

セットアップ

firebaseを利用しているのでFirebase CLIはインストール済みである前提とします。次にエミュレータをインストールします。公式に手順が記載されています。

バージョン確認
インストールにはCLI バージョン 8.14.0以降が必要なため確認。

img

初期化
エミュレータを利用するように指定して現在の作業ディレクトリを Firebase プロジェクトとして初期化します。
img
今回はAuthenticationとFirestoreを利用するのでこんな感じになります。
img

firebase.jsonは手動で編集しても問題ないので、portを変更したくなったら直接編集しても構いません。

ちなみにデフォルトで提供されているエミュレータのportは以下です。

今回は詳しく扱いませんが、セキュリティルールの設定もfirebase.jsonで設定することが可能です。詳しくは詳しくはセキュリティ ルールの構成でご確認ください。

エミュレータ起動

それでは実際にエミュレータを起動してみましょう!下記コマンドを入力してください。
以下のように起動すれば成功です!

ターミナル1
img

log系のファイルはgitignoreする

エミュレータ起動時にロギングされるファイルはGithubなどにあげる必要はないので、.gitignoreファイルに追加しておきましょう。
img

uiの確認

port4000で指定しているのでhttp://localhost:4000/でアクセスできます。

エミュレータ一覧画面
どのエミュレータが起動しているのか確認できます。

Authentication emulator

Firestore emulator

Goテストの実行

adminSDKを利用している場合、エミュレータへfitebaseの参照先をエミュレータに変えるにはそれぞれのサービスごとの環境変数を指定する必要があります。各サービスとエミュレータに接続するために指定すべき変数は下記になります。

Authエミュレータを使うにはGo admin SDKをv4にあげる必要があります
Goのadmin SDKライブラリであるfirebase-admin-goではAuthenticationエミュレータの接続先環境変数のFIREBASE_AUTH_EMULATOR_HOSTV4.2.0で認識されるようになりました。上げていない方はfirebase-admin-goのバージョンを事前にv4に上げておきましょう。

環境変数
AuthenticationFIREBASE_AUTH_EMULATOR_HOST✅
Realtime DatabaseFIREBASE_DATABASE_EMULATOR_HOST
Cloud FirestoreFIRESTORE_EMULATOR_HOST✅
Cloud StorageFIREBASE_STORAGE_EMULATOR_HOST

今回はAuthとFirestoreのエミュレータに接続したいので✅ 部分をテストを実行するディレクトリで指定します。

ターミナル2
ターミナル1ではエミュレータを起動しているのでターミナル2で環境変数の設定を行います。
img

ターミナル2
向き先を変えたら、あとはいつも通りGoのテストを実行してみましょう!作成・削除・更新などの処理が反映されると思います🎉
img

終わりに

今回はGoでfirebaseでエミュレータを利用する方法を書きました。今後はエミュレータをStorageやFunctionsに接続した記事も実装してまたご紹介できればと思います。

トラブルシューティング

  • エミュレータの起動やシャットダウンはやや時間がかかり、プロセスが彷徨うことがあります。その場合は@cotaponさんの書いた記事のようにプロセスをkillしてみましょう。
# Firebase
# Go
1

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。

-

ランク

目次を見る