ぎゃーてー

システム開発のメモ

gcloud系インスタンスをkeyFilenameを使わないで初期化する

前提

GCP のプロジェクト(cloud storage や firestore, firebase)を初期化するときに、大抵は次のようにファイルパスを指定するようになっています。

const Firestore = require('@google-cloud/firestore')

const firebaseConfig = {
  projectId: 'YOUR_PROJECT_ID',
  keyFilename: '/path/to/keyfile.json',
}
const db = new Firestore(firebaseConfig)

ファイルの取り回しは面倒です。

  • クラウドやdockerなど実行環境でパスが変わる
  • webpackでパスが変わる
  • require(`@/config/keyfile.json`) みたいにテンプレートリテラルが使いたい
  • 意図的に非同期処理しないといけない

解決

以下のように credentials: {private_key, client_email} が指定できます。

const serviceAccount = require(`@/keyfile.json`)

const firebaseConfig = {
  credentials: {
    private_key: serviceAccount.private_key,
    client_email: serviceAccount.client_email,
  },
  projectId: serviceAccount.project_id
}

const db = new Firestore(firebaseConfig)

ソース

ここで議論されていました。 github.com

また、このソースはここです。

github.com