docs community blog github
Edit

Paketo Buildpacks で Node.js アプリケーションをビルドする

このドキュメントでは Paketo Node.js Buildpack を使用してアプリケーションのコンテナイメージを作成する方法を説明します。 Buildpack の振る舞いや設定方法を詳しく知りたいときは リファレンス を参照してください。

サンプルアプリをビルドする

ローカルPCで pack コマンドを実行して、サンプルアプリのコンテナイメージを Buildpack で作成するには次のように実行します。

git clone https://github.com/paketo-buildpacks/samples
cd samples/nodejs/npm
pack build my-app --buildpack gcr.io/paketo-buildpacks/nodejs \
  --builder paketobuildpacks/builder:base
copy to clipboard
Copied!

アプリケーションの実行方法は README ファイル を参照してください。

注意:この例では Paketo Base ビルダーを使っていますが、Paketo Node.js Buildpack は Paketo Full ビルダーと互換性があります。アプリケーションが一般的なCライブラリ関数を呼び出している場合は Full ビルダーが必要です。

Node Engine のインストールするバージョンを指定する

Paketo Node.js Buildpack では、デプロイするときに使用する Node.js のバージョンを指定できるようになっています。 バージョンを指定する方法はいろいろあります。 環境変数 BP_NODE_VERSION や、コードベースに配置したファイル(package.json, .nvmrc, .node-version)で指定できるのです。 指定できるバージョンは、使用する Buildpack の対応しているバージョンだけです。 Paketo Node.js Buildpack の使用できる Node.js Engine のバージョンについては、Paketo Node.js Buildpack のリリースノート を参照してください。

バージョンを指定する場所の優先順位は BP_NODE_VERSION, package.json, .nvmrc, .node-version の順になっています。

環境変数 BP_NODE_VERSION でバージョンを指定する

例えば、アプリケーションをデプロイするときに Node.js v12.12.0 を使用するには、環境変数 BP_NODE_VERSION へ次のように指定します。 あるいは、pack build コマンドの --env フラグに BP_NODE_VERSION=12.12.0 を指定することもできますし、project.toml で指定することもできます。

BP_NODE_VERSION="12.12.0"
copy to clipboard
Copied!

package.json でバージョンを指定する

アプリケーションを npmyarn で管理しているなら、package.jsonengines フィールドへ使用する Node.js のバージョンを指定できます。

{
  "engines": {
    "node": "12.12.0"
  }
}
copy to clipboard
Copied!

engines フィールドについて詳しくは NPM の package.json に関するドキュメントの engines セクションを参照してください。

.nvmrc でバージョンを指定する

NVM(Node Version Manager) はアプリケーションの使用する Node.js のバージョンを管理するためのツールです。 アプリケーションをデプロイするとき、.nvmrc に記述したバージョンの Node.js を使用できます。

.node-version でバージョンを指定する

.node-versionasdfnodenv で Node.js のバージョンを指定するために使用するファイルです。 アプリケーションをデプロイするとき、.node-version に記述したバージョンの Node.js を使用できます。 バージョン番号はいろいろな形式で記述できます。

12.12.0
copy to clipboard
Copied!
v12.12.0
copy to clipboard
Copied!
12.12
copy to clipboard
Copied!

非推奨:buildpack.yml を使用する

Paketo Node.js Buildpack の v1.0.0 から、buildpack.yml で Node.js のバージョンを指定するのは非推奨になりました。 環境変数 BP_NODE_VERSION で指定するようにしてください。

ヒープメモリ最適化機能を有効にする

Node.js はヒープメモリに格納できるオブジェクトサイズの合計値を制限しています。 ヒープメモリ最適化機能を有効にすると、コンテナから利用できるメモリサイズの4分の3までヒープメモリとして使用できるようになります。 例えば、あなたのアプリケーションが実行時に使用できるメモリサイズが 1GB なら、Node.js の使用できるヒープメモリサイズは 768 MB になります。

環境変数 BP_NODE_OPTIMIZE_MEMORY を指定すると有効化できます。

環境変数 BP_NODE_OPTIMIZE_MEMORY を指定する

ヒープメモリ最適化機能を有効にするには環境変数 BP_NODE_OPTIMIZE_MEMORYtrue を指定します。

pack build my-app \
  --buildpack gcr.io/paketo-buildpacks/nodejs \
  --env BP_NODE_OPTIMIZE_MEMORY=true
copy to clipboard
Copied!

非推奨:buildpack.yml を使用する

Enabling memory optimization through your buildpack.yml file will be deprecated in Node Engine Buildpack v1.0.0. To migrate from using buildpack.yml please set the BP_NODE_OPTIMIZE_MEMORY environment variable mentioned above. Paketo Node.js Buildpack の v1.0.0 から、buildpack.yml でヒープメモリ最適化機能を有効にするのは非推奨になりました。 環境変数 BP_NODE_OPTIMIZE_MEMORY で指定するようにしてください。

