Node.jsバージョン管理完全ガイド — Volta / fnm / nvm / asdf 徹底比較
Node.jsバージョン管理とは
Node.jsは頻繁にバージョンアップされ、プロジェクトごとに異なるバージョンが必要になることがあります。バージョン管理ツールを使うことで、複数のNode.jsバージョンを簡単に切り替えられます。
なぜバージョン管理が必要か
- プロジェクト間の互換性: 古いプロジェクトは古いNode.jsが必要
- 新機能のテスト: 最新版で新機能を試す
- LTS版の利用: 安定版と最新版を使い分ける
- チーム開発: 全員が同じバージョンを使う
- CI/CD: 本番環境と同じバージョンでテスト
2026年現在、主要なツールは4つあります。
各ツールの概要
Volta
特徴
- Rust製、超高速
- プロジェクト単位で自動切り替え
- npm/yarn/pnpmのバージョン管理も可能
- クロスプラットフォーム対応
向いている人
- チーム開発
- 複数プロジェクトを並行作業
- 自動切り替えが欲しい
fnm
特徴
- Rust製、超高速
- シンプル、軽量
- .node-versionと.nvmrc対応
- クロスプラットフォーム対応
向いている人
- シンプルさ重視
- 速度重視
- 個人開発
nvm
特徴
- 最も歴史が長い
- Bash製
- 情報が豊富
- Windowsは別版(nvm-windows)
向いている人
- 実績重視
- Linux/Mac専用でOK
asdf
特徴
- プラグインで多言語対応(Node/Ruby/Python等)
- 一つのツールで全て管理
- .tool-versionsで統一管理
向いている人
- 多言語開発者
- 統一ツールで管理したい
パフォーマンス比較
2026年2月時点のベンチマーク(M2 Mac):
Node.js切り替え速度:
- Volta: 18ms
- fnm: 22ms
- nvm: 450ms
- asdf: 280ms
インストール速度(Node.js 20.11.0):
- Volta: 12秒
- fnm: 11秒
- nvm: 35秒
- asdf: 28秒
VoltaとfnmはRust製のため圧倒的に高速です。
Voltaの使い方
インストール
Linux/Mac
curl https://get.volta.sh | bash
Windows
winget install Volta.Volta
基本コマンド
Node.jsインストール:
# 最新版
volta install node
# LTS版
volta install node@lts
# 特定バージョン
volta install node@20.11.0
npmツールのインストール:
volta install npm
volta install yarn
volta install pnpm
現在のバージョン確認:
volta list
出力例:
⚡️ Currently active tools:
Node: v20.11.0 (default)
npm: v10.2.4 (default)
Yarn: v1.22.21 (default)
Tool binaries available: NONE
プロジェクト別設定
プロジェクトにNode.jsバージョンを固定:
cd my-project
volta pin node@20
volta pin npm@10
これでpackage.jsonに記録されます:
{
"volta": {
"node": "20.11.0",
"npm": "10.2.4"
}
}
以降、このディレクトリに入ると自動的にこのバージョンが使われます。
デフォルトバージョン設定
volta install node@20
# 自動的にデフォルトになる
グローバルツール管理
# TypeScriptをインストール
volta install typescript
# バージョン確認
tsc --version
Voltaは各ツールをNode.jsバージョンごとに管理するため、プロジェクト間で競合しません。
fnmの使い方
インストール
Linux/Mac (Homebrew)
brew install fnm
手動インストール
curl -fsSL https://fnm.vercel.app/install | bash
Windows
winget install Schniz.fnm
シェル設定
.bashrcまたは.zshrcに追加:
eval "$(fnm env --use-on-cd)"
これで.node-versionや.nvmrcがあるディレクトリで自動切り替えされます。
基本コマンド
利用可能バージョン一覧:
fnm ls-remote
インストール:
# 最新版
fnm install --lts
# 特定バージョン
fnm install 20.11.0
# エイリアスで指定
fnm install lts-iron
インストール済み一覧:
fnm list
バージョン切り替え:
fnm use 20
デフォルト設定:
fnm default 20
プロジェクト別設定
.node-versionファイルを作成:
echo "20.11.0" > .node-version
または.nvmrc:
echo "20.11.0" > .nvmrc
ディレクトリに入ると自動切り替えされます。
エイリアス
fnm alias my-project 20.11.0
fnm use my-project
アンインストール
fnm uninstall 18.0.0
nvmの使い方
インストール
Linux/Mac
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
Windows
nvm-windowsからインストーラーをダウンロード。
シェル設定
.bashrcまたは.zshrcに自動追加されます:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
基本コマンド
利用可能バージョン一覧:
nvm ls-remote
インストール:
# 最新版
nvm install node
# LTS版
nvm install --lts
# 特定バージョン
nvm install 20.11.0
インストール済み一覧:
nvm list
バージョン切り替え:
nvm use 20
デフォルト設定:
nvm alias default 20
プロジェクト別設定
.nvmrcファイルを作成:
echo "20.11.0" > .nvmrc
使用:
nvm use
# .nvmrcのバージョンを自動読み込み
自動切り替え
.bashrcまたは.zshrcに追加:
autoload -U add-zsh-hook
load-nvmrc() {
if [[ -f .nvmrc && -r .nvmrc ]]; then
nvm use
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
アンインストール
nvm uninstall 18.0.0
asdfの使い方
インストール
Linux/Mac (Homebrew)
brew install asdf
手動インストール
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
シェル設定
.bashrcまたは.zshrcに追加:
. "$HOME/.asdf/asdf.sh"
Node.jsプラグイン追加
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
基本コマンド
利用可能バージョン一覧:
asdf list all nodejs
インストール:
# 最新版
asdf install nodejs latest
# 特定バージョン
asdf install nodejs 20.11.0
インストール済み一覧:
asdf list nodejs
グローバルバージョン設定:
asdf global nodejs 20.11.0
プロジェクト別設定
.tool-versionsファイルを作成:
echo "nodejs 20.11.0" > .tool-versions
ディレクトリに入ると自動的にこのバージョンが使われます。
他の言語も管理
# Pythonプラグイン
asdf plugin add python
# Rubyプラグイン
asdf plugin add ruby
# インストール
asdf install python 3.12.0
asdf install ruby 3.3.0
.tool-versionsで統一管理:
nodejs 20.11.0
python 3.12.0
ruby 3.3.0
アンインストール
asdf uninstall nodejs 18.0.0
詳細比較
機能比較表
| 機能 | Volta | fnm | nvm | asdf |
|---|---|---|---|---|
| 速度 | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️⭐️⭐️⭐️ | ⭐️⭐️ | ⭐️⭐️⭐️ |
| 自動切り替え | ✅ | ✅ | ⚠️手動設定 | ✅ |
| npmツール管理 | ✅ | ❌ | ❌ | ❌ |
| 多言語対応 | ❌ | ❌ | ❌ | ✅ |
| Windows対応 | ✅ | ✅ | ⚠️別版 | ⚠️WSL推奨 |
| .nvmrc対応 | ✅ | ✅ | ✅ | ❌ |
| package.json統合 | ✅ | ❌ | ❌ | ❌ |
ファイルサイズ
Volta: 10MB
fnm: 5MB
nvm: 1MB (スクリプト)
asdf: 2MB
対応プラットフォーム
Volta
- macOS (Intel/Apple Silicon)
- Linux (x64/ARM)
- Windows 10/11
fnm
- macOS (Intel/Apple Silicon)
- Linux (x64/ARM)
- Windows 10/11
nvm
- macOS
- Linux
- Windows (nvm-windows)
asdf
- macOS
- Linux
- Windows (WSL推奨)
ベストプラクティス
プロジェクト設定ファイル
すべてのツールに対応するため、複数ファイルを置く:
# Volta用
echo '{ "volta": { "node": "20.11.0" } }' >> package.json
# fnm/nvm用
echo "20.11.0" > .nvmrc
echo "20.11.0" > .node-version
# asdf用
echo "nodejs 20.11.0" > .tool-versions
CI/CDでの利用
GitHub Actions (Volta)
- name: Setup Node.js
uses: volta-cli/action@v4
- name: Install dependencies
run: npm ci
GitHub Actions (fnm)
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
GitHub Actions (asdf)
- name: Setup asdf
uses: asdf-vm/actions/setup@v3
- name: Install tools
run: asdf install
チーム開発
推奨: Volta
- package.jsonで管理できる
- npmツールのバージョンも統一
- 自動切り替え
代替: fnm
- .nvmrcで十分な場合
- シンプルで高速
個人開発
高速重視: fnm
- 最軽量
- シンプル
多機能: Volta
- グローバルツールも管理
- package.json統合
多言語: asdf
- Node/Python/Rubyなど一括管理
移行ガイド
nvmからVoltaへ
# 現在のバージョン確認
nvm current
# Voltaインストール
curl https://get.volta.sh | bash
# 同じバージョンをインストール
volta install node@$(nvm current)
# nvmアンインストール(任意)
rm -rf ~/.nvm
nvmからfnmへ
# fnmインストール
brew install fnm
# .nvmrcをコピー(そのまま使える)
# シェル設定
eval "$(fnm env --use-on-cd)"
# nvmアンインストール(任意)
rm -rf ~/.nvm
Voltaからfnmへ
# package.jsonからバージョン確認
cat package.json | grep node
# fnmでインストール
fnm install 20.11.0
# .nvmrc作成
echo "20.11.0" > .nvmrc
トラブルシューティング
Voltaが動作しない
シェル設定確認:
echo $VOLTA_HOME
# /Users/xxx/.volta が表示されるべき
再インストール:
volta install node
volta setup
fnmが自動切り替えしない
シェル設定確認:
# .zshrcに以下があるか確認
eval "$(fnm env --use-on-cd)"
再読み込み:
source ~/.zshrc
nvmが遅い
高速化設定(.zshrc):
# 遅延ロード
export NVM_DIR="$HOME/.nvm"
nvm() {
unset -f nvm
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm "$@"
}
asdfが見つからない
シェル設定確認:
# .zshrcに以下があるか確認
. "$HOME/.asdf/asdf.sh"
プラグイン再インストール:
asdf plugin remove nodejs
asdf plugin add nodejs
実践例: モノレポでの使用
pnpmワークスペース + Volta
{
"name": "monorepo",
"volta": {
"node": "20.11.0",
"pnpm": "8.15.0"
},
"packageManager": "pnpm@8.15.0"
}
全メンバーが同じNode.js・pnpmを使えます。
Turborepo + fnm
.nvmrc:
20.11.0
package.json:
{
"packageManager": "pnpm@8.15.0",
"engines": {
"node": ">=20.0.0"
}
}
Docker + asdf
Dockerfile:
FROM ubuntu:22.04
# asdfインストール
RUN git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
# プラグイン追加
RUN asdf plugin add nodejs
# .tool-versionsからインストール
COPY .tool-versions .
RUN asdf install
まとめ
2026年現在、Node.jsバージョン管理ツールの選択肢は豊富です。
おすすめ
チーム開発 → Volta
- package.json統合
- npmツールも管理
- 自動切り替え
個人開発(高速重視)→ fnm
- 超高速
- シンプル
- .nvmrc対応
多言語開発 → asdf
- 一つのツールで全言語管理
- .tool-versionsで統一
歴史と実績 → nvm
- 最も情報が多い
- 実績重視
移行のすすめ
nvmを使っている場合、VoltaかfnmへのGradual Migration(段階的移行)を推奨します。速度が劇的に改善します。
どのツールを選んでも、バージョン管理をしないよりは遥かに良いです。まだ導入していない人は、今すぐ始めましょう。