docs community blog github
Edit

Node.js Buildpack リファレンス

このドキュメントでは Paketo Node.js Buildpack の振る舞いや設定項目について詳しく説明します。 一般的な使用例については Node.js のチュートリアル を参照してください。

対応している依存対象

Node.js Buildpack は Node.js ランタイムの複数のバージョンに対応しています。 具体的なバージョンは Buildpack のリリースノート で確認してください。

Buildpack の設定する環境変数

Node.js Buildpack はアプリケーションライフサイクルのビルドフェーズや起動フェーズでいくつかの環境変数を設定します。 このセクションではアプリケーションに影響するであろう環境変数について説明します。

MEMORY_AVAILABLE

環境変数 MEMORY_AVAILABLE にはアプリケーションから利用できるメモリサイズの合計値を設定します。 Node.js Buildpack は OS の /sys/fs/cgroup/memory/memory.limit_in_bytes を参照して値を計算します。

  • Set by: profile.d
  • Phases: launch
  • Value: non-negative integer

NODE_ENV

環境変数 NODE_ENV にはアプリケーションを実行するときの環境種類を設定します。

  • Set by: node-engine buildpack
  • Phases: build
  • Value: production

NODE_HOME

環境変数 NODE_HOME には Node.js をインストールしたディレクトリのパスを設定します。

  • Set by: node-engine buildpack
  • Phases: build
  • Value: path to the node installation

NODE_VERBOSE

環境変数 NODE_VERBOSE には NPM が依存ぱっけー所をインストールするときに出力するログを調整する値を設定します。

  • Set by: node-engine buildpack
  • Phases: build
  • Value: false

NPM_CONFIG_LOGLEVEL

環境変数 NPM_CONFIG_LOGLEVEL には NPM のログ出力レベルを調整する値を設定します。

  • Set by: npm-install buildpack
  • Phases: build
  • Value: “error”

NPM_CONFIG_PRODUCTION

環境変数 NPM_CONFIG_PRODUCTION には NPM が production の依存ライブラリだけをインストールするかどうかを制御する値を設定します。

  • Set by: npm-install buildpack
  • Phases: build
  • Value: false

PATH

環境変数 PATH には node_modules/.bin を追加します。

  • Set by: yarn-install or npm-install buildpacks
  • Phases: build
  • Value: path to the node_modules/.bin directory

NPM によるパッケージ管理

多くの Node.js アプリケーションで、一般的なタスクや振る舞いを実現するためにサードパーティのライブラリを使用しています。 NPM は、Node.js Buildpack が完全に対応している、サードパーティのライブラリを管理する方法の1つです。 Buildpack は、アプリケーションのソースコードに package.json があれば、NPM によるサードパーティライブラリのインストールを試みます。 このセクションでは Buildpack が NPM によるインストールをどのように実行するのか説明します。

NPM によるパッケージのインストール

NPM には依存パッケージをインストールするためのさまざまな方法が用意されています。 Node.js Buildpack は npm installnpm rebuildnpm ci を実行します。 実行するコマンドは、ソースコードに含まれる特定のファイルやディレクトリから判断します。 また、実行するコマンドに基づいて、アプリケーションレイヤーを再利用するか、それとも再作成するかを判断します。

次の表は Node.js Buildpack が NPM で依存パッケージをインストールする方法を判断する条件です。 アプリケーションのソースコードに存在するファイルやディレクトリに応じて、必要な依存パッケージを正確に再現できるインストール方法を判断します。

package-lock.json node_modules npm-cache Command
X X X npm install
X X npm install
X X npm rebuild
X npm rebuild
X X npm ci
X npm ci
X npm rebuild
npm ci

このセクションの残りでは、前の表に並んでいるファイルについて説明し、意図したとおりの結果にする方法を説明します。

package-lock.json

package-lock.jsonnpm install コマンドを実行すると生成されるファイルです。 詳しくは Node のドキュメント を参照してください。

