Linux & macOSで複数バージョンのNode.jsを管理するツール:NVM完全ガイド

導入と基本概念

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バイナリのミラーURL
  • NVM_IOJS_ORG_MIRROR:io.jsバイナリのミラーサイトURL
  • NVM_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アーキテクチャ向けにコンパイルすることが推奨されます:

  1. softwareupdate --install-rosettaでRosettaをインストール
  2. arch -x86_64 zshでx86_64 Shellを起動
  3. source $NVM_DIR/nvm.shでNVMを読み込み
  4. 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利用時)

タグ: Node.js nvm 版本管理 macOS linux

5月19日 04:11 投稿