くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Firebase Emulatorの接続方法(admin/client)

FirebaseのEmulator Suite
便利だけどいつもエミュレータへの接続方法を忘れるので、
簡単にまとめてみたときの備忘録(*´ω`*)

Emulatorの起動方法

起動方法はこんな感じ。

# エミュレータの起動(全機能)
$ firebase emulators:start --project=your-project-id
# --onlyで一部のみ起動
$ firebase emulators:start --only auth,functions,firestore,database,hosting,storage,pubsub,eventarc --project=your-project-id
# --import/--export-on-exitでデータの読込/保存
$ firebase emulators:start --import=./.emulator --export-on-exit --only auth,firestore --project=your-project-id

# スクリプトの実行後に自動終了
$ firebase emulators:exec "pnpm test"

Admin SDK

Admin SDKの場合、環境変数を使って接続先を設定する。
特定の環境変数があると自動で接続してくれるらしい。

# .env
GCLOUD_PROJECT="your-project-id"
FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"
FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"
FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"
FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

Client SDK

Client SDKの場合は、connectXxxEmulatorをそれぞれ呼ぶ必要がある。

import { getAuth, connectAuthEmulator } from "firebase/auth";
import { getDatabase, connectDatabaseEmulator } from "firebase/database";
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";
import { getStorage, connectStorageEmulator } from "firebase/storage";
import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const auth = getAuth();
const db = getDatabase();
const firestore = getFirestore();
const storage = getStorage();
const functions = getFunctions(getApp());

if (location.hostname === "localhost") {
  connectAuthEmulator(auth, "http://127.0.0.1:9099");
  connectDatabaseEmulator(db, "127.0.0.1", 9000);
  connectFirestoreEmulator(firestore, '127.0.0.1', 8080);
  connectStorageEmulator(storage, "127.0.0.1", 9199);
  connectFunctionsEmulator(functions, "127.0.0.1", 5001);
}

データの一括削除

Firestore

データ削除用のエントリポイントが用意されているので、
それを呼び出せばOK

$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/your-project-id/databases/(default)/documents"

Realtime Database

一つの大きなJSONなので、nullをセットすればOK

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

エミュレータ拡張機能をインストールする

拡張機能エミュレータにインストールできるらしい

# firebase/firestore-send-emailの場合
$ firebase ext:install --local firebase/firestore-send-email
$ firebase emulators:start

以上!! いつのまにか、いろいろ増えてるのでびっくり(´ω`)

参考にしたサイトさま