2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

REDIMPULZAdvent Calendar 2020

Day 4

Next.jsでFirebase Admin SDKを複数プロジェクトに対して使う

Last updated at Posted at 2020-12-04

レッドインパルスのたかけんです。
REDIMPULZ Advent Calendar 2020 の4日目のエントリーです。

Firebase Admin SDKをNext.jsで使う

注意 : firebase Admin SDKの認証情報は環境変数で扱い、サーバーサイドで利用する想定です。
認証情報の扱いに注意して、フロントエンドで実行されるコードからは参照しないようにしてください。

Firebase Admin SDKのセットアップ

Next.jsだと、firebaseの初期化が再実行されるとエラーになるので、工夫が必要です。

回避策として、以下のようにしています。

lib/firebaseAdmin.ts
import admin from 'firebase-admin';

const initializeApp = () => {
  admin.initializeApp({
    credential: admin.credential.cert({
      projectId: process.env.FIREBASE_ADMIN_PROJECT_ID,
      privateKey: process.env.FIREBASE_ADMIN_PRIVATE_KEY,
      clientEmail: process.env.FIREBASE_ADMIN_CLIENT_EMAIL,
    }),
    storageBucket: process.env.FIREBASE_ADMIN_STORAGE_BUCKET,
  });
};

admin.apps.length ? admin.app() : initializeApp();

export const firestore = admin.firestore();

Next.jsでFirebase Admin SDKを複数プロジェクトに対して使う

Firebase Admin SDKは、複数プロジェクトに対して使うことが可能です。

参考にNext.jsで使う場合は、以下のようにすることで、できました。

lib/firebaseAdmin.ts
import admin from 'firebase-admin';

const initializeApp = () => {
  admin.initializeApp({
    credential: admin.credential.cert({
      projectId: process.env.FIREBASE_ADMIN_PROJECT_ID,
      privateKey: process.env.FIREBASE_ADMIN_PRIVATE_KEY,
      clientEmail: process.env.FIREBASE_ADMIN_CLIENT_EMAIL,
    }),
    storageBucket: process.env.FIREBASE_ADMIN_STORAGE_BUCKET,
  });
  admin.initializeApp(
    {
      credential: admin.credential.cert({
        projectId: process.env.FIREBASE_OTHER_ADMIN_PROJECT_ID,
        privateKey: process.env.FIREBASE_OTHER_ADMIN_PRIVATE_KEY,
        clientEmail: process.env.FIREBASE_OTHER_ADMIN_CLIENT_EMAIL,
      }),
      storageBucket: process.env.FIREBASE_OTHER_ADMIN_STORAGE_BUCKET,
    },
    'other'
  );
};

admin.apps.length ? admin.app() : initializeApp();

export const firestore = admin.firestore();
export const otherFirestore = admin.app('other').firestore();

補足

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?