npm-shrinkwrap.json、Yarn、Heroku Buildpacksを使って依存関係を管理する方法
HerokuでNode.jsアプリ作成時にフォルダ「node_modules」をGitにコミットすべきか?
理由
- 容量: node_modulesフォルダは巨大になりやすく、リポジトリの容量を圧迫します。
- 依存関係の管理: npmやYarnなどのパッケージマネージャーを使って依存関係を管理しているので、重複してコミットする必要はありません。
- 再現性: 異なる環境で同じアプリを構築する場合、node_modulesフォルダをコミットすると依存関係のバージョンが固定されてしまい、環境間の差異が生じる可能性があります。
代替案
- .gitignore: .gitignoreファイルに「node_modules」フォルダを追加することで、コミットから除外できます。
- Heroku Buildpacks: Heroku Buildpacksは、アプリのデプロイ時に必要な依存関係を自動的にインストールしてくれる機能です。node_modulesフォルダをコミットしなくても、Heroku上で必要なモジュールをインストールできます。
例外
上記は一般的な推奨事項ですが、以下の場合にnode_modulesフォルダをコミットするのも選択肢です。
- アプリの動作に特定のバージョンのモジュールが必要で、Heroku Buildpacksでインストールできない場合
- 開発環境と本番環境で依存関係を完全に一致させる必要がある場合
HerokuでNode.jsアプリを作成する際は、一般的に「node_modules」フォルダをGitにコミットしないことを推奨します。.gitignoreファイルやHeroku Buildpacksなどの代替案を活用することで、効率的にアプリを管理できます。
// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('App listening on port 3000!');
});
このコードは、Expressフレームワークを使ってシンプルなWebサーバーを作成します。
実行方法
- 上記のコードを
app.js
というファイルに保存します。 - 以下のコマンドを実行して、必要なモジュールをインストールします。
npm install express
- 以下のコマンドを実行して、アプリを起動します。
node app.js
- ブラウザで
http://localhost:3000
を開くと、「Hello, World!」という文字が表示されます。
Herokuへのデプロイ
heroku create my-app
Herokuがアプリをビルドして起動し、アプリのURLが表示されます。
補足
このサンプルコードは基本的なものです。より複雑なアプリを作成するには、Expressフレームワークのドキュメントなどを参照してください。
HerokuでNode.jsアプリ作成時にフォルダ「node_modules」をGitにコミットしない他の方法
npm-shrinkwrap.jsonを使う
手順
npm shrinkwrap
コマンドを実行して、npm-shrinkwrap.json
ファイルを生成します。
npm shrinkwrap
heroku deploy --shrinkwrap
Yarnを使う
Yarnは、npmよりも高速で安全なパッケージマネージャーです。Yarnは、yarn.lock
ファイルを使って依存関係を管理します。
yarn install
コマンドを実行して、yarn.lock
ファイルを生成します。
yarn install
heroku deploy --yarn
Heroku Buildpacksは、アプリのデプロイ時に必要な依存関係を自動的にインストールしてくれる機能です。NODE_ENV
環境変数を設定することで、Heroku Buildpacksにインストールする依存関係を指定することができます。
{
"name": "my-app",
"version": "1.0.0",
"description": "A simple Node.js app",
"main": "app.js",
"dependencies": {
"express": "^4.17.1"
},
"production": {
"dependencies": {
"redis": "^3.0.0"
}
}
}
- Herokuにデプロイすると、Heroku Buildpacksは
package.json
ファイルのproduction
プロパティに基づいて、必要な依存関係をインストールします。
HerokuでNode.jsアプリを作成する際は、一般的に「node_modules」フォルダをGitにコミットしないことを推奨します。上記の方法を参考に、プロジェクトに合った方法を選択してください。
git node.js heroku