GAミント至上主義

Web Monomaniacal Developer.

Firebase AuthエミュレータをCircleCIで動かすためにDockerイメージを作って公開した

NestJSを使ったプロジェクトで、認証だけFirebase Authenticationを使う。 そのためローカルのエミュレータ環境とそれを使った簡単なテストを作った。

ローカルで動かすとUIはこんなので超便利↓ CIではもちろんいらないので無効化してる f:id:uyamazak:20211025192620p:plain

でもCircleCI上でそのテストを実行させようと思ったら、ちょうどいいDockerイメージが見つからなかったので作った。

github.com

Authしか動かないけどfirebase-toolsとOpen JDKがでかすぎるのでイメージサイズはでかい。

Introduction to Firebase Local Emulator Suite  |  Firebase Documentation

シンプルなのでDockerイメージはすぐに作れたけど、CircleCIから呼び出すためにDockerレポジトリが必要。

認証も面倒なのでPublicで、更にできれば無料いい。

最初はDocker Hubを使ったけど懐かしのダイヤルアップ接続並みにアップロードが遅く断念。

GitHubのPublicレポジトリならコンテナレジストリも無料で使えそう?なので、ひとまず個人レポジトリでGithub Actionsを使ってアップロードまでしてみた。

コンテナレジストリの利用 - GitHub Docs

使い方

Firebaseのプロジェクト名をcommandで渡すだけ デフォルトポート9099で起動します

.circleci/config.yml

version: 2.1

jobs:
  test-server:
    resource_class: medium
    docker:
      - image: ghcr.io/uyamazak/firebase-auth-emulator:latest
        command: --project your-project-name

CircleCIでfirebase emulators:exec {テストコマンド} でテストを実行するって方法もあったけど、エミュレータに必要なfirebase-toolsでかすぎるし、こっちの方がいろいろ分離されて良さそう。

Run functions locally  |  Firebase Documentation

ひとまずローカルで動いてたテストが通ったのでここまで。 GitHub Actions + コンテナレジストリのテンプレみたいのできたので活用していきたい。