第2章 環境構築
更新日:2025年12月17日
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や機能が変更される可能性があります。最新情報は公式ドキュメントをご確認ください。