第2章 環境構築

更新日:2025年12月17日

本章では、Node.jsの環境構築に必要な知識を解説する。nvmによるバージョン管理、npmによるパッケージ管理、package.jsonによる依存関係の記録、そしてバージョン指定の仕組みについて説明する。これらを理解することで、チーム開発において環境を統一し、再現性のある開発環境を構築できるようになる。

1. nvmによるバージョン管理

Node.jsのインストール方法には選択肢がある。公式サイトから直接インストールする方法と、nvm経由でインストールする方法である。

1.1 なぜバージョン管理が必要か

ソフトウェア開発では、プロジェクトごとに要求されるNode.jsのバージョンが異なる。これはライブラリやフレームワークとの相性による。

Table 1. プロジェクトごとのバージョン要求例

プロジェクト 要求バージョン 理由
古い社内システム v16 当時の安定版で構築
新規Webアプリ v20 最新機能を使用
Playwright v18以上 公式要件

1台のPCで複数プロジェクトを扱う場合、バージョンを切り替える必要がある。nvmはこの問題を解決する。

1.2 nvmの基本操作

nvmはNode Version Managerの略である。複数のNode.jsバージョンをインストールし、切り替えることができる。

nvm install 16    # v16をインストール
nvm install 20    # v20をインストール
nvm use 16        # v16に切り替え
nvm use 20        # v20に切り替え
nvm list          # インストール済みバージョン一覧

2. npmによるパッケージ管理

Node.jsをインストールすると、npmが一緒にインストールされる。npmはNode Package Managerの略であり、外部ライブラリをインストール・管理するツールである。

2.1 他言語との比較

Table 2. 言語別パッケージマネージャー

言語 パッケージマネージャー コマンド例
Python pip pip install requests
Node.js npm npm install express

2.2 インストール先

npmには2つのインストール先がある。

Table 3. ローカルとグローバル

種類 コマンド インストール先 用途
ローカル npm install express プロジェクト内のnode_modules/ そのプロジェクト専用
グローバル npm install -g playwright システム全体 どこからでも使うツール

基本はローカルインストールを使用する。プロジェクトごとに独立するため、異なるバージョンのライブラリを使い分けられる。

Fig. 1 ローカルインストールのディレクトリ構造

my-project/
├── node_modules/    ← ここにライブラリが入る
│   ├── express/
│   └── lodash/
└── index.js

3. package.json

package.jsonは、プロジェクトが使用するライブラリ一覧を記録したファイルである。

3.1 基本構造

{
  "name": "my-project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2",
    "lodash": "^4.17.21"
  },
  "devDependencies": {
    "jest": "^29.0.0"
  }
}

3.2 dependenciesとdevDependencies

dependencies(依存関係)は、このプロジェクトが「依存している」ライブラリのリストである。プロジェクトを動かすために必要なものを記録する。

Table 4. 依存関係の種類

種類 意味
dependencies 本番で必要 express、lodash
devDependencies 開発時のみ必要 テストツール、ビルドツール

3.3 チーム開発での活用

node_modules/フォルダは巨大になるため、Gitには含めない。package.jsonだけを共有すれば、誰でも同じ環境を再現できる。

1. Aさんがライブラリを追加
   → package.json が更新される
   → Gitにコミット

2. Bさんがプルして npm install を実行
   → 同じライブラリが自動でインストールされる

4. バージョン指定

4.1 セマンティックバージョニング

ソフトウェアのバージョンは3つの数字で表される。これをセマンティックバージョニングと呼ぶ。

4.18.2
│  │  │
│  │  └── パッチ(小さな修正、バグ修正)
│  └───── マイナー(中くらいの変更、新機能追加)
└──────── メジャー(大きな変更、互換性が壊れる可能性)

Table 5. バージョン番号の意味

番号 名前 どんな変更 例え
1番目 メジャー 作り直しレベル 家の建て替え
2番目 マイナー 機能追加 部屋を増築
3番目 パッチ バグ修正 壁の穴を塞ぐ

4.2 範囲指定記法

package.jsonでは、バージョンの範囲を指定できる。

Table 6. バージョン指定記法

記法 意味 許可される範囲
^4.18.2 マイナー更新まで許可 4.18.2 〜 4.99.99
~4.18.2 パッチ更新のみ許可 4.18.2 〜 4.18.99
4.18.2 完全固定 4.18.2 のみ

^(キャレット)が最も一般的である。「バグ修正と新機能追加は受け入れるが、大きな変更は避ける」という意味になる。

5. package-lock.json

package.jsonには範囲指定(例:^4.18.2)で記述するため、インストール時期によって実際にインストールされるバージョンが変わる可能性がある。

Aさん(今日)    → express 4.18.2 がインストールされる
Bさん(1ヶ月後)→ express 4.19.0 がインストールされる

これではチームで環境が揃わない。package-lock.jsonはこの問題を解決する。

Table 7. 2つのファイルの役割

ファイル 役割
package.json 許容範囲を指定 ^4.18.2(4.18.2〜4.99.99)
package-lock.json 実際のバージョンを固定 4.18.2(これ固定)

両方をGitにコミットすることで、チーム全員が同じ環境を再現できる。

6. まとめ

Table 8. 第2章のまとめ

概念 内容
nvm Node.jsのバージョン管理ツール
npm パッケージマネージャー(pip相当)
node_modules ローカルインストール先
package.json 依存関係の記録ファイル
dependencies 本番で必要なライブラリ
devDependencies 開発時のみ必要なライブラリ
セマンティックバージョニング メジャー.マイナー.パッチの3桁
^(キャレット) マイナー更新まで許可
package-lock.json 実際のバージョンを固定
参考・免責事項
本コンテンツは2025年12月時点の情報に基づいて作成されています。Node.jsおよび関連ツールは活発に開発が進められており、APIや機能が変更される可能性があります。最新情報は公式ドキュメントをご確認ください。