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
また、このソースはここです。