カスタム ビルドステップの実行

デフォルトでは、package.json ファイルで build スクリプトが検出されると、node.js ランタイムは npm run build を実行します。アプリの起動前にビルドステップをさらに制御する必要がある場合は、カスタム ビルドステップを指定できます。カスタム ビルドステップを実行するには、package.json ファイルに gcp-build を追加します。

ビルドで npm run build スクリプトが実行されないようにするには、以下のいずれかを行う必要があります。

  • package.json ファイルに空の値を持つ gcp-build スクリプトを追加します: "gcp-build":""package.json の構成の詳細については、Node.js Buildpack の構成をご覧ください。
  • app.yaml ファイルに空の値を持つ GOOGLE_NODE_RUN_SCRIPTS ビルド環境変数を追加します。

    build_env_variables:
      GOOGLE_NODE_RUN_SCRIPTS: ''
    
ビルド環境変数の指定の詳細については、app.yaml ファイルの build_env_variables セクションをご覧ください。

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

カスタム ビルドステップ用のランタイムを構成する方法については、Node.js Buildpack のデプロイ時にカスタムビルド ステップを実行するをご覧ください。

カスタムビルド スクリプトは、CSS の前処理、クライアント側 JavaScript の圧縮、webpackgulp といったツールの実行など、さまざまなタスクの前処理を行うために使用できます。

たとえば、TypeScript を JavaScript にコンパイルする場合、package.json ファイルは次のようになります。gcp-build スクリプトにご注意ください。

{
  "name": "appengine-typescript",
  "description": "An example TypeScript app running on Google App Engine.",
  "version": "0.0.1",
  "private": true,
  "license": "Apache Version 2.0",
  "author": "Google Inc.",
  "engines": {
    "node": "16.x.x"
  },
  "scripts": {
    "prepare": "npm run gcp-build",
    "pretest": "npm run gcp-build",
    "test": "c8 mocha -p -j 2 test/*.test.js --exit",
    "lint": "gts lint",
    "start": "node ./index.js",
    "deploy": "gcloud app deploy",
    "clean": "gts clean",
    "compile": "tsc -p .",
    "fix": "gts fix",
    "build": "tsc -p .",
    "gcp-build": "tsc -p ."
  },
  "dependencies": {
    "@typescript-eslint/parser": "^6.0.0",
    "express": "^4.16.3"
  },
  "devDependencies": {
    "@types/express": "^4.17.17",
    "@types/node": "^18.13.0",
    "c8": "^8.0.0",
    "chai": "^4.3.7",
    "gts": "^5.0.0",
    "mocha": "^10.2.0",
    "typescript": "^5.0.0",
    "wait-port": "^1.0.0"
  }
}

静的ファイルの提供

カスタム ビルドステップ中にファイルを生成またはコピーする場合、App Engine では app.yaml ファイルで定義された static_dir 要素または static_files 要素のいずれかを使用してアプリから直接静的ファイルが提供されることはありません。代わりに、カスタム ビルドステップを実行する前に、スタンダード環境のサービスを提供するインフラストラクチャに静的ファイルがアップロードされます。カスタム ビルドステップで生成されたかコピーされたファイルに対してリクエストを行うと、404 NOT FOUND HTTP エラーが発生します。