created: 2021-04-18T07:50:15.000Z

FirebaseCloudFunction で環境変数を設定する(.env経由)

Firebase CloudFunction では通常のOSの環境変数の使用は制限されている。ランタイムに変数を注入したい場合はOSの環境変数ではなく、 Firebase独特の環境変数を使う必要があることになっている。

サードパーティの API キーや調整可能な設定など、関数の追加構成が必要になることがよくあります。Firebase SDK for Cloud Functions では、プロジェクトのこのタイプのデータを簡単に保存および取得できるように、組み込み環境構成が提供されています

GCPの CloudFunction ではデプロイ時に一緒に環境変数を指示するオプションが存在するがFirebaseの CloudFunction にはそのオプションは存在しない。

OSの環境変数が使いたい場合

Firebase独特の環境変数はOSの環境変数ではないので、使用するモジュールがOSの環境変数を期待している場合に困ったことになる。たとえばdebugパッケージなどは環境変数に色々な値を設定して使うものなので、こういうのが使いたい時はOSの環境変数が使えないと困る。

今回の場合だと Prisma を使っており、Prismaはデータベースサーバとの接続情報をOSの環境変数経由で指定することになっているので、OSの環境変数を使う方法はないかなぁということになった。

It is common to load your database connection URL from an environment variable:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

なんとかOSの環境変数を使う

ただ、調べたところまったくOSの環境変数が使えないわけではなく、プロセス内で process.env にセットすればOSの環境変数を設定することができることになっていた。 dotenvを使ってこんなコードをエントリポイントの先頭に置いておけばOSの環境変数が入った状態で関数を実行できた(PrismaはDBに接続できた)。

import { config } from 'dotenv';
config({ path: '.env.prod' });