Table of Contents [expand]
最終更新日 2025年09月04日(木)
この記事では、既存の Node.js アプリを Heroku にデプロイする方法について説明します。
Heroku をはじめて使う場合は、「Heroku スターターガイド (Node.js)」を参照してください。
前提条件
この記事では、以下が用意されていることを前提としています。
- Node.js および npm がインストールされている。
- 既存の Node.js アプリ。
- 無料の Heroku アカウント。
- Heroku CLI。
概要
Heroku の Node.js アプリケーション検出は、アプリのルートディレクトリに package.json ファイルがある場合にのみ適用されます。
詳細は、「Heroku での Node.js の動作」を参照してください。
アプリ依存関係の宣言
package.json ファイルは、アプリケーションと一緒にインストールする依存関係を定義します。アプリの package.json ファイルを作成するには、アプリのルートディレクトリで npm init コマンドを実行します。package.jsonファイルの作成方法が表示されます。すべてのプロンプトをブランクのままにしてスキップすることができます。
git bash アプリケーションを使用して、Windows でコマンドシェルを開きます。CLI のインストールで、このアプリケーションのショートカットがデスクトップに追加されました。$ cd node-example
$ npm init
...
package name: (node-example)
version: (1.0.0)
description: This example is so cool.
git repository:
author: jane-doe
license: (ISC) MIT
...
生成された package.json ファイルは次のようになります。
{
"name": "node-example",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "jane-doe",
"license": "MIT",
"description": "This example is so cool."
}
依存関係をインストールするには、npm install <package> を使用します。これにより、パッケージも依存関係として package.json ファイルに追加されます。たとえば、express をインストールするには、npm install express と入力します。
システムレベルのパッケージに依存していないことを確認してください。package.jsonファイル内に依存関係が存在しないと、Heroku にデプロイするときに問題が発生します。この問題をトラブルシューティングするには、ローカルコマンドラインで rm -rf node_modules; npm install --production と入力し、heroku local web と入力してアプリをローカルで実行してみます。package.jsonファイル内に依存関係が存在しない場合、モジュールが見つからないことを示すエラーが表示されます。
Node バージョンの指定
Heroku 上でアプリケーションを実行するために使用する Node.js のバージョンを package.json ファイル内で指定します。常に、開発やテストで使用しているランタイムに一致する Node.js バージョンを指定します。バージョンを確認するには、node --version と入力します。
これは、次のように package.json で engines.node フィールドを指定することで行えます。
"engines": {
"node": "22.x"
},
詳細は、「Node.js バージョンの指定」を参照してください。
依存関係がインストールされ、Node.js のバージョンが指定されると、package.json ファイルは次のようになります。
{
"name": "node-example",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "jane-doe",
"license": "MIT",
"description": "This example is so cool.",
"dependencies": {
"express": "^5.1.0"
},
"engines": {
"node": "22.x"
}
}
開始スクリプトの指定
アプリを開始する方法を調べるために、Heroku は最初に Procfile を検索します。Node.js アプリ用の Procfile が存在しない場合、package.json 内の開始スクリプト を介してデフォルトの web プロセスの開始を試行します。
Web プロセスタイプ内のコマンドは、PORT 環境変数に指定されているポート番号にバインドする必要があります。そうしないと、dyno は起動しません。
詳細は、「Node.js 開発のベストプラクティス」および「Heroku での Node.js の動作」を参照してください。
アプリのビルドとローカルでの実行
package.json ファイル内で宣言した依存関係をインストールするには、ローカルアプリディレクトリで npm install コマンドを実行します。
$ npm install
heroku local コマンドを使ってアプリをローカルで起動します。このコマンドは、Heroku CLI の一部としてインストールされています。
$ heroku local web --port 5001
これで、http://localhost:5001/ でアプリが実行されます。
ビルド成果物を Git の外部に保持する方法
node_modules を Git にチェックインするとビルドキャッシュが使用されなくなるため、この方法は推奨しません。詳細は、「ビルドの動作」を参照してください。
次のような .gitignore ファイルを作成することによって、ビルド成果物がリビジョン管理の対象に入らないようにします。
/node_modules
npm-debug.log
.DS_Store
/*.env
Heroku へのアプリケーションのデプロイ
変更内容を Git にコミットしたら、アプリを Heroku にデプロイできます。
$ git add .
$ git commit -m "Added a Procfile."
$ heroku login
Enter your Heroku credentials.
...
$ heroku create example-app
Creating example-app... done, stack is cedar
http://example-app-1234567890ab.herokuapp.com/ | git@heroku.com:arcane-lowlands-8408.git
Git remote heroku added
$ git push heroku main
...
-----> Node.js app detected
...
-----> Launching... done
http://example-app-1234567890ab.herokuapp.com deployed to Heroku
アプリをブラウザで開くには、heroku open と入力します。
データベースのプロビジョニング
add-on marketplace には、Postgres、Redis、MongoDB、MySQL などの多数のデータストアが揃っています。
次のステップ
- 「Node.js 開発のためのベストプラクティス」を参照してください。
- Node.js アプリケーションの開発とデプロイの詳細については、Node.js カテゴリを参照してください。