【Google Cloud】Storageエミュレータを考える【firebase vs fsouza】

こんにちは、フリーランスエンジニアの太田雅昭です。

エミュレータの必要性

開発で最も大切なのが、快適なテスト環境かと思います。テスト環境がないと、本番=>エラー=>どこを修正すればいいかわからない といったケースが頻発します。できるだけ細分化したテストができる環境構築は必須です。

Cloud Storageのエミュレータ

Cloud Storageのエミュレータは、以下のようなものがあります。

  • Firebase emulator
  • fsouza/fake-gcs-server

Firebase emulator

Firebase emulatorは複数サービスのエミュレータが使えます。そのうちの一つに、Storageがあります。これはfirebaseクライアントからでも、@google-cloud/storageクライアントからでも、どちらからもアクセス可能です。

pnpm i -D firebase-tools

pnpm firebase init
# StorageとEmulatorsを選択
# => Don't set up a default project
# => Storage emulator

rulesファイルを下記のように書き換えます。

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if true; // if falseから変更
    }
  }
}

クライアントは、firebase, google, どちらも使用可能です。

# どちらかを使用
pnpm i firebase
pnpm i @google-cloud/storage

起動します。

pnpm firebase emulators:start

データを永続化するには、下記のようにします。

pnpm firebase emulators:strat --import .firebase-data --export-on-exit

fsouza/fake-gcs-server

Dockerで使えるのが魅力です。永続化も簡単にできます。

  gcs:
    image: fsouza/fake-gcs-server
    restart: unless-stopped
    ports:
      - 4443:4443
    volumes:
      - ./docker/gcs/data/public:/data/public
      - ./docker/gcs/data/private:/data/private
      - ./docker/gcs/storage:/storage
    command: -scheme http -public-host localhost:4443

署名付きURL

署名付きURLは、どちらのエミュレータでも使えません。そのため、開発環境ではロジックを分岐させる必要があります。今回調査した動機でもあるのですが、結局どちらもダメでした。残念。

永続化

データの永続化は、快適なテストのために必要です。今回の2つは、どちらも永続化が可能です。

まとめ

今回、Firebase emulatorと、fsouza/fake-gcs-serverの比較をしてみました。Firebaseの他のサービスも複合で使う場合は、Firebaseを選ぶといいかと思います。ですがGCSのみとなると、簡単にセットアップできるfsouza/fake-gcs-serverもいいかと。