環境の構成

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

プロジェクトの環境設定を設定する

環境データを保存するには、Firebase CLIfirebase functions:config:set コマンドを使用します。各キーは、ピリオドを使用して名前空間を指定し、関連する構成をグループ化できます。キーには小文字しか使用できないことにご注意ください。大文字は使用できません。

たとえば、「Some Service」のクライアント ID と API キーを保存するには、以下を実行します。

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"

現在の環境設定を取得する

プロジェクトの環境設定に現在保存されているものを調べるには、firebase functions:config:get を使用します。以下のような JSON が出力されます。

{
  "someservice": {
    "key":"THE API KEY",
    "id":"THE CLIENT ID"
  }
}

この関数は Google Cloud Runtime Configuration API に基づいています。

関数で環境設定にアクセスする

一部の設定は、予約された firebase 名前空間の下で自動的に提供されます。環境構成は functions.config() を介して実行中の関数内で使用可能になります。上記の設定を使用する場合、コードは以下のようになります。

const functions = require('firebase-functions');
const request = require('request-promise');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  let email = event.data.child('email').val();

  return request({
    url: 'https://someservice.com/api/some/call',
    headers: {
      'X-Client-ID': functions.config().someservice.id,
      'Authorization': `Bearer ${functions.config().someservice.key}`
    },
    body: {email: email}
  });
});

環境設定を使用してモジュールを初期化する

一部のノード モジュールは、設定しなくても準備ができています。バックエンドに接続し、正しく初期化するために追加の設定が必要なモジュールもあります。この設定を、ハードコード化するのではなく、環境変数に保存することをおすすめします。これにより、コードを移植性の高い状態に保ち、アプリケーションをオープンソースにしたり、本番バージョンとステージング バージョンを簡単に切り替えたりすることができます。

たとえば、Slack Node SDK モジュールを使用するには、次のように記述します。

const functions = require('firebase-functions');
const IncomingWebhook = require('@slack/client').IncomingWebhook;
const webhook = new IncomingWebhook(functions.config().slack.url);

デプロイする前に、以下の slack.url 環境構成変数を設定します。

firebase functions:config:set slack.url=https://hooks.slack.com/services/XXX

その他の環境コマンド

  • firebase functions:config:unset key1,key2 は、指定されたキーを構成から削除します。
  • firebase functions:config:clone --from <fromProject> は、別のプロジェクトの環境を現在アクティブなプロジェクトにクローンします。

自動的に設定される環境変数

関数のランタイムやローカルでエミュレートされる関数で自動的に設定される環境変数があります。たとえば、次のような変数があります。

process.env.GCLOUD_PROJECT: Firebase プロジェクト ID を提供します

process.env.FIREBASE_CONFIG: 次のような Firebase プロジェクトの構成情報を提供します。

{
  databaseURL: 'https://databaseName.firebaseio.com',
  storageBucket: 'projectId.appspot.com',
  projectId: 'projectId'
}

引数を指定せずに Firebase Admin SDK を初期化すると、この構成が自動的に適用されます。関数を JavaScript で記述する場合は、次のように初期化します。

const admin = require('firebase-admin');
admin.initializeApp();

関数を TypeScript で作成する場合は、次のように初期化します。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import 'firebase-functions';
admin.initializeApp();

サービス アカウントの認証情報を使用して、デフォルトのプロジェクト構成の Admin SDK を初期化する必要がある場合は、次のようにファイルから認証情報を読み込み、FIREBASE_CONFIG ファイルに追加します。

serviceAccount = require('./serviceAccount.json');

const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG);
adminConfig.credential = admin.credential.cert(serviceAccount);
admin.initializeApp(adminConfig);

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。