LoginSignup
2
1

firebase-admin initializeApp の違い

Last updated at Posted at 2023-08-08

firebase-adminのinitializeAppについて、「書き方いろいろ出てくるけど何が違うんだ?」と思ったのでまとめる。

cjsで書いたけどだけどemsでも同じ
最近はmoduleベースもあるのでimport方法は異なる場合あり。

Pattern 1

const admin = require('firebase-admin');
const app = admin.initializeApp()

GCPで動かしている場合のみ動くとのこと。

アプリケーションが Google Cloud 環境内で実行されていて、その環境にサービス アカウントが接続されている場合、アプリケーションはそのサービス アカウントの認証情報を取得できます。
https://cloud.google.com/docs/authentication/production?hl=ja

他にもemulatorで動かしたい時はこれで良い。

if (process.env.NODE_ENV === 'production') {
  // 本番用初期化
} else {
  // emulator
  admin.initializeApp()
}

Pattern 2

// Initialize the default app
const admin = require('firebase-admin');
const app = admin.initializeApp({
  credential: admin.credential.applicationDefault()
});

credential json(firebaseからダウンロードできる)へのpathを環境変数に入れると自動で読み込む設定。変数名は決められており、GOOGLE_APPLICATION_CREDENTIALSにする必要がある。

つまりexport GOOGLE_APPLICATION_CREDENTIALS=<json path>すれば良い。
ただ、 json file には認証情報が載っており git で管理してはいけない。
vercelなどにあげる時は Pattern 3 を使う。

Pattern 3

// Initialize the default app
const admin = require('firebase-admin');
const app = admin.initializeApp({
  credential: admin.credential.cert({
      projectId: process.env.FIREBASE_PROJECT_ID,
      clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
      privateKey: process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, '\n'),
   })
});

service account の json から抜き出して環境変数に突っ込む

参考

2
1
0

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
1