🦛

Firebase Cloud FunctionsのsetGlobalOptionsの設定方法と注意点

に公開

はじめに

Firebase Cloud Functionsを使用する際、複数の関数を作成していると、それぞれの関数ごとにリージョンを指定するのは非常に面倒なので、setGlobalOptionsを使って全ての関数に対して一括でリージョンを設定する方法について解説します。

ファイル構成

今回の例では、以下のような構成でファイルを分けています:

index.ts: メインのエントリーポイントとなるファイル。ここでグローバル設定を行い、外部の関数をエクスポートします。
test.ts: 実際のCloud Function(今回はtestという関数)を実装しているファイル。

test.tsは以下のようなシンプルな構造になっています:

test.ts
import { onRequest } from "firebase-functions/v2/https";

export const test = onRequest((req, res) => {
  console.log("Hello from Firebase!");
});

問題点

最初、私は以下のようにメインファイルを書いていました:

index.ts
import { setGlobalOptions } from "firebase-functions/v2";
import { test } from "./test";

setGlobalOptions({
  region: "asia-northeast1",
});

export { test };

しかし、このコードではsetGlobalOptionsが正しく機能せず、グローバル設定が適用されませんでした。

解決策

調査の結果、setGlobalOptionsは他のモジュールをインポートする前に呼び出す必要があることがわかりました。正しいコードは以下の通りです:

index.ts
import { setGlobalOptions } from "firebase-functions/v2";

setGlobalOptions({
  region: "asia-northeast1",
});

import { test } from "./test";

export { test };

このように、setGlobalOptionsを最初に呼び出してからモジュールをインポートすることで、すべての関数に対してグローバル設定が適用されます。

なぜこの順序が重要なのか

Firebase Cloud Functionsでは、関数のインポート時に設定が適用されるため、setGlobalOptionsはそれらがインポートされる前に呼び出す必要があります。

まとめ

Firebase Cloud Functionsで複数の関数に同じ設定を適用したい場合は、setGlobalOptionsを使用することで効率的に設定できますが、必ずモジュールのインポート前に呼び出すようにしましょう。

Discussion