はじめに
「このプロジェクト、Node.js 18じゃないと動かないんだよね」
仕事で複数のプロジェクトを掛け持ちしていると、こういう状況によく遭遇します。あるプロジェクトはNode.js 20で動かしていて、別のプロジェクトはレガシーな16系じゃないとビルドが通らない。Node.jsを直接インストールしていると、バージョンを切り替えるたびにアンインストール→再インストールという地獄を見ることになります。
正直なところ、この作業で何度も時間を溶かしました。
そんな悩みを一発で解決してくれるのがnvm(Node Version Manager)です。
GitHubスターは90,000を超えていて、16年の歴史を持つ定番中の定番ツール。Node.jsを使う開発者なら、入れておいて損はないですね。
nvmとは
nvmは「Node Version Manager」の略で、複数のNode.jsバージョンをインストール・管理・切り替えできるツールです。
POSIXに準拠したシェルスクリプトとして実装されていて、bash、zsh、ksh、dashといった主要なシェルで動作します。Unix、macOS、Windows WSLに対応。
特徴的なのは、システム全体ではなくユーザーごとにインストールされること。sudoも不要だし、他のユーザーの環境に影響を与えない。これ、意外と重要なんですよね。チームで開発していて「誰かがNode.jsのバージョン変えたせいで動かなくなった」みたいなトラブルを避けられます。
特徴・メリット
バージョン切り替えが一瞬
これが一番の魅力。コマンド一発でNode.jsのバージョンを切り替えられます。
nvm use 18
これだけ。今まで時間かけてやっていた作業が、文字通り1秒で終わる。時短効果がえぐい。
複数バージョンの並行運用
Node.js 16、18、20、22...好きなだけインストールして、プロジェクトに応じて使い分けられます。ディスク容量は多少食いますが、バージョン違いによるトラブルに悩まされるよりずっとマシ。
.nvmrcでチーム共有
プロジェクトルートに.nvmrcファイルを置いておけば、チーム全員が同じバージョンを使えます。
# .nvmrcの中身
20.10.0
これがあれば「え、Node.jsのバージョン何使えばいいの?」という質問がなくなります。新メンバーが入ってきたときも、nvm useするだけでOK。
LTSバージョンを簡単インストール
バージョン番号を覚えていなくても大丈夫。
nvm install --lts
これで最新のLTS(長期サポート)バージョンがインストールされます。個人的には、特に理由がなければLTSを使うのがおすすめ。安定性が違います。
システムを汚さない
ホームディレクトリの~/.nvm配下にすべてがインストールされるので、システム全体に影響しません。アンインストールも~/.nvmを消すだけ。クリーンな環境を維持できます。
インストール方法
インストールは公式のスクリプトを実行するだけです。
curlを使う場合
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
wgetを使う場合
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
スクリプトが実行されると、~/.nvmにインストールされて、シェルの設定ファイル(.bashrcや.zshrcなど)に必要な設定が追加されます。
インストール後、ターミナルを再起動するか、以下を実行:
source ~/.bashrc # bashの場合
source ~/.zshrc # zshの場合
これでnvmが使えるようになります。
確認
nvm --version
バージョン番号が表示されればOK。
基本的な使い方
Node.jsのインストール
# 最新のLTSをインストール
nvm install --lts
# 特定バージョンをインストール
nvm install 20.10.0
# メジャーバージョン指定(最新のマイナーがインストールされる)
nvm install 18
バージョンの切り替え
# 特定バージョンに切り替え
nvm use 20
# LTSに切り替え
nvm use --lts
# .nvmrcに書かれたバージョンに切り替え
nvm use
インストール済みバージョンの一覧
nvm ls
こんな感じで表示されます:
v18.19.0
-> v20.10.0
v22.0.0
default -> 20 (-> v20.10.0)
矢印がついているのが現在使用中のバージョン。
リモートで利用可能なバージョン一覧
nvm ls-remote
インストール可能なすべてのバージョンが表示されます。量が多いので、grepと組み合わせると便利:
nvm ls-remote | grep -i lts
デフォルトバージョンの設定
nvm alias default 20
新しいターミナルを開いたときに、自動でこのバージョンが使われます。
特定バージョンでコマンド実行
切り替えずに、特定バージョンでコマンドだけ実行したいときに便利:
nvm exec 18 node app.js
nvm run 18 app.js
実践的なユースケース
プロジェクトごとのバージョン固定
チーム開発では、これが一番重要。プロジェクトルートに.nvmrcを作成:
echo "20.10.0" > .nvmrc
メンバーはプロジェクトディレクトリに入ったらnvm useするだけ。バージョン違いによる「俺の環境では動くんだけど」問題を防げます。
自動切り替えの設定
ディレクトリ移動時に自動で.nvmrcを読み込む設定を追加すると、さらに便利。
.zshrcに以下を追加:
autoload -U add-zsh-hook
load-nvmrc() {
local node_version="$(nvm version)"
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" != "$node_version" ]; then
nvm use
fi
elif [ "$node_version" != "$(nvm version default)" ]; then
nvm use default
fi
}
add-zsh-hook chdir load-nvmrc
load-nvmrc
これでプロジェクトディレクトリにcdするだけで、自動的にバージョンが切り替わります。QOL爆上がり。
古いプロジェクトのメンテナンス
レガシーなプロジェクトを触るとき、「Node.js 14じゃないと動かない」みたいなことがあります。
nvm install 14
nvm use 14
npm install
npm run build
メインの開発環境はNode.js 20のまま、一時的に14に切り替えて作業できます。作業が終わったらnvm use 20で戻すだけ。
CI/CDでの利用
GitHub Actionsなどでも、nvmを使ってバージョンを固定できます。.nvmrcがあれば、ローカルとCIで同じバージョンを使える安心感。
注意点
Fishシェルは非対応
nvmはPOSIX準拠のシェルスクリプトなので、Fishシェルでは動きません。Fishを使っている場合は、代替ツールのnvm.fishやfnmを検討してください。
Windowsネイティブは非対応
WSL(Windows Subsystem for Linux)なら問題なく動きますが、純粋なWindows環境では動作しません。Windowsネイティブで使いたい場合はnvm-windowsという別プロジェクトがあります。
シェルごとにセットアップが必要
bashとzshを併用している場合、それぞれの設定ファイルにnvmの初期化スクリプトを追加する必要があります。インストールスクリプトが自動でやってくれることが多いですが、うまくいかない場合は手動で追加。
まとめ
nvmは「Node.jsを使うなら入れておくべき」ツールです。
- コマンド一発でバージョン切り替え
- 複数バージョンの並行運用が可能
.nvmrcでチーム全員のバージョンを統一- システムを汚さずクリーンに管理
16年の歴史と9万超のGitHubスター。これだけ支持されているのには理由があります。
30代になって思うのは、環境構築でハマる時間がもったいないということ。nvmを入れておけば、Node.jsのバージョン問題で消耗することはなくなります。
まだ使っていないなら、今すぐインストールしてみてください。最初の設定は5分で終わりますし、その後の開発体験が確実に良くなります。