Heroku での Node.js アプリのデプロイ
最終更新日 2024年05月15日(水)
Table of Contents
この記事では、既存の 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
...
name: (node-example)
version: (1.0.0)
description: This example is so cool.
entry point: (web.js)
test command:
git repository:
keywords: example heroku
author: jane-doe
license: (ISC) MIT
...
生成された package.json
ファイルは次のようになります。
{
"name": "node-example",
"version": "1.0.0",
"description": "This example is so cool.",
"main": "web.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"example",
"heroku"
],
"author": "jane-doe",
"license": "MIT"
}
依存関係をインストールするには、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": "20.x"
},
Node.js のバージョンスキーマでは、奇数バージョンは不安定で、偶数バージョンは安定しています。安定したブランチはバグ修正のみを取得します。
依存関係がインストールされ、Node のバージョンが指定されると、package.json
ファイルは次のようになります。
{
"name": "node-example",
"version": "1.0.0",
"description": "This example is so cool.",
"main": "web.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"example",
"heroku"
],
"author": "jane-doe",
"license": "MIT",
"dependencies": {
"express": "^4.9.8"
},
"engines": {
"node": "20.x"
}
}
開発環境と本番環境は、できるだけ似た環境に保つことをお勧めします。ローカルの Node.js のバージョンが、Heroku で使用するように package.json
ファイルで指示したバージョンに一致するようにしてください。ローカルで実行しているバージョンを確認するには、コマンドラインで node --version
と入力します。
開始スクリプトの指定
アプリを開始する方法を調べるために、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 カテゴリを参照してください。