サブディレクトリのソースコードからアプリケーションのコンテナイメージをビルドする

環境変数 BP_NODE_PROJECT_PATH でサブディレクトリを指定すると、アプリケーションのルートディレクトリとして使用できるようになります。 また、project.toml でも指定できます。 アプリケーションをモノリポで管理しているときに便利です。

アプリケーションが次のようなディレクトリ構成になっている場合を考えてみましょう。

.
├── go-app
│  ├── go.mod
│  └── main.go
└── node-app
    ├── file.js
    ├── index.js
    └── package.json

この場合、環境変数 BP_NODE_PROJECT_PATH で次のようにサブディレクトリを指定します。

BP_NODE_PROJECT_PATH=node-app

ビルドフェーズで実行するスクリプトを指定する

環境変数 BP_NODE_RUN_SCRIPTSpackage.jsonscripts フィールドに記述したスクリプトを指定すると、ビルドフェーズで実行できます。 また、project.toml でも指定できます。 Angular や React や Vue など、ビルド処理が必要なフレームワークを使っているときに便利です。

例えば、package.json に次のようなスクリプトが記述されているとしましょう。

{
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "lint": "eslint src/**/*.js src/**/*.jsx"
  }
}

環境変数 BP_NODE_RUN_SCRIPTS へ次のように指定するとします。

$BP_NODE_RUN_SCRIPTS=lint,build

そうすると、ビルドフェーズで npm あるいは yarn により、lintbuild スクリプトを順番に実行できます。 指定できるのは、スクリプト名をカンマ区切りで連結した文字列です。

NPM でアプリケーションをビルドする

Paketo Node.js Buildpack はアプリケーションが npm を使用しているか自動的に検出します。

ビルド時に実行する NPM の設定を変更する

Paketo Node.js Buildpack は NPM の本来の設定を尊重するようになっています。 詳しくは NPM のドキュメント.npmrc のドキュメント を参照してください。

Yarn でアプリケーションをビルドする

Paketo Node.js Buildpack はアプリケーションが yarn を使用しているか自動的に検出します(yarn.lock ファイルの有無で判断します)。

ビルド時に実行する Yarn の設定を変更する

Paketo Node.js Buildpack は Yarn の本来の設定を尊重するようになっています。 詳しくは .yarnrc のドキュメント を参照してください。

node-gyp でネイティブ拡張をコンパイルする

アプリケーションが node-gyp でコンパイルするネイティブ拡張を使っている場合、Paketo Full ビルダーで実行しなければなりません。 Paketo Base ビルダーには、 node-gyp を実行するために必要な python や、さまざまな共有ライブラリが含まれていないからです。

pack build コマンドのフラグで指定する

pack コマンドで Paketo Full ビルダーを指定するときは次のように実行します。

pack build my-app --builder paketobuildpacks/builder:full
copy to clipboard
Copied!

パッケージ管理ツールを使わないアプリケーションをビルドする

Paketo Node.js Buildpack は node_modulespackage.json を使用しないアプリケーションをビルドできます。 次のいずれかのファイルが、アプリケーションのルートディレクトリに存在する場合は、そのように判断します。

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

エントリポイントを変更する

アプリケーションのエントリポイントが前に列挙したファイルとは違うファイルの場合、環境変数 BP_LAUNCHPOINT でファイル名を指定できます。

環境変数 BP_LAUNCHPOINT を使用する

環境変数 BP_LAUNCHPOINT でエントリポイントとなるファイル名を指定できます。

BP_LAUNCHPOINT="./src/launchpoint.js"
copy to clipboard
Copied!

作成したコンテナイメージは、起動コマンドとして node src/launchpoint.js を実行します。

独自の CA 証明書をインストールする

Install a Custom CA Certificate

Paketo Node.js Buildpack では、ビルド時や実行時のどちらでも、CA 証明書の構成 手順に従って、ユーザーが自分で用意した CA 証明書をコンテナのルートトラストストアへ配置できます。

Buildpack の設定する起動プロセスを変更する

Paketo Node.js Buildpack では、Procfiles の導入 手順に従って、アプリケーションのコンテナイメージが起動するプロセスを変更できます。

アプリケーションを起動するときの環境変数を設定する

Paketo Node.js Buildpack では、環境変数の構成 手順に従って、アプリケーションのコンテナイメージを実行するときの環境変数を変更できます。

アプリケーションのコンテナイメージにラベルを設定する

Paketo Node.js Buildpack では、ラベルの構成 手順に従って、アプリケーションのコンテナイメージにラベルを指定できます。

Edit

Last modified: September 13, 2021