Heroku での Node.js の動作
最終更新日 2025年03月17日(月)
このドキュメントでは、Node.js アプリケーションの認識と実行に関連した Heroku の一般的な動作について説明します。アプリケーションのデプロイ方法に関する詳しい説明は、「Heroku スターターガイド (Node.js)」または「Heroku Fir スターターガイド (Node.js)」を参照してください。
自動検出
Node.js buildpack は、アプリケーションのルートディレクトリに package.json
ファイルがある場合に使用されます。Cedar 世代のアプリでは Heroku のクラシック Node.js buildpack が使用され、Fir 世代のアプリでは Heroku Node.js Cloud Native Buildpack が使用されます。
デフォルトの Web プロセスタイプ
最初に、Heroku はプロセスタイプを指定する Procfile を検索します。
ビルドプロセス中にアプリのルートディレクトリに Procfile
が存在しないものの、アプリの package.json
に start
スクリプトがある場合は、それがデフォルトの Web プロセスとして使用されます。たとえば、次のようになります。
"scripts": {
"start": "node server.js"
}
アプリの構成で web
以外のプロセスのみを実行する場合、web
を明示的にスケールダウンし、他のプロセスタイプをスケールアップします。たとえば、次のようになります。
$ heroku scale web=0 worker=1
ビルド動作
Heroku の Node.js buildpack は、アプリがクラシック buildpack を使用するか、Cloud Native Buildpack (CNB) を使用するかによってビルド動作が異なります。Node.js ビルドとそのカスタマイズ方法については、次の記事を参照してください。
アドオンのプロビジョニング
デフォルトでプロビジョニングされるアドオンはありません。アプリ用のデータベースが必要な場合は、明示的に追加してください。
$ heroku addons:create heroku-postgresql --app example-app
複数の buildpack による動作
Node.js buildpack をほかの buildpack と一緒に使用すると、node
バイナリと、使用されているパッケージマネージャー (npm
、pnpm
、yarn
) のバイナリが PATH
に自動的にエクスポートされ、後続の buildpack で使用できるようになります。クラシック buildpack では node_modules/.bin
も PATH
に追加されます。
ランタイムの動作
buildpack はランタイムに node
バイナリと、使用されているパッケージマネージャー (npm
、pnpm
、yarn
) のバイナリを PATH
にエクスポートし、heroku run で実行したり、Procfile で直接使用したりできるようにします。クラシック buildpack では node_modules/.bin
も PATH
に追加されます。
$ cat Procfile
web: npm start
NODE_ENV
環境変数はデフォルトで “production” に設定されますが、任意の文字列に設定できます。
$ heroku config:set NODE_ENV=staging
通常、NODE_ENV は “production” にします。express
を含むいくつかのモジュールでは、NODE_ENVに基づいてそれらの動作を暗黙的に変更します。