nvm:POSIX シェルで Node.js の版を切り替える
nvm は、プロジェクトごとのバージョン ファイルとエイリアスを使用して、POSIX シェルから Node.js バージョンをインストールし、切り替えます。
ひと目でわかる
- これは何?
- nvm-sh/nvm のインストール、Node.js 版、`.nvmrc`、alias、POSIX シェルにおける切り替え条件を整理します。
- 誰に向いている?
- 複数の Node.js 版をプロジェクト単位で切り替え、`.nvmrc` や alias で開発環境をそろえたい POSIX シェル利用者に向きます。Windows のネイティブシェルを同じ手順で扱いたい人や、チーム全員の CI 環境まで自動統一されると考える人には向きません。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 5 日前です。
- 何の言語で書かれている?
- 主に Shell です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
nvm が管理する Node.js の切り替え
nvm は Node Version Manager であり、POSIX 互換の bash スクリプトとして配布されています。README は、ユーザー単位でインストールしシェル単位で呼び出す設計だと説明し、対応シェルとして sh、dash、ksh、zsh、bash を挙げ、プラットフォームは Unix、macOS、Windows WSL です。nvm はシェル関数であって実行可能バイナリではないため、README では command -v nvm で確認するよう求めており、which nvm は機能しないと書かれています。リポジトリメタデータの言語は Shell です。README には GUI やバックグラウンドサービスの記述はありません。
POSIX シェルへ読み込む入口
README の主なインストール方法は、ターミナルでインストールスクリプトを実行することです: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash、または wget を使った同等のコマンド。スクリプトは nvm リポジトリを ~/.nvm にクローンし、$XDG_CONFIG_HOME が設定されていればそこに置き、~/.bashrc や ~/.zshrc などのプロファイルファイルに source 行を追加しようとします。NVM_DIR、PROFILE、NVM_SOURCE、NODE_VERSION でインストール先や動作を変更できます。README は git を使うインストールも記載しており、git v1.7.10 以上が必要です。手動アップグレードは git fetch と checkout を使います。Homebrew によるインストールはサポートされていないと明記されています。
install、use、alias の役割
nvm install node は最新版の Node をインストールし、nvm install 14.7.0 は指定したバージョンをインストールします。最初にインストールしたバージョンがデフォルトになり、nvm alias default で変更できます。nvm alias my_alias v14.4.0 で別名を設定します。nvm ls はインストール済みバージョン、nvm ls-remote は取得可能なバージョンを表示します。nvm use は現在のシェルを切り替え、nvm run は指定バージョンでコマンドを実行し、nvm exec はサブシェルで実行します。README には特別な別名 node、iojs、stable、unstable、current に加え、lts/* や lts/argon といった LTS 表記が説明されています。プロジェクトディレクトリの .nvmrc ファイルは、nvm use、nvm install、nvm which に対してバージョンを指定でき、.nvmrc が見つからない場合はステータス 127 で終了します。グローバルパッケージの移行は、インストール時に --reinstall-packages-from を使うか、インストール済みバージョン間で nvm reinstall-packages を使います。
`.nvmrc` でプロジェクト版を選ぶ
nvm は NVM_DIR、NVM_BIN、NVM_INC、NVM_CD_FLAGS、NVM_RC_VERSION を公開し、バージョン切り替え時に PATH、および存在すれば MANPATH と NODE_PATH を変更します。インストール時には NVM_NODEJS_ORG_MIRROR と NVM_IOJS_ORG_MIRROR でバイナリミラーを指定でき、NVM_AUTH_HEADER で Authorization ヘッダーを送信し、NVM_SYMLINK_CURRENT で current シンボリックリンクを作成できます。インストールロックは NVM_INSTALL_LOCK_TIMEOUT と NVM_INSTALL_LOCK_STALE で制御され、NVM_NO_SOURCE_FALLBACK はバイナリダウンロード失敗時にソースコンパイルへフォールバックせず中止します。デフォルトのグローバルパッケージは $NVM_DIR/default-packages に記述します。カスタムカラーは nvm set-colors で設定し、NVM_COLORS で永続化できます。README はこれらを文書化された変数として挙げていますが、完全な一覧とは述べていません。
npm とグローバルパッケージの境界
README はサポートしない範囲を明確に書いています。fish shell はサポートされておらず、コミュニティ製の代替が列挙されています。ネイティブ Windows はサポートされておらず、WSL、Git Bash(MSYS)、Cygwin 経由で動作するはずです。Alpine Linux では、Alpine が musl を使うためプリコンパイル済み Node バイナリは互換性がなく、nvm install -s でソースからコンパイルします。README は Alpine の各バージョンでビルドできる Node の上限も列挙しています。Apple Silicon Mac では Node v16.0 で arm64 の完全サポートが追加され、それより古いバージョンでは Rosetta 2 の下で x86_64 向けにコンパイルする方法が紹介されています。既知の衝突には ~/.npmrc の prefix 設定、$NPM_CONFIG_PREFIX と $PREFIX 環境変数、シェルの set -e があります。これらは文書化された問題であって、推測ではありません。
新しいシェルと CI で再現する
テストスイートは Urchin で書かれています。リポジトリのルートで npm install を実行して依存関係を入れ、npm run test/fast と npm run test/slow で高速・低速テストをそれぞれ実行し、npm test で全部を実行します。README はテスト実行中に nvm を使わないよう注意しています。開発用 Docker イメージは docker build -t nvm-dev . で作成できます。手動アンインストールは nvm unload を実行し、$NVM_DIR を削除し、シェルプロファイルから source 行を消します。プロジェクトは MIT ライセンスで、著作権は Tim Caswell 2010 と Jordan Harband 2014 に帰属します。ライセンスは使用、複製、変更、結合、公開、配布、再許諾、販売を許可し、ソフトウェアは無保証で提供されます。README にはセキュリティ保証や正式なサポート方針の記述はありません。
nvm は POSIX シェルを一つ選び、README のインストール断片を実行した後に `command -v nvm` と `nvm --version` を確認します。二つの Node.js 版を `nvm install` し、`nvm use`、`nvm alias`、プロジェクト直下の `.nvmrc`、新しいシェルの起動で `node --version` がどう変わるかを記録します。npm のグローバルパッケージは版ごとに分かれ得るため、切り替え後の `npm prefix` と実行ファイルの場所も照合し、CI のシェル初期化は別に試します。
nvm は bash と zsh の読み込み、対話シェル、login shell、非対話シェルを分けて command -v nvm を確認します。二つの Node.js 版で node、npm、which node、npm prefix を記録し、nvm install、nvm use、alias default の前後を比較します。プロジェクトの .nvmrc は LTS 名、具体的な版、未対応値を分け、移動だけで自動切り替えされる条件をシェル設定と区別します。CI の runner が nvm を読み込む行、Node キャッシュ、グローバル npm パッケージも別に試します。native addon と package.json の scripts がどの実行ファイルを使うかを確認し、Windows の別実装をこの結果へ混ぜません。
編集部の結論
複数の Node.js 版をプロジェクト単位で切り替え、`.nvmrc` や alias で開発環境をそろえたい POSIX シェル利用者に向きます。Windows のネイティブシェルを同じ手順で扱いたい人や、チーム全員の CI 環境まで自動統一されると考える人には向きません。先に対象シェルへ nvm を読み込み、`nvm install`、`nvm use`、`.nvmrc`、`nvm alias default` の結果と `node --version` を新しいシェルでも確認してください。
コミュニティノート