導入と基本概念
nvm(Node Version Manager)は、POSIX準拠のシェル環境(bash、zsh、kshなど)で動作する、Node.jsのバージョン管理ツールです。ユーザー単位・セッション単位で動作し、Linux、macOS、WSL環境での使用を想定しています。
インストール方法
公式のインストールスクリプトを使用する標準方法もありますが、ネットワーク制約がある環境では手動インストールが推奨されます:
mkdir -p ~/.nvm
cd ~/.nvm
git clone https://github.com/nvm-sh/nvm.git .
最新安定版(例:v0.39.3)をチェックアウト:
git checkout v0.39.3
`.bashrc`、`.zshrc`、`.profile`いずれかに以下を追加し、シェル起動時に読み込むように設定:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
設定を反映させるには、再ログインまたは手動で`source`を実行:
source ~/.bashrc # または.shellごとの設定ファイル名
Alpine LinuxなどのMinGW系環境では、コンパイルに必要な開発パッケージ(bash、curl、make、gccなど)を事前にインストールする必要があります。
主なコマンドと活用例
バージョンのインストールと切り替え
nvm install 18 # 最新のv18.x系をインストール
nvm install 16.20.2 # 指定バージョンをインストール
nvm install --lts # 最新LTS版をインストール
nvm use 18 # v18系の最新版を現在のセッションで使用
nvm run 16.20.2 app.js # 指定バージョンでスクリプト実行
特殊エイリアスの利用
node:最新のstable版iojs:最新のio.js版lts/*:最新LTS版lts/argon:特定LTSライン(例:argon)の最新版system:システム既存Node.jsを使用
.nvmrcによるプロジェクト単位のバージョン指定
プロジェクトルートに`.nvmrc`ファイルを作成し、 want使用的バージョンを記述:
echo '18.20' > .nvmrc # v18.20.x系を指定
echo 'lts/*' > .nvmrc # 最新LTS版を指定
カレントディレクトリでnvm useを実行すると、自動的に指定バージョンに切り替わります。サブディレクトリでも上位ディレクトリの設定を継承します。
グローバルパッキーじの移行管理
バージョン更新時に以前のグローバルインストール済npmパッケージを新しいバージョンに再インストールする場合:
nvm install 18 --reinstall-packages-from=16
npm自体も最新版に更新したい場合は--latest-npmフラグを追加:
nvm install 18 --reinstall-packages-from=16 --latest-npm
カスタム設定と高度オプション
- インストール時に初期パッケージを一括インストール:
$NVM_DIR/default-packagesにパッケージ名を1行ずつ記述 - Node.jsバイナリのミラーサイトを指定:
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node - 進捗バーを非表示:
nvm install 18 --no-progress - ローカルキャッシュクリア:
nvm cache clear
シェル統合の高度な設定
Bashでの自動切り替え設定例
cdnvm(){
command cd "$@" || return $?
nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')
if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version
default_version=$(nvm version default)
if [[ $default_version == "N/A" ]]; then
nvm alias default node
default_version=$(nvm version default)
fi
[[ $(nvm current) != "$default_version" ]] && nvm use default
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then
declare nvm_version
nvm_version=$(cat "$nvm_path/.nvmrc")
locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')
if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then
nvm install "$nvm_version"
elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then
nvm use "$nvm_version"
fi
fi
}
alias cd='cdnvm'
Zshでの統合例
autoload -Uz add-zsh-hook
load-nvmrc() {
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local 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)" ]; then
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
環境変数とカスタマイズ
NVM_DIR:NVM本体のインストールディレクトリ(デフォルト:~/.nvm)NVM_BIN:実行バイナリ格納パスNVM_NODEJS_ORG_MIRROR:Node.jsバイナリのミラーURLNVM_IOJS_ORG_MIRROR:io.jsバイナリのミラーサイトURLNVM_SYMLINK_CURRENT:"current" symlinkを有効化(IDEとの連携向け)NVM_COLORS:表示カラーコードカスタマイズ
カラーコードは5文字で指定(例:cmgRY):
r/R:赤/明るい赤 | g/G:緑/明るい緑 | b/B:青/明るい青 | c/C:シアン/明るいシアン | m/M:マゼンタ/明るいマゼンタ | y/Y:黄/明るい黄 | k/K:黒/明るい黒 | e/W:明るいグレー/白
アンインストール方法
単にNVM関連ディレクトリを削除し、設定ファイルから関連行を除去するのみ:
rm -rf "$NVM_DIR"
# .bashrc等から以下の行を削除
export NVM_DIR="..."
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
Mac M1チップ搭載機への対応
v15.3以降のNode.jsでarm64 Architectureが正式サポートされ、v16から公式ARM64バイナリが利用可能になりました。それ以前のバージョンを使用する場合、Rosetta 2経由でx86_64アーキテクチャ向けにコンパイルすることが推奨されます:
softwareupdate --install-rosettaでRosettaをインストールarch -x86_64 zshでx86_64 Shellを起動source $NVM_DIR/nvm.shでNVMを読み込みnvm install v14.21.3 --shared-zlibでNode.jsをインストール
--shared-zlibフラグは、macOSのClangコンパイラ互換性問題を回避するため重要です。
その他の注意事項
- Homebrewでnvmをインストールした場合は非推奨であり、手動で再インストールすることを推奨
- Windows環境のWSL2ではDNS解決問題が発生することがあり、
/etc/resolv.confを手動で固定することが解決策となる場合あり - Fish Shellは公式サポート対象外。代替ツール(bass、fnmなど)の利用を推奨
npm -gでグローバルインストールする際はsudo不要(NVM利用時)