これで迷わない!nvmの導入から活用方法まで
Node.jsを使った開発は、現代のWeb開発やバックエンド開発において不可欠なスキルとなりつつあります。しかし、Node.jsには頻繁に新しいバージョンがリリースされ、プロジェクトによっては特定の古いバージョンに依存していることも少なくありません。このような状況で、どのようにして複数のNode.jsバージョンを効率的に管理し、プロジェクトごとに最適な環境を構築すれば良いのでしょうか?
この記事では、そんな悩みを解決する強力なツール、「nvm (Node Version Manager)」について、その導入から基本的な使い方、さらに一歩進んだ活用方法までを、初心者の方でも迷わないように詳細かつ丁寧に解説していきます。約5000語にわたる本記事を読み終える頃には、あなたもNode.jsのバージョン管理に自信を持ち、より快適な開発環境を手に入れていることでしょう。
1. はじめに:なぜNode.jsのバージョン管理が必要なのか?
開発者であれば、一度は「このプロジェクトはNode.js v14で動くけど、別のプロジェクトはNode.js v16が必要だ」といった状況に遭遇したことがあるかもしれません。もし、システム全体にNode.jsが一つだけインストールされている場合、プロジェクトを切り替えるたびにNode.jsをアンインストールしてインストールし直す、という非常に手間のかかる作業が発生してしまいます。これは現実的ではありませんし、開発効率を著しく低下させます。
Node.jsのバージョン管理が必要な理由はいくつかあります。
- プロジェクトごとの依存関係: 多くのプロジェクトは、開発が開始された時点でのNode.jsバージョンや、特定のライブラリが依存するNode.jsバージョンに合わせて構築されます。新しいバージョンのNode.jsでは、古いライブラリが動かなくなったり、挙動が変わったりすることがあります。
- 新しい機能とセキュリティアップデート: Node.jsは活発に開発されており、新しいバージョンではパフォーマンスの向上、新機能の追加、そして重要なセキュリティ脆弱性の修正が行われます。最新の機能を利用したり、安全な環境を維持したりするためには、新しいバージョンを試したり、アップデートしたりする必要があります。
- 長期サポート版 (LTS) と最新版 (Current): Node.jsには長期サポート版 (LTS) と最新版 (Current) があります。LTS版は安定しており、長期間のサポートが提供されるため、本番環境での利用に適しています。一方、Current版は最新の機能が先行して取り込まれますが、サポート期間は短いです。プロジェクトの性質に応じて、これらのバージョンを使い分ける必要が出てきます。
- 複数のプロジェクトの同時進行: 複数のプロジェクトを並行して開発している場合、それぞれが異なるNode.jsバージョンを要求する可能性があります。一つのシステムでこれらの異なるバージョンを共存させる必要があります。
これらの課題を解決するために登場するのが、Node.jsのバージョン管理ツールです。その中でも特に広く使われているのが、今回ご紹介する「nvm」です。nvmを使うことで、複数のNode.jsバージョンを簡単にインストール、切り替え、管理できるようになり、前述のようなバージョンに関わる悩みを解消できます。
本記事では、nvmを初めて使う方でも安心して始められるように、導入方法から丁寧に解説し、さらに.nvmrcによるプロジェクトごとの自動切り替えやエイリアスの活用といった便利な機能まで網羅的に説明します。この記事を読んで、あなたのNode.js開発環境をより快適で効率的なものにしましょう。
2. nvmとは何か?他のツールとの比較
nvmは「Node Version Manager」の略称で、その名の通り、Node.jsのバージョンを管理するためのコマンドラインツールです。主にmacOSおよびLinux環境で利用されます(Windowsには非公式のポートが存在します)。
nvmを使うことで、以下のことが可能になります。
- 任意のNode.jsバージョンをインストールする。
- インストールされているNode.jsバージョンを一覧表示する。
- 使用するNode.jsバージョンを簡単に切り替える。
- デフォルトで使用するNode.jsバージョンを設定する。
- 特定のNode.jsバージョンに関連付けられたnpmパッケージを管理する。
nvm以外にもNode.jsのバージョン管理ツールはいくつか存在します。代表的なものとしては、以下のようなツールがあります。
- fnm (Fast Node Manager): Rustで書かれており、nvmよりも高速な動作を謳っています。クロスプラットフォーム対応も進んでいます。
- n (Node version manager): T.J. Holowaychuk氏によって開発されたツールで、npmを使ってインストールできます。シンプルさが特徴です。
これらのツールにもそれぞれ利点がありますが、nvmは歴史が長く、広く普及しているため、情報やコミュニティサポートが豊富です。多くの開発者がnvmを利用しているため、困ったときに解決策を見つけやすいというメリットがあります。特に、初めてNode.jsのバージョン管理ツールを使う方にとっては、nvmから始めるのが最も一般的なパスと言えるでしょう。
本記事では、このデファクトスタンダードとも言えるnvmに焦点を当てて解説を進めていきます。
3. nvmの導入方法
nvmを使い始めるためには、まずお使いのシステムにnvm自体をインストールする必要があります。インストール方法はOSによって若干異なりますが、基本的な流れは同じです。ここでは、macOS/Linux環境とWindows環境に分けて説明します。
注意点: nvmをインストールする前に、もしシステムにNode.jsがすでにインストールされている場合は、干渉を避けるために一度アンインストールしておくことを推奨します。ただし、必ずしも必須ではありません。nvmはシステムのNode.jsとは別の場所にバージョンをインストールし、PATHを切り替えることでバージョンを管理するため、競合しにくい設計になっています。しかし、予期せぬ問題を防ぐためにはクリーンな状態から始めるのが最も安全です。
3.1. macOS / Linux 環境へのインストール
macOSやLinux環境では、提供されているインストールスクリプトを使うのが最も簡単な方法です。このスクリプトはGitHubのnvmリポジトリで公開されています。
ステップ 1: インストールスクリプトの実行
ターミナルを開き、以下のコマンドを実行します。これは、curlまたはwgetを使ってスクリプトをダウンロードし、実行するコマンドです。どちらか一方を利用してください。
curlを使う場合:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
wgetを使う場合:
bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
重要: 上記のバージョン番号 v0.39.7 は記事執筆時点での最新版です。インストールする際は、nvmの公式GitHubリポジトリ(https://github.com/nvm-sh/nvm)のREADMEを確認し、最新のインストールコマンドを使用することを強く推奨します。READMEに記載されているコマンドが常に最新です。
このスクリプトは、nvmをユーザーのホームディレクトリ内の.nvmという隠しディレクトリにクローンし、Node.jsバージョンをインストールするためのディレクトリ構造を作成します。
スクリプトの安全性について: 提供されているインストールスクリプトは、GitHubのリポジトリにある公開されたスクリプトです。スクリプトの内容を確認してから実行したい場合は、| bash の部分を除外して実行し、ダウンロードしたスクリプトの内容を確認してから手動で実行することも可能です。
“`bash
ダウンロードのみ
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh > install.sh
スクリプトの内容を確認
cat install.sh
手動で実行
bash install.sh
“`
ステップ 2: シェルの設定ファイルへの追記
インストールスクリプトは、nvmを起動時に自動的に読み込むための設定を、お使いのシェルの設定ファイルに追記します。一般的なシェル(Bash, Zsh, Fishなど)に対応しており、以下のいずれかのファイルに設定が追記されることが多いです。
~/.bashrc(Bashを使用している場合)~/.zshrc(Zshを使用している場合)~/.profileまたは~/.bash_profile(Bashでログインシェルとして起動している場合など)
Fish Shellを使用している場合は、.config/fish/conf.d/nvm.fish など、Fish特有の設定ファイルに追記される場合があります。
追記される設定内容は概ね以下のようになります。これは、NVM_DIR 環境変数を設定し、そのディレクトリ内の nvm.sh スクリプトを読み込むことでnvmコマンドを使えるようにするための設定です。
bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
ステップ 3: 設定ファイルのリロードまたはターミナルの再起動
インストールスクリプトによって設定ファイルが編集されましたが、現在開いているターミナルセッションにはその変更がまだ反映されていません。変更を反映させるには、以下のいずれかの方法をとります。
- ターミナルを閉じて開き直す: これが最も確実な方法です。新しいターミナルセッションでは、設定ファイルが読み込まれ、nvmが利用可能になります。
-
設定ファイルを現在のセッションに読み込む: ターミナルを閉じずに設定を反映させたい場合は、
sourceコマンドを使います。例えば、Bashで.bashrcに追記された場合は以下のように実行します。“`bash
source ~/.bashrcまたは
. ~/.bashrc
``.zshrc` を、使用しているシェルに合わせてファイルを指定してください。
Zshの場合は
ステップ 4: インストールの確認
新しいターミナルセッションを開くか、設定ファイルをリロードした後、以下のコマンドを実行してnvmが正しくインストールされているか確認します。
bash
nvm --version
nvmのバージョン番号(例: 0.39.7)が表示されれば、インストールは成功です。もし nvm: command not found のようなエラーが表示される場合は、シェルの設定ファイルが正しく読み込まれていない、または設定内容に問題がある可能性があります。セクション7のトラブルシューティングを参照してください。
これでmacOS/Linux環境へのnvmのインストールは完了です。次はNode.jsのバージョンをインストールして使ってみましょう。
3.2. Windows 環境へのインストール (nvm-windows)
Windows環境でnvmを使用する場合、macOS/Linux版のnvmとは異なる、Windowsに特化した別のツールを利用するのが一般的です。「nvm-windows」というプロジェクトが最も広く使われています。これはCorey Butler氏によって開発されており、macOS/Linux版のnvmとはコマンドや挙動に若干の違いがあります。
注意点: ここで説明する「nvm-windows」は、macOS/Linux版の公式nvmプロジェクト(nvm-sh/nvm)とは別の独立したプロジェクトです。コマンドの互換性はありますが、内部実装や一部機能が異なります。
ステップ 1: nvm-windowsのリリースページにアクセス
nvm-windowsの公式GitHubリポジトリのReleasesページにアクセスします。
https://github.com/coreybutler/nvm-windows/releases
ステップ 2: インストーラーのダウンロード
最新のリリースのページにある「Assets」セクションを展開し、nvm-setup.zip というファイルをダウンロードします。
ステップ 3: インストーラーの実行
ダウンロードした nvm-setup.zip ファイルを解凍し、中にある nvm-setup.exe を実行します。
インストーラーの指示に従ってインストールを進めます。
- インストール先のディレクトリを指定します。通常は
C:\Program Files\nvmのようなパスが提案されます。 - Node.jsのシンボリックリンクを作成するディレクトリを指定します。デフォルトは
C:\Program Files\nodejsのようなパスです。このディレクトリは、使用するNode.jsバージョンへのシンボリックリンクとして機能します。
重要: インストール時にNode.jsのシンボリックリンクを作成するディレクトリを指定しますが、このディレクトリに既存のNode.jsインストールが存在しないことを確認してください。もし存在する場合、衝突を避けるために事前にアンインストールしておくか、別のディレクトリを指定してください。
インストーラーは、システムのPATH環境変数にnvmのディレクトリと、Node.jsのシンボリックリンクディレクトリを追加します。これにより、コマンドプロンプトやPowerShellから nvm コマンドや、アクティブなNode.jsバージョンに関連付けられた node および npm コマンドが実行できるようになります。
ステップ 4: インストールの確認
インストーラーが完了したら、新しいコマンドプロンプトまたはPowerShellを開きます。既存のウィンドウではPATHが更新されていない可能性があるため、必ず新しいウィンドウを開いてください。
以下のコマンドを実行して、nvm-windowsが正しくインストールされているか確認します。
cmd
nvm version
または
powershell
nvm version
nvm-windowsのバージョン番号が表示されれば、インストールは成功です。もし nvm コマンドが見つからない場合は、システムの環境変数 PATH にnvmおよびNode.jsのシンボリックリンクディレクトリが正しく追加されているか確認し、必要であれば手動で追加してください。
これでWindows環境へのnvm-windowsのインストールは完了です。macOS/Linux版とはコマンドが若干異なりますが、基本的な考え方は同じです。
4. nvmの基本的な使い方
nvmのインストールが完了したら、いよいよNode.jsのバージョンを管理してみましょう。ここでは、Node.jsのインストール、バージョンの切り替え、確認といった基本的な使い方を解説します。
以降のコマンド例はmacOS/Linux版nvmを前提としています。Windows版nvm-windowsを使用している場合は、一部コマンドが異なる可能性がある点にご注意ください(主要なコマンドは互換性がありますが、詳細はnvm-windowsのドキュメントを参照してください)。
4.1. インストール可能なNode.jsバージョンの確認
nvmを使ってインストールできるNode.jsのバージョンを確認するには、list-remote コマンドを使います。
bash
nvm list-remote
このコマンドを実行すると、利用可能なすべてのNode.jsバージョンのリストが表示されます。以下のような出力が得られます。
... (古いバージョン)
v10.24.1 (LTS: Erbium)
v11.0.0
v11.1.0
...
v14.0.0
v14.21.3 (LTS: Fermium)
v15.0.0
...
v16.0.0
v16.20.2 (LTS: Gallium)
v17.0.0
...
v18.0.0
v18.19.1 (LTS: Iron)
v19.0.0
...
v20.0.0
v20.11.0 (Latest LTS: Herd)
v21.0.0
v21.6.2 (Latest Current)
このリストには、特定のバージョン番号 (v14.21.3など) と、LTS版の場合はそのリリースコードネーム (Fermiumなど) やステータス (LTS, Latest LTS, Latest Current) が表示されます。どのバージョンをインストールすべきか迷う場合は、Latest LTS と表示されているバージョンを選ぶのが一般的です。
4.2. Node.jsのインストール
特定のNode.jsバージョンをインストールするには、install コマンドを使います。バージョンを指定する方法はいくつかあります。
特定のバージョン番号を指定してインストール:
bash
nvm install 18.19.1
またはバージョン番号の頭にvを付けても同じです。
bash
nvm install v18.19.1
最新のLTSバージョンをインストール:
bash
nvm install --lts
または
bash
nvm install lts/*
このコマンドは、現在利用可能なLTSバージョンのうち、最も新しいものを自動的に判断してインストールします。例えば、現時点でLTSがv18とv20の場合、v20の最新LTSバージョンがインストールされます。
特定のLTSシリーズの最新版をインストールしたい場合は、コードネームやメジャーバージョンを指定することもできます。例えば、v18シリーズの最新LTS版をインストールするには:
bash
nvm install lts/iron # コードネームで指定
nvm install lts/18 # メジャーバージョンで指定
最新版 (Current) をインストール:
bash
nvm install node
または
bash
nvm install latest
このコマンドは、LTSではない、最新のNode.jsバージョンをインストールします。これは新しい機能を試したい場合などに便利です。
インストール中に、Node.js本体と、それに付属するnpmも自動的にインストールされます。インストールが完了すると、nvmはそのインストールしたバージョンを自動的に「使用するバージョン」として設定します。
“`bash
nvm install 20.11.0
出力例:
Downloading and installing node v20.11.0…
Downloading https://nodejs.org/dist/v20.11.0/node-v20.11.0-darwin-x64.tar.gz…
Extracting node-v20.11.0-darwin-x64.tar.gz to /Users/youruser/.nvm/versions/node/v20.11.0
Installing npm v10.2.4…
Installation complete.
Now using node v20.11.0 (npm v10.2.4)
“`
4.3. インストール済みのNode.jsバージョンの確認
すでにnvmを使ってインストールしたNode.jsバージョンを一覧表示するには、ls コマンドを使います。
bash
nvm ls
以下のような出力が得られます。
v14.21.3
v16.20.2
-> v18.19.1
v20.11.0
default -> 18.19.1 (-> v18.19.1)
iojs -> N/A (default)
node -> stable (-> v21.6.2) (default)
unstable -> N/A (default)
出力の見方:
- リストされているバージョン (
v14.21.3,v16.20.2など) は、インストール済みのバージョンです。 ->が付いているバージョン (-> v18.19.1の行) は、現在このターミナルセッションで使用されているバージョンです。defaultは、新しいターミナルを開いたときにデフォルトで使用されるバージョンです (default -> 18.19.1)。node,stable,unstable,iojsなどは、nvmが提供するエイリアス(別名)です。これらのエイリアスがどのバージョンを指しているかが表示されます。nodeエイリアスは通常、最新のNode.jsバージョン(LTSかCurrentかは設定による)を指し、stableは最新LTSを指すことが多いです。
4.4. 使用するNode.jsバージョンの切り替え
インストール済みのNode.jsバージョンを切り替えるには、use コマンドを使います。
bash
nvm use 16.20.2
バージョン番号を指定して実行すると、そのバージョンのNode.jsが現在のターミナルセッションで使用されるようになります。
“`bash
nvm use 16.20.2
出力例:
Now using node v16.20.2 (npm v8.19.4)
“`
切り替え後、実際に使用されているNode.jsとnpmのバージョンを確認してみましょう。
“`bash
node -v
v16.20.2
npm -v
8.19.4
“`
nvm use コマンドで切り替えたバージョンは、そのターミナルセッションの間だけ有効です。新しいターミナルを開くと、デフォルト設定されているバージョンが使用されます。
特定のエイリアスを使って切り替えることもできます。例えば、最新LTSに切り替える場合は以下のようになります。
“`bash
nvm use lts
または
nvm use lts/*
“`
最新版に切り替える場合は以下のようにします。
bash
nvm use node
4.5. デフォルトバージョンの設定
新しいターミナルを開いたときに、常に特定のNode.jsバージョンを自動的に使用したい場合は、そのバージョンを「デフォルト」として設定します。これには alias コマンドを使います。
bash
nvm alias default 18.19.1
このコマンドは、default というエイリアスを特定のバージョン番号 (18.19.1) に紐付けます。これにより、次にターミナルを開いたときから、自動的にそのバージョンが選択されるようになります。
デフォルト設定を確認するには、nvm ls コマンドの出力を見ます。default -> の行が設定したバージョンを指しているはずです。
“`bash
nvm ls
出力例 (一部):
…
default -> 18.19.1 (-> v18.19.1)
…
“`
デフォルト設定を解除したい場合は、nvm uninstall default コマンドを使用します。
4.6. 特定のバージョンのアンインストール
不要になったNode.jsバージョンをアンインストールしてディスク容量を解放するには、uninstall コマンドを使います。
bash
nvm uninstall 14.21.3
注意: 現在使用しているバージョンはアンインストールできません。アンインストールしたいバージョンが現在使用中の場合は、先に別のバージョンに切り替えてから実行してください。
“`bash
nvm uninstall 18.19.1
出力例:
nvm: Cannot uninstall currently active version v18.19.1
“`
この場合は、例えば nvm use 20.11.0 でv20に切り替えてから、再度 nvm uninstall 18.19.1 を実行します。
5. nvmの応用的な使い方
nvmの基本的な使い方をマスターすれば、Node.jsのバージョン管理はかなり楽になります。さらにnvmには、開発ワークフローを効率化するための便利な応用機能がいくつかあります。ここでは、特に役立つ.nvmrcを使ったプロジェクトごとのバージョン自動切り替えと、エイリアスの活用について詳しく解説します。
5.1. プロジェクトごとにNode.jsバージョンを自動切り替え (.nvmrc)
複数のプロジェクトを扱っている場合、それぞれのプロジェクトが必要とするNode.jsバージョンが異なることがあります。手動で nvm use を実行するのは面倒ですし、バージョンを間違えるリスクもあります。この問題を解決するために、nvmは .nvmrc ファイルを使ったプロジェクトごとのバージョン自動切り替え機能を提供しています。
.nvmrc ファイルは、プロジェクトのルートディレクトリに配置するテキストファイルです。このファイルに、そのプロジェクトで使用するNode.jsのバージョンを指定しておきます。nvmは、cd コマンドなどでそのディレクトリに入ったときに、.nvmrc ファイルが存在するかを確認し、指定されたバージョンに自動的に切り替えることができます。
ステップ 1: .nvmrc ファイルの作成
プロジェクトのルートディレクトリ(通常は package.json ファイルがある場所)に、.nvmrc という名前のファイルを作成します。
ステップ 2: 使用するバージョンの記述
作成した .nvmrc ファイルの中に、そのプロジェクトで使用したいNode.jsのバージョンを指定します。バージョン指定の方法は、nvm install コマンドで使うものと同様です。
-
特定のバージョン番号:
text
16.20.2
または
text
v16.20.2 -
最新のLTSバージョン:
text
lts/*
または特定のLTSシリーズの最新版 (lts/iron,lts/18など)text
lts/iron -
最新版 (Current):
text
node
通常は、特定の安定したLTSバージョンを指定することが推奨されます。
例: プロジェクトでNode.js v18.19.1を使用する場合
プロジェクトのルートディレクトリに .nvmrc ファイルを作成し、以下の内容を記述します。
text
18.19.1
ファイルを保存します。
ステップ 3: 自動切り替えの有効化 (macOS/Linux)
.nvmrc ファイルによる自動切り替えを有効にするには、nvmの初期化スクリプトがシェルの cd コマンドをフックするように設定されている必要があります。通常、nvmをインストールした際にシェルの設定ファイル (.bashrc, .zshrc など) に追記される以下の行が、このフックを有効にしています。
bash
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
この設定が有効になっていることを確認してください。もし自動的に切り替わらない場合は、設定ファイルにこの行があるか確認し、ターミナルを再起動するか source コマンドで設定ファイルを再読み込みしてください。
ステップ 4: 自動切り替えのテスト
.nvmrc ファイルを配置したプロジェクトディレクトリに移動してみます。
bash
cd /path/to/your/project
ディレクトリに入った際に、nvmがバージョンを切り替えるメッセージが表示されるはずです。
bash
nvmrc file found: .nvmrc
Found '/path/to/your/project/.nvmrc' with version <version>
Now using node <version> (<npm version>)
もし指定されたバージョルがインストールされていない場合は、nvmはそのバージョンをインストールするかどうかのメッセージを表示します。
bash
nvmrc file found: .nvmrc
Found '/path/to/your/project/.nvmrc' with version 16.20.2
nvm is setting NVM_DIR="/Users/youruser/.nvm"
nvm is setting NODE_VERSION="16.20.2"
nvm is setting NVM_IOJS_ORG_MIRROR=""
nvm is setting NVM_NODEJS_ORG_MIRROR=""
nvm is setting NVM_DIR_ALIASES=""
nvm is setting nvm_rc_version="16.20.2"
nvm is setting nvm_alias="default"
nvm is setting nvm_bin="/Users/youruser/.nvm/versions/node/v18.19.1/bin"
nvm is setting nvm_node_path="/Users/youruser/.nvm/versions/node/v18.19.1/bin/node"
nvm is setting nvm_npm_path="/Users/youruser/.nvm/versions/node/v18.19.1/bin/npm"
nvm is setting nvm_node_modules_path="/Users/youruser/.nvm/versions/node/v18.19.1/lib/node_modules"
nvm use --silent "16.20.2" # assuming it's in .nvmrc
N/A version is not installed. Install it now? (y/N)
ここで y を入力すれば、指定されたバージョンが自動的にインストールされ、その後そのバージョンに切り替わります。
これで、プロジェクトディレクトリに出入りするだけで、Node.jsのバージョンが自動的に管理されるようになります。これは複数のプロジェクトを並行して開発する際に非常に便利な機能です。
Windows版 nvm-windows の場合:
nvm-windowsも .nvmrc ファイルをサポートしていますが、自動切り替えのためには別途設定やツールが必要になる場合があります。Powershellやカスタムスクリプトを使って cd イベントをフックする方法などが考えられますが、macOS/Linux版ほど標準的な自動切り替え機能は統合されていないことがあります。nvm-windowsのドキュメントで .nvmrc のサポート状況と利用方法を確認してください。手動で nvm use コマンドと組み合わせるのが最も確実な方法となる場合があります。
5.2. エイリアスの活用
.nvmrc 以外にも、nvmのエイリアス機能はバージョン管理をより便利にします。前述の default エイリアスのように、特定の名前を特定のバージョンに紐付けることができます。
例えば、特定のプロジェクトで使用するバージョンに分かりやすいエイリアスを付けることができます。
bash
nvm alias my-cool-project 16.20.2
これにより、nvm use my-cool-project というコマンドで簡単に v16.20.2 に切り替えることができるようになります。
“`bash
nvm use my-cool-project
Now using node v16.20.2 (npm v8.19.4)
“`
エイリアスを一覧表示するには、単に nvm alias と実行します。
“`bash
nvm alias
出力例:
default -> 18.19.1 (-> v18.19.1)
my-cool-project -> 16.20.2 (-> v16.20.2)
… (標準のエイリアス)
“`
不要になったエイリアスは nvm unalias <alias_name> で解除できます。
bash
nvm unalias my-cool-project
エイリアスは、よく使うバージョンや、特定の意味合いを持つバージョン(例えば、本番環境で使用しているバージョンなど)に名前を付けておくことで、コマンド入力を簡略化し、バージョンの意図を明確にするのに役立ちます。
5.3. npmパッケージの扱い
nvmでNode.jsバージョンを切り替えると、それに付属するnpmのバージョンも切り替わります。これは、Node.jsのバージョンごとにnpmのバージョンも進化していくため、意図した挙動です。
重要な点として、nvmはNode.jsバージョンごとにグローバルnpmパッケージを独立して管理します。つまり、あるNode.jsバージョンで npm install -g <package> を実行しても、別のNode.jsバージョンに切り替えた際には、そのパッケージは利用できません。
例えば、v18を使っているときにJest CLIツールをグローバルインストールした場合:
bash
nvm use 18
npm install -g jest-cli
この後、v20に切り替えると、jest コマンドは command not found となる可能性があります(システムPATHに別途Jestがインストールされていない限り)。
bash
nvm use 20
jest # command not found
v20でもJestを使いたい場合は、v20に切り替えた状態で再度グローバルインストールが必要です。
bash
nvm use 20
npm install -g jest-cli
このように、グローバルパッケージはNode.jsバージョンに紐づいて管理されることを理解しておくことが重要です。
異なるバージョン間でグローバルパッケージを共有または移行する方法:
- 手動での再インストール: 最も確実なのは、新しいバージョンに切り替えるたびに必要なグローバルパッケージを手動で
npm install -gし直すことです。 -
パッケージリストのエクスポート/インポート: 現在使用しているバージョンでインストールされているグローバルパッケージのリストをエクスポートし、別のバージョンでそのリストを元に一括インストールする、という方法も考えられます。
“`bash
現在のバージョンでグローバルパッケージをリストアップ
npm list -g –depth=0 > global_packages.txt
新しいバージョンに切り替える
nvm use
リストを元にインストール(多少の手動編集が必要になる場合あり)
cat global_packages.txt | xargs npm install -g
“`
ただし、この方法はパッケージ名の整形が必要だったり、依存関係の問題が発生したりする可能性があります。 -
nvm copy-alias(macOS/Linux版): nvmには、あるバージョンのグローバルパッケージを別のバージョンにコピーするnvm copy-alias <from_alias> <to_alias>という実験的なコマンドがあります。ただし、これはあくまでエイリアス間のコピーであり、すべてのパッケージが正しく移行される保証はありません。利用する際は注意が必要です。
プロジェクト開発においては、グローバルパッケージへの依存を避け、プロジェクトローカルにパッケージをインストール (npm install <package>) するのがベストプラクティスとされています。これにより、プロジェクトの依存関係がNode.jsバージョンに関わらず一貫し、開発環境のセットアップが容易になります。
5.4. Node.jsのインストールオプション (macOS/Linux)
nvm install コマンドにはいくつかのオプションがあります。
--reinstall-packages-from=<version>: 指定したバージョンのグローバルパッケージを、新しくインストールするバージョンに再インストールします。.nvmrcファイルを使った自動インストール時などにも便利です。--latest-npm: 指定したNode.jsバージョンで利用可能なnpmの最新版をインストールします。デフォルトではNode.jsに付属するnpmがインストールされます。--no-npm: npmをインストールしません。--no-fast-install: ソースコードからビルドしてインストールします。通常は事前ビルド済みのバイナリがダウンロードされるため高速ですが、特定の環境で問題がある場合などに利用します。
これらのオプションは nvm help install で詳細を確認できます。
6. よくある問題とトラブルシューティング
nvmの導入や使用中に発生しがちな問題と、その解決策について解説します。
6.1. nvm: command not found
nvmをインストールしたはずなのに、ターミナルで nvm コマンドを実行するとこのエラーが出る場合、主な原因はnvmがシェルのPATHに追加されていないか、シェルの設定ファイルが正しく読み込まれていないことです。
原因:
- インストールスクリプトが正しく実行されなかった。
- インストールスクリプトがシェルの設定ファイル(
.bashrc,.zshrc, etc.)に設定を追記できなかった、または間違ったファイルに追記した。 - 設定ファイルを追記した後、ターミナルを再起動するか、設定ファイルを現在のセッションに読み込む (
source) 作業を忘れた。 - Fish Shellなど、特殊なシェルを使っている場合の設定の問題。
解決策:
- ターミナルを完全に閉じて開き直す: これが最も簡単な解決策です。多くの場合はこれで問題が解消します。
- シェルの設定ファイルを確認: ホームディレクトリにあるシェルの設定ファイル(Bashなら
.bashrc,.zshrc,.profile,.bash_profile、Zshなら.zshrcなど)をテキストエディタで開きます。nvmのインストール時に追記されたはずの設定(セクション3.1を参照)が存在するか確認します。- 設定が存在しない場合: nvmのインストールスクリプトを再度実行してください。その際、エラーメッセージが出力されないか注意深く確認してください。または、手動で設定をファイルに追記してください(セクション3.1のステップ2の内容をコピー&ペースト)。
- 設定が存在する場合: ファイルパスや構文に間違いがないか確認します。特に
export NVM_DIR=...の部分が正しいか確認します。
-
設定ファイルを現在のセッションに読み込む: 設定ファイルに間違いがないのに
nvmコマンドが見つからない場合、現在のターミナルセッションに設定が反映されていない可能性があります。以下のコマンドで設定ファイルを明示的に読み込みます(使用しているシェルとファイルに合わせてパスを修正してください)。“`bash
source ~/.bashrcまたは
source ~/.zshrc
``echo $PATH
4. **PATH環境変数の確認:**コマンドを実行し、nvmのバイナリディレクトリ(通常は$NVM_DIR/versions/node/vX.Y.Z/binのようなパス)が含まれているか確認します。nvmがアクティブなバージョンに切り替える際、このPATHを操作します。設定ファイルが正しく読み込まれていれば問題ないはずですが、まれにPATHが意図せず上書きされている可能性も考えられます。~/.config/fish/conf.d/nvm.fish` ファイルを作成し、特定の設定を記述します)。
5. **Fish Shellの場合:** Fish ShellはBash/Zshとは異なる設定方法が必要です。nvmのREADMEにFish Shell用の設定方法が記載されていますので、それを参照してください(通常は
6.2. Node.jsまたはnpmコマンドが見つからない、またはバージョンが古い
node -v や npm -v を実行しても command not found となるか、nvmで nvm use したバージョンと異なる古いバージョンが表示される。
原因:
- nvmがアクティブになっていない (
nvm useが実行されていないか、ターミナルを再起動した)。 - デフォルトバージョンが設定されていないか、意図しないバージョンが設定されている。
- システムのPATHに、nvmで管理されていないNode.jsのパスが、nvmのパスよりも前に設定されている。
解決策:
nvm useでバージョンを切り替える: 開発したいプロジェクトに必要なバージョンにnvm use <version>で明示的に切り替えます。nvm lsで現在の状態を確認:nvm lsを実行し、->が期待するバージョンを指しているか確認します。また、defaultエイリアスが正しく設定されているか確認します。- デフォルトバージョンを設定: 新しいターミナルを開いたときに特定のバージョンを自動的に使用したい場合は、
nvm alias default <version>でデフォルトバージョンを設定します。 - システムPATHの確認:
echo $PATHを実行し、システムのNode.jsパス(例えば/usr/local/binなど)が、nvmのバージョンディレクトリのパス($NVM_DIR/versions/node/.../bin)よりも前に来ていないか確認します。もしシステムのNode.jsパスがnvmより優先されている場合、そちらのNode.jsが使われてしまいます。システムのNode.jsをアンインストールするか、シェルの設定ファイルでPATHの順番を調整してください。nvmの設定行が読み込まれる前にPATHが設定されていると、nvmによるPATHの操作が上書きされてしまうことがあります。nvmの設定行は設定ファイルの最後に配置することが推奨されます。 - Windows版 nvm-windowsの場合: nvm-windowsはPATHを操作することでバージョンを切り替えます。
nvm use <version>を実行した後、新しいコマンドプロンプトやPowerShellを開き直さないとPATHの変更が反映されない場合があります。また、システムの環境変数設定で、nvmによって管理されるC:\Program Files\nodejsのようなシンボリックリンクディレクトリが、他のNode.jsインストールパスよりも優先されているか確認してください。
6.3. インストールエラー
nvm install 実行中にエラーが発生する。
原因:
- ネットワーク問題: Node.jsバイナリのダウンロードに失敗している。
- パーミッション問題: nvmのインストールディレクトリ(
~/.nvm)や、その中にファイルを作成するためのパーミッションがない。 - 依存関係の不足 (ソースビルド時):
--no-fast-installオプションを使用している場合など、ソースコードからビルドするためのC++コンパイラやPythonなどの依存ツールが不足している。
解決策:
- ネットワーク接続の確認: インターネットに接続されているか、プロキシ設定が必要ないかなどを確認します。
- 再度実行: 一時的なネットワーク問題かもしれませんので、コマンドをもう一度実行してみてください。
- パーミッションの確認:
~/.nvmディレクトリが存在し、現在のユーザーがそのディレクトリに対して書き込み権限を持っているか確認します (ls -ld ~/.nvm)。もしパーミッションが不足している場合は、chmodコマンドで権限を調整するか、nvmをインストールし直す際に現在のユーザーで実行されているか確認します。sudo nvm install ...のようにsudoを使ってnvmコマンドを実行しないでください。sudoを使うと、Node.jsがrootユーザーとしてインストールされ、その後の通常ユーザーでの操作(パッケージインストールなど)でパーミッション問題が発生する原因となります。nvmはユーザー権限でインストールし、使用することを前提としています。 - 別のバージョンの試行: 特定のバージョンに問題がある可能性もゼロではありません。別のNode.jsバージョンをインストールできるか試してみてください。
- 依存関係のインストール (ソースビルド時): エラーメッセージにビルドに関する情報が含まれている場合は、Node.jsをソースからビルドするために必要なツール(
build-essentialパッケージなど)をインストールする必要があるかもしれません。公式のNode.jsドキュメントやnvmのドキュメントを参照してください。
6.4. .nvmrc が機能しない (macOS/Linux)
プロジェクトディレクトリに .nvmrc ファイルを置いても、自動的にNode.jsバージョンが切り替わらない。
原因:
.nvmrcファイルがプロジェクトのルートディレクトリにないか、ファイル名が間違っている(.nvmrcである必要がある)。.nvmrcファイル内のバージョン指定が正しくない(存在しないバージョン番号、スペルミスなど)。- nvmのシェルフックが有効になっていない(シェルの設定ファイルにnvmの初期化スクリプトが正しく読み込まれていない)。
解決策:
.nvmrcファイルの場所と名前を確認: プロジェクトのルートディレクトリに.nvmrcという名前でファイルが存在するか確認します。.nvmrcファイルの内容を確認: ファイルを開き、指定されているバージョン番号やエイリアスが正しいか確認します。nvm install <version>やnvm list-remoteで確認できる形式である必要があります。- 手動での切り替えを試す: プロジェクトディレクトリ内で手動で
nvm use <version>を実行し、指定したバージョンに切り替えられるか確認します。ここでエラーが出る場合は、そもそもそのバージョンがインストールされていないか、.nvmrcの指定が間違っています。 - シェルの設定ファイルを確認: セクション6.1のトラブルシューティングを参照し、シェルの設定ファイルでnvmの初期化スクリプトが正しく読み込まれているか確認します。特に
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"の行が存在し、読み込まれているか重要です。 - ディレクトリ移動以外の方法で試す:
cdコマンドでの自動切り替えがうまくいかない場合でも、プロジェクトディレクトリ内でnvm useと引数なしで実行すると、nvmは.nvmrcを探してそのバージョンを使おうとします。cdフックの問題か、nvm自体の設定の問題かを切り分けるのに役立ちます。
6.5. Windows版 nvm-windows 特有の問題
macOS/Linux版nvmとは異なる挙動や問題が発生する。
原因:
- WindowsのファイルシステムやPATH管理の仕組みの違い。
- シンボリックリンクの作成権限や問題。
- Cygwin, MinGW, WSLなど、異なる環境でnvm-windowsを使用しようとしている(nvm-windowsは主にCMDやPowerShell向けに設計されています)。
- Windows版とmacOS/Linux版でコマンドの構文や機能が若干異なる。
解決策:
- 公式ドキュメントの確認: nvm-windowsの公式GitHubリポジトリ(https://github.com/coreybutler/nvm-windows)のREADMEやWiki、Issueを確認します。Windows特有の問題や解決策が記載されていることが多いです。
- インストーラーの再実行: インストールがうまくいかなかった場合は、一度アンインストールしてから再度インストーラーを実行してみます。その際、管理者権限で実行する必要があるかなども確認します。
- PATH環境変数の手動確認: システムの環境変数設定を開き、nvmおよびNode.jsシンボリックリンクディレクトリが正しくPATHに追加されているか、他のNode.jsパスよりも優先されているか確認します。
- コマンドの違いに注意:
nvm lsとnvm list、nvm useの引数など、macOS/Linux版と若干異なるコマンドがないか確認します。 - WSL (Windows Subsystem for Linux) の利用: Windows上でLinux環境を構築できるWSLを利用している場合は、WSL内でmacOS/Linux版のnvmをインストールして利用するのが最も互換性が高く推奨される方法です。WSL環境とWindows側の環境でNode.jsを共有する場合は、別途考慮が必要です。
これらのトラブルシューティング手順を試しても解決しない場合は、nvmのGitHubリポジトリのIssueを検索したり、新しいIssueを作成して質問したりするのが良いでしょう。エラーメッセージや使用しているOS/シェル/nvmのバージョンなどの詳細情報を含めると、より早く解決策が見つかりやすくなります。
7. より深くnvmを理解するために
nvmの基本的な使い方や応用方法、トラブルシューティングについて解説してきましたが、さらにnvmについて理解を深めたい場合は、以下のリソースを参照することをおすすめします。
- nvmの公式GitHubリポジトリ: https://github.com/nvm-sh/nvm
- READMEファイルには、最新のインストール方法、コマンド一覧、詳細な情報が記載されています。最も信頼できる情報源です。
- Issueトラッカーでは、他のユーザーが遭遇した問題やバグ報告、機能要望などが議論されています。
- nvm-windowsの公式GitHubリポジトリ: https://github.com/coreybutler/nvm-windows (Windowsユーザー向け)
- Windows版nvmに関する情報はこちらを参照してください。
-
コマンドヘルプ: ターミナルで
nvm helpまたはnvm <command> --helpと入力すると、各コマンドの詳細な使い方やオプションが表示されます。困ったときにすぐに参照できます。bash
nvm help
nvm install --help
nvm use --help
nvmの内部では、インストールしたNode.jsバージョンは $NVM_DIR/versions/node/ ディレクトリ以下にそれぞれのバージョン番号のディレクトリとして保存されます。nvm use コマンドは、シェルの環境変数 PATH を操作することで、使用するNode.js/npmのバイナリのパスを切り替えています。.nvmrc 機能は、シェルの cd コマンドのフックを使って、ディレクトリ移動時にこのPATH切り替えを自動的に実行しています。これらの仕組みを理解しておくと、トラブルシューティングの際に役立つことがあります。
8. まとめ
本記事では、Node.jsのバージョン管理ツールであるnvmについて、その必要性から導入方法、基本的な使い方、.nvmrcやエイリアスといった応用的な活用方法、そしてよくあるトラブルシューティングまで、幅広く詳細に解説しました。
nvmを導入し、使いこなすことで、あなたは以下のようなメリットを得られます。
- 複数のNode.jsバージョンを簡単に管理できる: プロジェクトごとに異なるバージョンが必要な場合でも、手軽にインストール、切り替え、アンインストールが可能です。
- 開発環境の安定性が向上する: プロジェクトに最適なNode.jsバージョンを使用することで、バージョン違いによる予期せぬエラーや非互換性の問題を避けることができます。
- 新しいNode.jsバージョンを気軽に試せる: システム全体に影響を与えることなく、最新のNode.jsの機能やパフォーマンス改善を評価できます。
- チーム開発がスムーズになる:
.nvmrcを使うことで、プロジェクトに参加するすべての開発者が同じNode.jsバージョンを簡単に設定・使用でき、開発環境の統一が図れます。
最初は少し難しく感じるかもしれませんが、nvmのコマンドは直感的で覚えやすいものがほとんどです。本記事で解説した内容を参考に、実際に手を動かして様々なバージョンをインストールしたり、切り替えてみたり、.nvmrc ファイルを作成して試したりしてみてください。
Node.js開発においてバージョン管理は非常に重要な課題です。nvmをマスターすることで、あなたはより効率的で快適な開発ワークフローを構築し、Node.jsを使った開発をさらに楽しむことができるようになるでしょう。
これで、もうNode.jsのバージョン管理で迷うことはありません!nvmをあなたの開発の強力な味方として、ぜひ活用してください。