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 から抜き出して環境変数に突っ込む
参考