はじめに
Node.jsのバージョン管理には苦労した経験がある方も多いのではないでしょうか。私もその一人です。
nodenv
を使用してNode.jsのバージョンを切り替えようと nodenv local v22.15.0
を実行したのに、バージョンが切り替わらない...調べてみると、なんとnodebrew
というツールもインストールされていて、PATHの設定でnodenvより先にnodebrewが読み込まれていたのです。
この問題を解決した後、「もっと良いNode.jsバージョン管理ツールはないのか?」と調査したところ、nvmというツールがGitHubで圧倒的なスター数(84.3k)を獲得していることを発見しました。nodenvの2.3kと比べると、その差は歴然です。
そこで今回は、Node.jsバージョン管理ツールの王者(仮)「nvm (Node Version Manager)」について詳しく解説します。
nvmとは?
nvmは、Node Version Managerの略で、複数のNode.jsバージョンを簡単に管理するためのコマンドラインツールです。GitHubでは84.3k以上のスターを獲得しており、Node.jsバージョン管理ツールの中では圧倒的な人気を誇ります。
nvmの主な特徴
- POSIXに準拠したシェル(bash、zsh、kshなど)で動作
- Unix、macOS、Windows WSLで利用可能
- シンプルなコマンドで複数のNode.jsバージョンを切り替え可能
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
# Homebrewを使う場合(推奨されていないようです)
brew install nvm
このスクリプトは、nvmリポジトリを~/.nvm
にクローンし、適切なプロファイルファイル(~/.bashrc
、~/.bash_profile
、~/.zshrc
、または~/.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
インストールの確認
インストールが成功したかどうかを確認するには
command -v nvm
このコマンドがnvm
を出力すれば、インストールは成功しています。
nvmの基本的な使い方
Node.jsのインストール
# 最新版のNode.jsをインストール
nvm install node
# 特定のバージョンをインストール
nvm install 14.17.0
# LTS版をインストール
nvm install --lts
バージョンの切り替え
# 特定のバージョンに切り替え
nvm use 14.17.0
# 最新版に切り替え
nvm use node
# LTS版に切り替え
nvm use --lts
インストール済みバージョンの確認
nvm ls
インストール可能なバージョンの確認
nvm ls-remote
デフォルトバージョンの設定
nvm alias default 14.17.0
プロジェクト固有のNode.jsバージョン
プロジェクトごとに異なるNode.jsバージョンを指定したい場合は、.nvmrc
ファイルを使用します。
# プロジェクトのルートディレクトリに.nvmrcファイルを作成
echo "14.17.0" > .nvmrc
# または最新のLTS版を使用する場合
echo "lts/*" > .nvmrc
そして、プロジェクトディレクトリで以下のコマンドを実行するだけです
nvm use
nvmは.nvmrc
ファイルを自動的に検出し、指定されたバージョンに切り替えます。
ディレクトリによる自動切り替え
ディレクトリを移動するたびに自動的に適切なNode.jsバージョンに切り替えるように設定することもできます。
Bashの場合
# ~/.bashrcに追加
cdnvm() {
command cd "$@" || return $?
nvm_path="$(nvm_find_up .nvmrc | command tr -d '\n')"
if [[ -s "$nvm_path/.nvmrc" ]]; then
nvm use
elif [[ $(nvm current) != $(nvm version default) ]]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
alias cd='cdnvm'
Zshの場合
# ~/.zshrcに追加
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
nvm use
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
nvmの高度な使い方
グローバルパッケージの移行
新しいNode.jsバージョンをインストールする際に、以前のバージョンからnpmパッケージを移行できます
nvm install --reinstall-packages-from=14.17.0 16.3.0
バイナリのミラーを使用する
デフォルトのNodeソースからダウンロードできない場合、ミラーを指定できます:
export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
nvm install node
カスタムカラーの設定
バージョン情報の表示に使用される色をカスタマイズできます
nvm set-colors rgBcm
nvmのメリット
-
圧倒的な人気と安定性:長年の開発により非常に安定しており、多くの問題が修正されています。
-
シンプルな使用法:直感的なコマンドで簡単に使用できます。
-
強力なバージョン管理:.nvmrcファイルによるプロジェクト固有の設定が可能です。
-
LTSサポート:LTSバージョンを簡単にインストールできます。
-
コミュニティサポート:大規模なユーザーベースによる豊富な情報と問題解決のリソースがあります。
注意点
-
Windowsサポート:Windows WSLでは動作しますが、ネイティブWindowsシェルはサポートしていません(代わりにnvm-windowsを使用)。
-
Fishシェル:Fishシェルには直接対応していません(代替ソリューションあり)。
-
メモリ使用量:複数のNode.jsバージョンをインストールすると、ディスク容量を消費します。
まとめ
nvmは、Node.js開発者にとって必須のツールと言えるでしょう。複数のプロジェクトで異なるNode.jsバージョンを使用する必要がある場合、nvmを使えば簡単に切り替えることができます。GitHubで84.3k以上のスターを獲得している人気の理由がよくわかります。
また、プロジェクトレベルで.nvmrc
ファイルを使用することで、チームメンバー全員が同じNode.jsバージョンを使用することが保証され、「動作しない」という問題を未然に防ぐことができます。