🌤

Firebase Functionsでデフォルトで利用できる環境変数一覧

4 min read

FirebaseFunctions のコード内で取得できる環境変数は TypeScript では process.env で確認できます。今回は以下のように Https でアクセスできる API を作ってそれを叩いて確認しました。

import * as ff from 'firebase-functions'
const functions = ff.region('asia-northeast1')
export const checkEnvVars = functions.https.onRequest(async (req, res) => {
  res.json(process.env)
})

以下は 2020/12/11 現在での情報です。また、GCP の CloudFunctions ではなく、FirebaseFunctions での実行結果であることにご注意ください。

Node.js 12 系

{
  "NO_UPDATE_NOTIFIER": "true",
  "FUNCTION_TARGET": "checkEnvVars",
  "NODE_OPTIONS": "--http-server-default-timeout=0",
  "NODE_PATH": "/workspace/node_modules",
  "NODE_ENV": "production",
  "PWD": "/srv",
  "HOME": "/root",
  "FIREBASE_CONFIG": "{\"projectId\":\"YOUR_PROJECT_ID\",\"databaseURL\":\"https://YOUR_PROJECT_ID.firebaseio.com\",\"storageBucket\":\"YOUR_PROJECT_ID.appspot.com\",\"locationId\":\"asia-northeast1\"}",
  "DEBIAN_FRONTEND": "noninteractive",
  "PORT": "8080",
  "K_REVISION": "2",
  "K_SERVICE": "checkEnvVars",
  "SHLVL": "1",
  "FUNCTION_SIGNATURE_TYPE": "http",
  "PATH": "/workspace/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "_": "/layers/google.nodejs.functions-framework/functions-framework/node_modules/.bin/functions-framework",
  "GCLOUD_PROJECT": "YOUR_PROJECT_ID"
}

Node.js 10 系

Node.js 12 系と目立った違いはありませんでした。NODE_OPTIONSに少し違いがあったり、K_REVISIONの数値が増えていたり(デプロイごとに increment される模様)するくらいです。

{
  "NO_UPDATE_NOTIFIER": "true",
  "FUNCTION_TARGET": "checkEnvVars",
  "NODE_OPTIONS": "--max-old-space-size=256",
  "NODE_PATH": "/workspace/node_modules",
  "NODE_ENV": "production",
  "PWD": "/srv",
  "HOME": "/root",
  "FIREBASE_CONFIG": "{\"projectId\":\"YOUR_PROJECT_ID\",\"databaseURL\":\"https://YOUR_PROJECT_ID.firebaseio.com\",\"storageBucket\":\"YOUR_PROJECT_ID.appspot.com\",\"locationId\":\"asia-northeast1\"}",
  "DEBIAN_FRONTEND": "noninteractive",
  "PORT": "8080",
  "K_REVISION": "3",
  "K_SERVICE": "checkEnvVars",
  "SHLVL": "1",
  "FUNCTION_SIGNATURE_TYPE": "http",
  "PATH": "/workspace/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "_": "/layers/google.nodejs.functions-framework/functions-framework/node_modules/.bin/functions-framework",
  "GCLOUD_PROJECT": "YOUR_PROJECT_ID"
}

Node.js 14 beta

この記事を公開した翌日に、Node.js 14 beta が利用できるようになったので、早速試してみました。S2A_ACCESS_TOKENというのが増えていますね 🧐 何に利用しているものなのでしょうね。軽く調べた感じではわかりませんでした。かちなみに、beta 版なので GA するときにはなくなっているかもしれませんし突然消えてもおかしくありません。

{
  "NO_UPDATE_NOTIFIER": "true",
  "FUNCTION_TARGET": "checkEnvVars",
  "NODE_PATH": "/workspace/node_modules",
  "NODE_ENV": "production",
  "PWD": "/srv",
  "HOME": "/root",
  "FIREBASE_CONFIG": "{\"projectId\":\"YOUR_PROJECT_ID\",\"databaseURL\":\"https://YOUR_PROJECT_ID.firebaseio.com\",\"storageBucket\":\"YOUR_PROJECT_ID.appspot.com\",\"locationId\":\"asia-northeast1\"}",
  "DEBIAN_FRONTEND": "noninteractive",
  "PORT": "8080",
  "K_REVISION": "4",
  "S2A_ACCESS_TOKEN": "YOUR_ACCESS_TOKEN",
  "K_SERVICE": "checkEnvVars",
  "SHLVL": "1",
  "FUNCTION_SIGNATURE_TYPE": "http",
  "PATH": "/workspace/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  "_": "/layers/google.nodejs.functions-framework/functions-framework/node_modules/.bin/functions-framework",
  "GCLOUD_PROJECT": "YOUR_PROJECT_ID"
}

おわりに

昔、Qiita に記事を書いたときは、Node.js 8 系から 10 系に移行されたときで、結構破壊的な変更があったので 12 ではどうなのかが気になって調べてみました。特に違いは無いという結果なので、その他に問題がなさそうであればこれからは 12 系を使うようにしましょう!バージョンが高いほうが言語としてパフォーマンスが良くなっているので、Functions をパフォーマンスも向上するはずです。

いつのまにか 12 系の Beta が取れていたことに気づいて驚いているボク。

Discussion

ログインするとコメントできます