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

詳細比較

機能比較表

機能Voltafnmnvmasdf
速度⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
自動切り替え⚠️手動設定
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(段階的移行)を推奨します。速度が劇的に改善します。

どのツールを選んでも、バージョン管理をしないよりは遥かに良いです。まだ導入していない人は、今すぐ始めましょう。