search
LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

Organization

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

レッドインパルスのたかけんです。
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();

補足

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
What you can do with signing up
2