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
以上!! いつのまにか、いろいろ増えてるのでびっくり(´ω`)