nvm — 複数バージョンのNode.jsを簡単に切り替えるシェルスクリプト
nvm-sh/nvm
★ 96,021 ・ Shell ・ MIT
概要
nvm(Node Version Manager)は、同一マシン上で複数のNode.jsバージョンをインストールし、用途に応じて素早く切り替えるためのPOSIX準拠シェルスクリプトです。プロジェクトごとに要求されるNode.jsのバージョンが異なる場合でも、システム全体の設定を変更することなく、コマンド1つで対象バージョンを切り替えられます。
本ツールはユーザーごと(per-user)にインストールされ、シェルセッションごと(per-shell)にバージョンが適用される設計になっています。そのため、異なるバージョンのNode.jsを必要とする複数の開発プロジェクトを並行して進める開発者や、CI/CD環境・Docker環境で特定バージョンのNode.jsを手軽に扱いたいエンジニアに向いています。
主な特徴
- 複数バージョンの簡易インストールと切り替え:
nvm installやnvm useなどのコマンドを実行するだけで、指定したメジャーバージョンやマイナーバージョンのNode.jsを迅速にダウンロードして有効化できます。 - POSIX準拠シェルへの広範な対応: bash、zsh、dash、ksh、shといった各種POSIX準拠シェルで動作し、Unix系OS、macOS、Windows WSL環境で利用可能です。
- プロジェクト単位のバージョン指定(.nvmrc): ディレクトリ内に
.nvmrcファイルを配置することで、プロジェクトで要求されるNode.jsのバージョンを明示し、シェル統合機能を通じて自動または手動で切り替えられます。 - 柔軟な配置とXDG仕様のサポート: デフォルトでは
~/.nvmに配置されますが、環境変数$XDG_CONFIG_HOMEが設定されている場合はそのパスに従った構成に対応します。 - DockerおよびCI/CD環境への対応: 非対話型シェルでの動作を想定した環境変数設定やエントリーポイントの工夫により、コンテナ環境内でのインストールやビルドにも利用できます。
使い方
インストールとシェル設定
インストールまたはアップデートは、公式のインストールスクリプトを curl または wget 経由で取得して実行します。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | bash
または
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | bash
スクリプトを実行すると、リポジトリがローカルにクローンされ、シェルのプロファイルファイル(~/.bashrc、~/.zshrc、~/.bash_profile、~/.profile のいずれか)に以下の設定が自動で追記されます。
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
設定を即時反映させるには、現在の端末を再起動するか、対応するプロファイルファイルを source コマンドで再読み込みします。
基本的な利用手順
インストール後は、nvm install コマンドで必要なバージョンを導入し、nvm use で使用するバージョンを切り替えます。
$ nvm install 24
Now using node v24.14.0 (npm v11.9.0)
$ node -v
v24.14.0
$ nvm use 22
Now using node v22.22.1 (npm v10.9.4)
$ node -v
v22.22.1
$ nvm use 20
Now using node v20.20.1 (npm v10.8.2)
$ node -v
v20.20.1
Dockerでの利用例
CI/CDやDocker環境などの非対話型シェルで nvm を実行する場合、通常のプロファイルファイルが読み込まれないため、BASH_ENV を設定するか、エントリーポイントでスクリプトを読み込む設計が紹介されています。
READMEに掲載されているCI/CDジョブ向けのDockerfile例は以下の通りです。
FROM ubuntu:latest
ARG NODE_VERSION=20
# install curl
RUN apt update && apt install curl -y
# install nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.41.0/install.sh | bash
# set env
ENV NVM_DIR="${HOME:-/root}/.nvm"
# install node
RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION"
# set ENTRYPOINT for reloading nvm-environment
ENTRYPOINT ["bash", "-c", "source $NVM_DIR/nvm.sh && exec \"$@\"", "--"]
# set cmd to bash
CMD ["/bin/bash"]
技術的なポイント
nvm はコンパイル済みのバイナリ実行可能ファイルではなく、POSIX準拠のシェル関数・シェルスクリプト群として実装されています。一般的なパッケージマネージャーのようにシステム全体の /usr/bin や /usr/local/bin を書き換えるのではなく、現在のシェルセッションの環境変数 PATH を動的に操作して対象のNode.jsバイナリへ優先的にルーティングする構造を採用しています。
この設計により、管理者権限(sudo)を要求されることなくユーザー権限のみでインストールやバージョン変更が完了します。また、シェルごとに独立したバージョンを保持できるため、1つの端末ウィンドウで Node.js v20 を動かしながら、別の端末ウィンドウで Node.js v22 を動かすといった並行作業が可能になっています。
インストーラー自身も柔軟に作られており、環境に存在するツール(git、curl、wget)を自動検出し、利用可能な手段を用いてファイルを取得します。プロファイルファイルの自動編集を避けたい場合には PROFILE=/dev/null を指定してインストーラーを呼び出すことができるなど、自動化環境やdotfiles管理への配慮もなされています。
注意点
- ライセンス: MITライセンスの下で公開されています。
- 動作環境の制限: Unix、macOS、およびWindows WSLを対象としています。Windowsネイティブ環境(cmd.exeやPowerShell)で直接動作する設計ではないため、Windows上で利用する場合はWSLを介する必要があります。
- シェル設定の反映: インストールスクリプト実行直後に
command -v nvmが反応しない場合は、シェルプロファイル(~/.bashrcや~/.zshrcなど)の手動リロード(source)またはターミナルの再起動が必要です。 - コンテナ環境での挙動: コンテナ内で非対話型シェルとしてコマンドを実行する際、初期化スクリプトが自動ロードされない場合があります。前述の通り
BASH_ENVの利用やsource $NVM_DIR/nvm.shを明示的に呼び出す構成にする必要があります。
まとめ
nvm は、Node.jsの複数バージョン管理をユーザー権限かつシェル単位で実現する定番のPOSIX準拠スクリプトです。簡単なコマンド操作で環境の切り替えが行えるため、複数案件の掛け持ちや新旧バージョンの動作検証を円滑に進めることができます。





