Node.jsのバージョン管理:mise・nvm・Volta・asdf・nodenvの使い方
はじめに
バージョン管理ツールを使えば、プロジェクトごとにNode.jsのバージョンを自動で切り替えられます。この記事ではよく使われる nvm、最近人気の mise、package.json でバージョン管理できる Volta、多言語対応の asdf、シンプルな nodenv の使い方を解説します。
バージョン確認コマンドは「Node.jsのバージョン確認方法:npm・yarn・pnpm・Bunもまとめて解説」を参照してください。
mise(推奨)
miseはRust製のバージョン管理ツールで、Node.js・Python・Ruby・Goなど複数言語を1つのツールで管理できます。
インストール
# macOS(Homebrew) brew install mise # シェルに設定を追加 echo 'eval "$(mise activate zsh)"' >> ~/.zshrc source ~/.zshrc
Node.jsをインストールする
# インストール可能なバージョンを確認 mise ls-remote node # LTS版をインストール mise install node@lts # 特定バージョンをインストール mise install node@22 # 最新バージョンをインストール mise install node@latest
バージョンを切り替える
# グローバル(デフォルト)に設定 mise use --global node@22 # プロジェクトごとに設定(.mise.tomlを作成) mise use node@20
プロジェクトディレクトリに .mise.toml が作成されます。
[tools] node = "20"
このファイルをgitで管理することで、チームで同じバージョンを使えます。
バージョンを確認する
node -v # v22.14.0 mise list node # node 22.14.0 ~/dev/myproject/.mise.toml
nvm
nvmはNode.js専用の老舗バージョン管理ツールです。情報量が多く、長年使われています。
インストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
インストール後、シェルの設定ファイルに以下が自動追加されます。
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
設定を反映します。
source ~/.zshrc
Node.jsをインストールする
# インストール可能なバージョンを確認 nvm ls-remote # LTS版をインストール nvm install --lts # 特定バージョンをインストール nvm install 22 nvm install 20.18.0
バージョンを切り替える
# 使用するバージョンを切り替える(現在のシェルのみ) nvm use 20 # デフォルトに設定 nvm alias default 22
プロジェクトごとに自動切り替え
プロジェクトのルートに .nvmrc ファイルを作成します。
echo "20" > .nvmrc
ディレクトリに入ったときに自動切り替えするには、~/.zshrc に以下を追加します。
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
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
バージョンを確認する
node -v # v20.18.0 nvm list # v20.18.0 # -> v22.14.0 # default -> 22 (-> v22.14.0) # lts/* -> lts/jod (-> v22.14.0)
nodenv
nodenvはrbenv・pyenvと同じ仕組みのNode.js専用ツールです。シンプルで軽量です。
インストール
# Homebrewでインストール brew install nodenv # シェルに設定を追加 echo 'eval "$(nodenv init -)"' >> ~/.zshrc source ~/.zshrc
Node.jsをインストールする
# インストール可能なバージョンを確認 nodenv install --list # 特定バージョンをインストール nodenv install 22.14.0 nodenv install 20.18.0
バージョンを切り替える
# グローバルに設定 nodenv global 22.14.0 # プロジェクトごとに設定(.node-versionを作成) nodenv local 20.18.0
nodenv local を実行するとプロジェクトディレクトリに .node-version ファイルが作成されます。
20.18.0
バージョンを確認する
node -v # v20.18.0 nodenv versions # 20.18.0 # * 22.14.0 (set by /Users/username/.nodenv/version)
Volta
VoltaはRust製のNode.js専用ツールマネージャーです。バージョン情報を package.json に書く点が他のツールと異なります。
インストール
# macOS / Linux curl https://get.volta.sh | bash
シェルの設定ファイルに以下が自動追加されます。
export VOLTA_HOME="$HOME/.volta" export PATH="$VOLTA_HOME/bin:$PATH"
Node.jsをインストールする
# LTS版をインストール volta install node # 特定バージョンをインストール volta install node@22 volta install node@20
バージョンを切り替える
# グローバルに設定 volta install node@22 # プロジェクトごとに固定(package.jsonに書き込む) volta pin node@20 volta pin npm@10
volta pin を実行すると package.json に以下が追加されます。
{ "volta": { "node": "20.18.0", "npm": "10.9.2" } }
バージョン情報が package.json に集約されるため、.nvmrc などの追加ファイルが不要です。
バージョンを確認する
node -v # v20.18.0 volta list # ⚡️ User toolchain: # Node: v22.14.0 (default) # Node: v20.18.0
asdf
asdfは多言語対応のバージョン管理ツールです。プラグインを追加することでNode.js以外にもPython・Ruby・Goなど多数の言語を管理できます。miseはasdfと互換性があり、asdfの後継として位置づけられています。
インストール
# macOS(Homebrew) brew install asdf # シェルに設定を追加 echo '. /opt/homebrew/opt/asdf/libexec/asdf.sh' >> ~/.zshrc source ~/.zshrc
Node.jsプラグインを追加する
asdf plugin add nodejs
Node.jsをインストールする
# インストール可能なバージョンを確認 asdf list all nodejs # 特定バージョンをインストール asdf install nodejs 22.14.0 asdf install nodejs 20.18.0 # LTS版をインストール asdf install nodejs latest:20
バージョンを切り替える
# グローバルに設定 asdf global nodejs 22.14.0 # プロジェクトごとに設定(.tool-versionsを作成) asdf local nodejs 20.18.0
asdf local を実行するとプロジェクトディレクトリに .tool-versions ファイルが作成されます。
nodejs 20.18.0
複数言語を管理する場合は1ファイルにまとめられます。
nodejs 20.18.0 python 3.12.0 ruby 3.3.0
バージョンを確認する
node -v # v20.18.0 asdf list nodejs # 20.18.0 # * 22.14.0
全ツールの比較
| mise | nvm | Volta | asdf | nodenv | |
|---|---|---|---|---|---|
| 対応言語 | 多言語 | Node.js専用 | Node.js専用 | 多言語(プラグイン) | Node.js専用 |
| インストール | brew install mise |
curlスクリプト | curlスクリプト | brew install asdf |
brew install nodenv |
| 設定ファイル | .mise.toml |
.nvmrc |
package.json |
.tool-versions |
.node-version |
| 自動切り替え | ディレクトリ移動で自動 | 設定が必要 | ディレクトリ移動で自動 | ディレクトリ移動で自動 | ディレクトリ移動で自動 |
| 起動速度への影響 | 小さい | やや大きい | 小さい | 小さい | 小さい |
| asdf互換 | ✅ | — | — | — | — |
- 多言語を管理するなら mise(asdf互換で移行しやすい)
- Node.js専用で情報量重視なら nvm
package.jsonにまとめたいなら Volta- asdfを既に使っているなら asdf のまま継続でOK
- シンプルさ重視なら nodenv
まとめ
| ツール | インストール | バージョン指定 | 確認 |
|---|---|---|---|
| mise | brew install mise |
mise use node@22 |
mise list node |
| nvm | curlスクリプト | nvm use 22 |
nvm list |
| Volta | curlスクリプト | volta pin node@22 |
volta list |
| asdf | brew install asdf |
asdf local nodejs 22.14.0 |
asdf list nodejs |
| nodenv | brew install nodenv |
nodenv local 22.14.0 |
nodenv versions |
- 設定ファイル(
.mise.toml/.nvmrc/package.json/.tool-versions/.node-version)をgit管理するとチームのバージョンを統一できる - 新規プロジェクトや多言語環境なら mise がおすすめ
- ディレクトリごとに環境変数を自動で切り替えるには「direnv入門:ディレクトリごとに環境変数を自動で切り替える」を参照