Google I/O 2023 での Firebase の最新情報をご覧ください。詳細

依存関係の扱い

関数では、ローカルデータだけでなく、外部の Node.js モジュールも使用できます。Node.js における依存関係は、npm で管理され、package.json というメタデータ ファイルで表現されます。Cloud Functions の Node.js ランタイムは通常、npm または yarn を使用したインストールをサポートしています。

関数の依存関係を指定するには、package.json ファイルにその依存関係を追加します。

この例では、依存関係は package.json ファイルにリストされています。

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

依存関係は関数にインポートされます。

JavaScript

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

TypeScript

import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

ローカル Node.js モジュールを含める

関数の一部としてローカルの Node.js モジュールを含めることもできます。そのためには、file: 接頭辞を使用してモジュールを package.json で宣言します。次の例では、mymodule はモジュール名を指し、mymoduledir はモジュールを含むディレクトリを指します。

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

このローカル モジュールのコードは、関数のルート ディレクトリ内にある node_modules フォルダ以外の場所に保存する必要があります。

TypeScript での追加手順

TypeScript は、型情報のあるライブラリを使用するときに役立ちます。これにより TypeScript で構文エラーを捕捉し、エディタでのオートコンプリート機能を強化できます。firebase-adminfirebase-functions といった一部のライブラリには、TypeScript の定義が含まれています。

多くのライブラリは独自の TypeScript 定義を提供しません。DefinitelyTyped プロジェクトに、コミュニティで管理されている、よく使用されるノード ライブラリの定義が用意されています。DefinitelyTyped は、これらの定義を同じ NPM パッケージ名で公開していますが、名前に「@types」が含まれています。たとえば、uuid ライブラリの型情報をインストールするには、次のコマンドを実行します。

npm install @types/uuid

TypeScript に慣れてきたら、次のように両方のインストールを組み合わせることもできます。

npm install uuid @types/uuid

型の依存関係は、ライブラリの依存関係と同じ種類でなければなりません。たとえば、通常の依存関係として uuid を保存した場合、dev 依存関係またはピア依存関係として @types/uuid を保存できません。

Node.js モジュールを読み込む

インストールされている任意の Node.js モジュールを読み込むには、Node.js の require() 関数を使用します。require() 関数を使用して、関数とともにデプロイするローカル ファイルをインポートすることもできます。

TypeScript で関数を記述する場合は、同じ方法で import を使用し、インストール済みの Node.js モジュールを読み込みます。

非公開モジュールを使用する

非公開の npm モジュールを使用するには、関数のディレクトリにある .npmrc ファイルに、レジストリを認証するための設定を記述します。パッケージ マネージャーとして Yarn v2 以降を使用している場合、このファイルの名前は .yarnrc.yml です。

Artifact Registry の非公開モジュール

Artifact Registry Node.js パッケージ リポジトリは、関数の非公開モジュールをホストできます。Google Cloud Functions の関数をデプロイすると、ビルドプロセスにより、Cloud Build サービス アカウント用の Artifact Registry 認証情報が自動的に生成されます。必要な操作は、.npmrc に Artifact Registry リポジトリのリストを記述するだけです。追加の認証情報を生成する必要はありません。次に例を示します。

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

このアプローチは Yarn v1 パッケージ マネージャーでも機能します。Yarn v2 以降を使用している場合は、追加の認証情報なしで Artifact Registry リポジトリを .yarnrc.yml に一覧表示するだけで済みます。次に例を示します。

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

他のリポジトリの非公開モジュール

npm のドキュメントでは、カスタムの読み取り専用アクセス トークンを作成する方法について説明しています。.npmrc ファイルには読み取り / 書き込みトークンが含まれているため、ホーム ディレクトリにこのファイルを作成して使用することは避けてください。デプロイ時に書き込み権限は必要なく、セキュリティ上のリスクが発生する可能性があります。

非公開リポジトリを使用していない場合は .npmrc ファイルを追加しないでください。追加すると、関数のデプロイ時間が長くなる可能性があります。

ファイル形式

.npmrc ファイルを使用してカスタム認証トークンを設定する場合は、以下の行を含める必要があります。

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

次のように置き換えます。

  • REGISTRY_DOMAIN: プライベート npm レジストリのドメイン名。リポジトリが npmjs.org でホストされている場合は、このフィールドを registry.npmjs.org に設定します。
  • AUTH_TOKEN: npm レジストリの認証トークン。トークンのリテラル テキスト値、または npm を環境の実際のトークン値に置き換えるテキスト文字列 ${NPM_TOKEN} のいずれかになります。

    $NPM_TOKEN 環境変数と --set-build-env-vars 引数を gcloud functions deploy コマンドに設定できます。NPM 認証トークンについて詳しくは、プライベート モジュールに関する NPM のチュートリアルをご覧ください。