複数のプロジェクトを開発していると、プロジェクトごとに異なるNode.jsバージョンが必要になることがあります。本記事では、Node.jsバージョン管理ツールであるnvmとfnmの使い方、.nvmrcによるプロジェクト設定、そしてCorepackによるパッケージマネージャー管理について解説します。
実行環境#
| 項目 |
バージョン |
| Node.js |
20.x LTS以上 |
| npm |
10.x以上 |
| OS |
Windows/macOS/Linux |
| nvm |
v0.40.3 |
| fnm |
v1.38.1 |
前提条件#
- JavaScriptの基礎文法を理解していること
- ターミナル(コマンドライン)の基本操作ができること
- 管理者権限でのコマンド実行が可能であること
なぜバージョン管理ツールが必要なのか#
Node.jsのバージョン管理ツールを使用する主な理由は以下の通りです。
- プロジェクトごとの互換性確保: 古いプロジェクトはNode.js 18.xが必要で、新しいプロジェクトはNode.js 22.xが必要といった状況に対応できます
- チーム開発での統一: チームメンバー全員が同じNode.jsバージョンを使用することで、環境差異による問題を防げます
- 簡単なバージョン切り替え: コマンド一つでNode.jsバージョンを即座に切り替えられます
- 安全なインストール: sudo権限なしでNode.jsやグローバルパッケージをインストールできます
graph LR
A[プロジェクトA<br/>Node.js 18.x] --> VM[バージョン管理ツール<br/>nvm / fnm]
B[プロジェクトB<br/>Node.js 20.x] --> VM
C[プロジェクトC<br/>Node.js 22.x] --> VM
VM --> D[適切なNode.js<br/>バージョンを自動選択]nvmとfnmの比較#
Node.jsのバージョン管理ツールとして代表的なnvmとfnmの特徴を比較します。
| 特徴 |
nvm |
fnm |
| 対応OS |
macOS/Linux/WSL |
Windows/macOS/Linux |
| 実装言語 |
Bash |
Rust |
| 起動速度 |
標準的 |
高速 |
| .nvmrcサポート |
あり |
あり |
| .node-versionサポート |
なし |
あり |
| 自動バージョン切替 |
スクリプト追加が必要 |
組み込みサポート |
Windowsネイティブ環境で開発する場合はfnmが推奨されます。macOS/Linuxでは両方とも利用可能ですが、起動速度を重視する場合はfnmが有利です。
fnmのインストールと設定#
fnm(Fast Node Manager)は、Rustで実装された高速なNode.jsバージョン管理ツールです。クロスプラットフォーム対応で、Windowsでもネイティブに動作します。
Windowsでのfnmインストール#
PowerShellを管理者権限で開き、以下のコマンドを実行します。
1
2
3
4
5
6
7
8
|
# wingetを使用したインストール
winget install Schniz.fnm
# または Scoopを使用
scoop install fnm
# または Chocolateyを使用
choco install fnm
|
インストール後、PowerShellプロファイルに設定を追加します。
1
2
3
|
# プロファイルファイルを開く(存在しない場合は作成)
if (-not (Test-Path $PROFILE)) { New-Item $PROFILE -Force }
notepad $PROFILE
|
プロファイルに以下の行を追加して保存します。
1
|
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
|
新しいPowerShellウィンドウを開いて設定を反映させます。
macOS/Linuxでのfnmインストール#
ターミナルで以下のコマンドを実行します。
1
2
3
4
5
|
# curlを使用したインストール
curl -fsSL https://fnm.vercel.app/install | bash
# または Homebrewを使用(macOS/Linux)
brew install fnm
|
シェル設定ファイルに以下を追加します。
Bashの場合(~/.bashrc):
1
|
eval "$(fnm env --use-on-cd --shell bash)"
|
Zshの場合(~/.zshrc):
1
|
eval "$(fnm env --use-on-cd --shell zsh)"
|
Fishの場合(~/.config/fish/conf.d/fnm.fish):
1
|
fnm env --use-on-cd --shell fish | source
|
設定を反映させるためにシェルを再起動するか、設定ファイルを再読み込みします。
1
2
3
4
5
|
# Bashの場合
source ~/.bashrc
# Zshの場合
source ~/.zshrc
|
fnmの基本操作#
インストールが完了したら、fnmを使用してNode.jsをインストールします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 利用可能なNode.jsバージョン一覧を表示
fnm list-remote
# 最新のLTSバージョンをインストール
fnm install --lts
# 特定のバージョンをインストール
fnm install 22
fnm install 20.18.0
# インストール済みバージョン一覧を表示
fnm list
# バージョンを切り替え
fnm use 22
# デフォルトバージョンを設定
fnm default 22
# 現在使用中のバージョンを確認
fnm current
node --version
|
nvmのインストールと設定#
nvm(Node Version Manager)は、最も広く使われているNode.jsバージョン管理ツールです。macOS、Linux、WSL環境で動作します。
macOS/Linuxでのnvmインストール#
ターミナルで以下のコマンドを実行します。
1
2
3
4
5
|
# インストールスクリプトを実行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# または wgetを使用
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
インストールスクリプトは自動的にシェル設定ファイル(~/.bashrc、~/.zshrcなど)に以下の設定を追加します。
1
2
|
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
シェルを再起動するか、設定ファイルを再読み込みします。
1
|
source ~/.bashrc # または ~/.zshrc
|
インストールの確認を行います。
1
2
|
command -v nvm
# nvm と表示されれば成功
|
WSL環境でのnvmインストール#
Windows Subsystem for Linux(WSL)では、Linux環境と同様にnvmをインストールできます。
1
2
3
|
# WSLターミナルで実行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
|
nvmの基本操作#
nvmを使用してNode.jsをインストール・管理します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 利用可能なバージョン一覧を表示
nvm ls-remote
# LTSバージョン一覧のみ表示
nvm ls-remote --lts
# 最新のLTSバージョンをインストール
nvm install --lts
# 特定のバージョンをインストール
nvm install 22
nvm install 20.18.0
# インストール済みバージョン一覧を表示
nvm ls
# バージョンを切り替え
nvm use 22
# デフォルトバージョンを設定
nvm alias default 22
# 現在使用中のバージョンを確認
nvm current
node --version
# 特定バージョンでコマンドを実行
nvm exec 20 node --version
# Node.jsをアンインストール
nvm uninstall 18
|
.nvmrcによるプロジェクト設定#
.nvmrcファイルを使用すると、プロジェクトごとに使用するNode.jsバージョンを指定できます。チーム開発やCI/CD環境で特に有用です。
.nvmrcファイルの作成#
プロジェクトのルートディレクトリに.nvmrcファイルを作成します。
1
2
3
4
5
6
7
8
|
# 現在使用中のバージョンを.nvmrcに書き込む
node --version > .nvmrc
# または直接バージョンを指定
echo "22" > .nvmrc
# LTSを指定することも可能
echo "lts/*" > .nvmrc
|
.nvmrcファイルの内容例は以下の通りです。
.nvmrcファイルの書式#
.nvmrcファイルでは以下の形式でバージョンを指定できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 完全なバージョン指定
22.12.0
# メジャーバージョンのみ(最新のマイナー/パッチを使用)
22
# メジャー.マイナーバージョン
22.12
# LTSの最新バージョン
lts/*
# 特定のLTSコードネーム
lts/jod
# 最新バージョン
node
|
コメントも記述できます。
1
2
|
# このプロジェクトはNode.js 22を使用します
22
|
自動バージョン切り替え#
fnmでは--use-on-cdオプションを使用すると、ディレクトリ移動時に自動的にバージョンが切り替わります。先述のシェル設定で既に有効になっています。
nvmで自動バージョン切り替えを有効にするには、シェル設定に追加のスクリプトが必要です。
Zsh用(~/.zshrc):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
|
この設定により、.nvmrcファイルがあるディレクトリに移動すると自動的に指定されたバージョンに切り替わります。
1
2
3
4
|
# .nvmrcがあるプロジェクトディレクトリに移動
cd my-project/
# Found '/path/to/my-project/.nvmrc' with version <22>
# Now using node v22.12.0 (npm v10.9.0)
|
.node-versionファイル#
fnmは.node-versionファイルもサポートしています。.nvmrcと同様の機能を持ち、一部のツール(例:asdf、volta)との互換性があります。
1
2
|
# .node-versionファイルの作成
echo "22.12.0" > .node-version
|
fnmは.node-versionと.nvmrcの両方が存在する場合、.node-versionを優先します。
Corepackによるパッケージマネージャー管理#
Corepackは、Node.js v16.9.0以降にバンドルされているパッケージマネージャーのバージョン管理ツールです。npm、Yarn、pnpmを個別にインストールすることなく、プロジェクトごとに適切なバージョンを使用できます。
Corepackの有効化#
Corepackはデフォルトでは無効になっているため、明示的に有効化する必要があります。
1
2
3
4
5
6
|
# Corepackを有効化(yarn、pnpmのシムを作成)
corepack enable
# 特定のパッケージマネージャーのみ有効化
corepack enable yarn
corepack enable pnpm
|
有効化後、Yarn/pnpmを個別にインストールする必要はありません。
1
2
3
4
5
|
# Yarnが自動的に利用可能になる
yarn --version
# pnpmも同様
pnpm --version
|
package.jsonでのパッケージマネージャー指定#
package.jsonのpackageManagerフィールドでプロジェクトが使用するパッケージマネージャーとバージョンを指定できます。
1
2
3
4
5
|
{
"name": "my-project",
"version": "1.0.0",
"packageManager": "pnpm@9.15.0"
}
|
Yarnを使用する場合の例は以下の通りです。
1
2
3
4
5
|
{
"name": "my-project",
"version": "1.0.0",
"packageManager": "yarn@4.6.0"
}
|
Corepackの基本操作#
Corepackを使用したパッケージマネージャーの管理方法を解説します。
1
2
3
4
5
6
7
8
9
10
11
12
|
# 現在のプロジェクトに対してパッケージマネージャーを設定
corepack use pnpm@9.15.0
# package.jsonのpackageManagerフィールドが更新される
# パッケージマネージャーを最新版に更新
corepack up
# 特定バージョンのパッケージマネージャーをグローバルにインストール
corepack install -g pnpm@9.15.0
# キャッシュをクリア
corepack cache clear
|
Corepackの実践例#
新しいプロジェクトでpnpmを使用する場合の例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# プロジェクトディレクトリを作成
mkdir my-new-project
cd my-new-project
# package.jsonを初期化
npm init -y
# pnpmを使用するように設定
corepack use pnpm@latest
# package.jsonを確認
cat package.json
# "packageManager": "pnpm@9.15.0" が追加されている
# pnpmで依存関係をインストール
pnpm install
|
チームメンバーがこのプロジェクトをクローンした場合、Corepackが自動的に正しいバージョンのpnpmを使用します。
1
2
3
|
git clone <repository-url>
cd my-new-project
pnpm install # 自動的にpackageManagerで指定されたpnpmバージョンが使用される
|
Corepackの注意点#
Corepackに関するいくつかの重要な注意点があります。
-
Node.js v25以降のサポート終了: Node.js v25からはCorepackがバンドルされなくなる予定です。将来的にはnpm install -g corepackで個別にインストールする必要があります
-
npmはデフォルトで無効: Corepackはnpmのシムをデフォルトで作成しません。npmもCorepackで管理したい場合は明示的に有効化が必要です
-
初回ダウンロード: 指定されたパッケージマネージャーが未キャッシュの場合、初回実行時にダウンロードが発生します
実践的なワークフロー#
ここまで学んだ内容を組み合わせた実践的なワークフローを紹介します。
新規プロジェクトのセットアップ#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 1. プロジェクトディレクトリを作成
mkdir my-awesome-project
cd my-awesome-project
# 2. Node.jsバージョンを指定
echo "22" > .nvmrc
fnm use # または nvm use
# 3. package.jsonを初期化
npm init -y
# 4. パッケージマネージャーを設定(pnpmを使用する場合)
corepack enable
corepack use pnpm@latest
# 5. Gitに追加
git init
echo "node_modules/" >> .gitignore
git add .nvmrc package.json
git commit -m "Initial setup with Node.js 22 and pnpm"
|
既存プロジェクトへの参加#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 1. リポジトリをクローン
git clone <repository-url>
cd <project-name>
# 2. .nvmrcがあれば自動的にバージョンが切り替わる(fnmの場合)
# 手動で切り替える場合
fnm use # または nvm use
# 3. 指定されたNode.jsバージョンがインストールされていない場合
fnm install # または nvm install
# 4. 依存関係をインストール
# package.jsonにpackageManagerが指定されていれば自動で適切なPMが使用される
pnpm install # または yarn install / npm install
|
CI/CD環境での設定#
GitHub Actionsでの設定例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'pnpm'
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: pnpm install
- name: Run tests
run: pnpm test
|
この設定により、.nvmrcに指定されたNode.jsバージョンと、package.jsonのpackageManagerに指定されたパッケージマネージャーが自動的に使用されます。
トラブルシューティング#
よくある問題と解決策を紹介します。
nvmコマンドが見つからない#
シェルを再起動するか、設定ファイルを再読み込みしてください。
1
|
source ~/.bashrc # または ~/.zshrc
|
それでも解決しない場合は、設定が正しく追加されているか確認してください。
1
|
cat ~/.bashrc | grep NVM
|
fnmでバージョンが自動切り替えされない#
シェル設定に--use-on-cdオプションが含まれているか確認してください。
1
2
|
# 正しい設定例
eval "$(fnm env --use-on-cd --shell bash)"
|
Corepackでダウンロードエラーが発生する#
ネットワーク接続を確認し、プロキシ設定が必要な場合は環境変数を設定してください。
1
2
|
export HTTPS_PROXY=http://proxy.example.com:8080
corepack enable
|
権限エラーが発生する#
nvm/fnmを使用している場合、sudoは通常不要です。sudoを使用せずに実行してください。
1
2
3
4
5
|
# 正しい方法
npm install -g typescript
# 避けるべき方法
sudo npm install -g typescript
|
まとめ#
本記事では、Node.jsのバージョン管理について以下の内容を解説しました。
- バージョン管理ツールの必要性: プロジェクトごとの互換性確保とチーム開発での統一が重要
- fnm: Windows対応で高速、自動バージョン切替が組み込み済み
- nvm: 広く普及、macOS/Linux/WSLで動作
- .nvmrc: プロジェクトごとのNode.jsバージョンを宣言的に管理
- Corepack: パッケージマネージャー(Yarn/pnpm)のバージョンを統一管理
これらのツールを活用することで、複数プロジェクトでのNode.js開発がより効率的かつ安全になります。次のステップとして、package.jsonの詳細な設定やnpmスクリプトの活用について学ぶことをおすすめします。
参考リンク#