Zenn
🐺

Firebase Admin SDK を emulator に向ける

に公開

はじめに

フロント側だけでなく、バックエンドでもFirebaseを利用しており
同じEmulatorをみるようにした話です。

バックエンドで利用するFirebase

公式よりfirebase-adminというSDKが用意されているのでこちらを利用する

https://firebase.google.com/docs/admin/setup?hl=ja

※フロントエンドで利用しているfirebaseはサーバー側での実行ができない認識

firebase-adminの設定

firebase-adminを利用するには、firebaseのプロジェクトとFirebase Admin SDK サービス アカウントが必要です。

https://firebase.google.com/docs/admin/setup?hl=ja#set-up-project-and-service-account

firebase-adminを使用してfirebase-authを利用する

firebase-adminには管理者権限で Firebase Authentication ユーザーを管理するための API が用意されています。

https://firebase.google.com/docs/auth/admin/manage-users?hl=ja

firebase-adminを使用してfirestoreからデータを取得する

firestoreを利用するにはサービスアカウントが必要になるのでサーバー側で読み込みを行います。

const serviceAccount = require('./path/to/serviceAccountKey.json');

initializeApp({
  credential: cert(serviceAccount)
});

const db = getFirestore();

https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja#node.js

Emulatorの設定

firebase-adminからfirebase cliと同じ接続先を見るようにするには以下の設定が必要です。

環境変数の設定

今回はauthenticationfirestoreを同一の接続先にする場合を記載していきます。

GCLOUD_PROJECT="your-project-id"
FIRESTORE_EMULATOR_HOST="127.0.0.1:xxxx"
FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:xxxx"

GCLOUD_PROJECT: プロジェクトID

https://firebase.google.com/docs/emulator-suite/connect_firestore?hl=ja#node.js-admin-sdk

FIRESTORE_EMULATOR_HOST: firestoreを起動しているhost

https://firebase.google.com/docs/emulator-suite/connect_firestore?hl=ja

FIREBASE_AUTH_EMULATOR_HOST: authenticationを起動しているhost

https://firebase.google.com/docs/emulator-suite/connect_auth?hl=ja

CI上の設定

ローカルで設定した環境変数を指定すれば動きます。

env:
  GCLOUD_PROJECT: your-project-id
  FIRESTORE_EMULATOR_HOST: "127.0.0.1:xxxx"
  FIREBASE_AUTH_EMULATOR_HOST: "127.0.0.1:xxxx"

firebase-adminがサポートしている機能一覧

setupのドキュメント配下に一覧が記載されています。

https://firebase.google.com/docs/admin/setup?hl=ja

Discussion

ログインするとコメントできます