Node.js での依存関係の指定

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

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

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

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

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

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

    /**
     * HTTP Cloud Function.
     *
     * @param {Object} req Cloud Function request context.
     *                     More info: https://expressjs.com/en/api.html#req
     * @param {Object} res Cloud Function response context.
     *                     More info: https://expressjs.com/en/api.html#res
     */
    exports.helloHttp = (req, res) => {
      res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
    };

デプロイ時に依存関係をインストールする

関数をデプロイする際、Cloud Functions は npm install コマンドを使用して、package.json ファイル内で宣言されている依存関係をインストールします。

npm install --production
    

Node.js 8 以降のランタイムでは、yarn.lock ファイルが存在する場合は、Cloud Functions では代わりに yarn install コマンドが使用されます。

yarn install --production
    

デプロイ時にカスタムビルド ステップを実行する

package.json ファイルに gcp-build スクリプトを追加すると、デプロイ時、アプリケーションの起動前にカスタム ビルドステップを実行できます。

このスクリプトの実行時には、package.json ファイルの dependencies フィールドと devDependencies フィールドの依存関係を利用できます。カスタムビルド ステップが実行された後、Cloud Functions は package.json ファイルの dependencies フィールドで宣言されている本番環境の依存関係のみをインストールし、node_modules フォルダを削除して生成し直します。

package.jsongcp-build スクリプトがない場合、Cloud Functions は本番環境の依存関係をインストールするだけです。

システム パッケージを使用する

Node.js ランタイムでは、実行環境に多数のシステム パッケージが含まれています。リストされていないパッケージが必要な依存関係を関数が使用している場合は、パッケージをリクエストできます。

デプロイメント パッケージの一部としてローカルの Node.js モジュールを含める

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

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

このローカル モジュールのコードは、node_modules フォルダに含めないでくさだい。関数のディレクトリのルートに保存するようにします。

npm を使用してローカルで Node.js モジュールをインストールする

ローカルで Node.js モジュールをインストールする特に簡単な方法は、Cloud 関数のあるフォルダで npm install コマンドを使用することです。たとえば、次のコマンドは uuid モジュールを追加します。

npm install uuid
    

これは、次の 2 つのステップを組み合わせたものです。

  1. package.json ファイルで、モジュールの最新バージョンを依存関係としてマークします。これは非常に重要です。Cloud Functions は、package.json ファイルで宣言されたモジュールのみをインストールします。
  2. モジュールを node_modules ディレクトリにダウンロードします。これにより、モジュールをローカルでの開発に使用できます。

マシンに npm がインストールされていない場合は、npm を入手します。

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

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

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

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

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