node_modules

node_modules ディレクトリには、 npm install でインストールした全てのパッケージの複製が存在します。 詳しくは Node Mudulesrpm-folders のセクションを参照してください。

npm-cache

npm-cache ディレクトリには、パッケージに関する全ての情報を、コンテンツをアドレス指定できるデータとして格納します。 加えて、キャッシュが利用できる場合、アプリケーションをビルドするために必要な全ての依存パッケージをオフライン環境で利用できることになります。

npm-cache ディレクトリへデータを追加するには次のように実行します。

cd <your source code directory>
npm ci --cache npm-cache
copy to clipboard
Copied!

NPM キャッシュについて詳しくは NPM キャッシュのドキュメント を参照してください。

Node モジュールレイヤーを再利用するか判断する

アプリケーションのビルド時間を短縮するため、Node.js Buildpack には先に実行したビルドの結果を再利用する方法があります。 依存パッケージのインストール方法に応じて、Buildpack が先に実行したビルドの結果を再利用できるか判断する方法は異なります。

npm install の場合、先に実行したビルドで作成した node_modules ディレクトリは再利用できません。

npm rebuild の場合、アプリケーションのソースコードに含まれる node_modules ディレクトリが、先に実行したビルドで変更されていなければ再利用できます。

npm ci の場合、アプリケーションのソースコードに含まれる package-lock.json が、先に実行したビルドで変更されていなければ、node_modules ディレクトリを再利用できます。

Yarn によるパッケージ管理

多くの Node.js アプリケーションで、一般的なタスクや振る舞いを実現するためにサードパーティのライブラリを使用しています。 Yarn は、Node.js Buildpack が対応している、サードパーティのライブラリを管理する方法の1つです。 Buildpack は、アプリケーションのソースコードに package.jsonyarn.lock があれば、Yarn によるサードパーティライブラリのインストールを試みます。 このセクションでは Buildpack が Yarn によるインストールをどのように実行するのか説明します。

Yarn によるパッケージのインストール

Node.js Buildpack は yarn install あるいは yarn.check でサードパーティの依存パッケージがインストールできていることを保証します。 yarn.lock ファイルには Yarn の管理する依存パッケージに関する完全な情報が格納されています。 詳しくは Yarn のドキュメント を参照してください。

Yarn でパッケージ管理する場合の起動コマンド

Node.js Buildpack はビルド処理の一部としてコンテナイメージの起動コマンドを生成します。 起動コマンドはアプリケーションのパッケージ管理の方法により異なります。 Node.js Buildpack が yarn を使用するときは、起動コマンドに yarn start を設定します。

起動コマンドを決定する

Node.js Buildpack はビルド処理の一部としてコンテナイメージの起動コマンドを生成します。 起動コマンドはアプリケーションのパッケージ管理の方法により異なります。 Node.js Buildpack が npmyarn を使用するときは、package.json の内容から生成した起動コマンドを設定します。

パッケージ管理を使わないプロジェクト

Node.js Buildpack はサードパーティパッケージを使わない、単純なアプリケーションにも対応しています。

起動コマンド

Node.js Buildpack はパッケージ管理ツールを使っていないアプリケーションについて、一般的なエントリポイントとなるファイルを探索します。

  • server.js
  • app.js
  • main.js
  • index.js

Buildpack はこれらのファイルを発見すると、起動コマンドに node <entrypoint filename> を設定します。

部品表(BOM:Bill of Materials)

Node.js Buildpack は BOM に完全対応しています。 Node.js アプリケーションの BOM には次のような内容が含まれます。

node module 要素は最終的なコンテナイメージに含まれる依存パッケージの全体像を提供します。 purl フィールドを見れば、どの NPM レジストリから取得できるのか分かります。 詳しくは 部品表(Bill of Materials)へアクセスする を参照してください。

Edit

Last modified: September 15, 2021