🔥

Firebase Admin の二重初期化エラーの対策(modular版)

2022/11/10に公開

経緯

Firebase Admin Node.js SDKのmodular(v10)以降では、公式の通り、以下のように初期化を行います。

import { initializeApp } from 'firebase-admin/app';


const firebaseAdmin = initializeApp({
  ...});

一方で、アプリケーションの挙動によってこのファイルが二回以上読み込まれるケースがあると、次のようなエラーが発生することがあります。

error - FirebaseAppError: The default Firebase app already exists. This means you called initializeApp() more than once without providing an app name as the second argument. In most cases you only need to call initializeApp() once. But if you do want to initialize multiple apps, pass a second argument to initializeApp() to give each app a unique name.

これは、一度初期化したfirebaseを再度初期化しようとしたため発生するものとなります。

対処法

modular以前は以下のような対策が行えましたが、modular以降はライブラリの構造が異なるため、こちらの方法は行えません。

modular以前の対策
const admin = require('firebase-admin');

if (admin.apps.length === 0) {
  admin.initializeApp();
}

modular以降は、以下のようにgetApps().lengthを用いて初期化済み判定するように修正する必要があります。

modular以降の対策
import { initializeApp, getApps, getApp } from 'firebase-admin/app';


const firebaseAdmin = getApps().length === 0 ? initializeApp({
  ...}) : getApp();

export { firebaseAdmin };

Discussion