clock-up-blog

go-mi-tech

Windows における Node.js バージョン管理マネージャの選択(nvm-windows, nodist 等)

2018年2月時点のメモです。

Node.js バージョン管理マネージャの選択

Node.js のバージョン管理マネージャの種類が多すぎて結局どれ使えば良いのか判断に困るところなのですが、GitHub のスター数等を流し見した感じだとまだまだ nvm 系列で良いのかな、というところでしょうか。

名前 Stars Initial
Commit
Latest
Commit
Commits Committers Win
対応
Choco
対応
バージョン指定ファイル
nvm 24,640 2010-04 2018-02 1,679 211 × - .nvmrc
n 8,581 2011-01 2017-10 425 62 × - -
nvm-windows 5,110 2014-09 2017-09 169 24 -
nave 1,113 2010-05 2017-02 160 17 × - .naverc
nodist 843 2012-07 2017-06 400 24 .node-version
nvmw 600 2011-11 2016-04 99 14 × -
avn 563 2014-05 2017-11 154 5 - .node-version
nodenv 528 2011-08 2017-08 754 86 - .node-version
ndenv 260 2013-06 2015-10 12 4 - .node-version
nenv 39 2012-11 2017-01 49 4 - .node-version

表内「Win対応」については以下のような基準で印をつけました。

  • 〇 … README に Windows で動くと明記されているもの
  • × … README に Windows では動かないと明記されているもの
  • ? … README で Windows についての言及がないもの

ChocolateyWindows でそこそこ普及しているパッケージ管理マネージャ)でインストールできる基準で絞ると nvm-windowsnodist が候補にあがります。

nvm-windows の特徴

nvm の慣習がある程度そのまま使える傾向にあります。が、nvm-windows は nvm の単なるコピー版ではないことを開発者が主張している(this isn't designed to mirror nvm's features)ことに注意してください。

nvm との大きな違いとして .nvmrc に対応していない(開発者が諸々の理由によりこの機能を拒否している)ことに注意する必要があります。

nodist の特徴

nvm のコマンド体系は踏襲せず、少し今風のコマンド体系となっています。README によると「Inspired by n. And nodenv.」らしいです。README 内にやたらと「!」が入ります。

任意ディレクトリに .node-version ファイルを設置することで Node.js バージョンを自動的に切り替える機能があります。これは avn, nodenv, ndenv, nenv と同じルールなので同じファイルで Node.js バージョンを共有できます。

Node.js 管理マネージャを使うにあたって

生の Node.js インストーラによる Node.js がインストールされていると、管理マネージャによる Node.js と生の Node.js のどちらがアクティブに運用されているものか分からなくなりがちなので、一旦生の Node.js はアンインストールしておきます。

Node.js 管理マネージャはひとつだけ選んでセットアップします。複数の管理マネージャを入れてしまうとやはりどれがアクティブに運用されているものだか分からなくなりがちなので、特殊な事情があるわけでもなければ管理マネージャはひとつだけ選んで運用しましょう。

nvm-windows の使用例

(Chocolatey は既に入っている環境で)コマンドプロンプトにて以下を実行することでインストール。

> choco install nvm -y

インストールが完了したら環境変数の変更等を反映するためにコマンドプロンプトを起動し直す。

以下、nvm-windows の使用例。

: nvm バージョンの確認 :
> nvm version
1.1.5

: 利用可能な Node.js バージョン一覧 :
> nvm list available
|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|    9.5.0     |    8.9.4     |   0.12.18    |   0.11.16    |
|    9.4.0     |    8.9.3     |   0.12.17    |   0.11.15    |
|    9.3.0     |    8.9.2     |   0.12.16    |   0.11.14    |
|    9.2.1     |    8.9.1     |   0.12.15    |   0.11.13    |
|    9.2.0     |    8.9.0     |   0.12.14    |   0.11.12    |
|    9.1.0     |    6.12.3    |   0.12.13    |   0.11.11    |
....
....

: Node.js 8.9.4 を利用する :
> nvm install 8.9.4
> nvm use 8.9.4
> node --version
v8.9.4
> npm --version
5.6.0

: Node.js 6.12.3 を利用する :
> nvm install 6.12.3
> nvm use 6.12.3
> node --version
v6.12.3
> npm --version
3.10.10

nodist の使用例

(Chocolatey は既に入っている環境で)コマンドプロンプトにて以下を実行することでインストール。

> choco install nodist -y

インストールが完了したら環境変数の変更等を反映するためにコマンドプロンプトを起動し直す。

以下、nodist の使用例。

: デフォルトバージョンの確認 :
> nodist --version
0.8.8
> node --version
v7.2.1
> npm --version
4.0.5

: 利用可能な Node.js バージョン一覧 :
> nodist dist
....
  6.12.2
  6.12.3
....
  8.9.2
  8.9.3
  8.9.4
....
  9.4.0
  9.5.0

: Node.js 8.9.4 を利用する :
> nodist 8.9.4
> nodist npm match
> node --version
v8.9.4
> npm --version
5.6.0

: Node.js 6.12.3 を利用する :
> nodist 6.12.3
> nodist npm match
> node --version
v6.12.3
> npm --version
3.10.10

: .node-version ファイルの設置による node バージョン指定 :
> mkdir sampleproject
> echo v8.9.4>sampleproject\.node-version
> cd sampleproject
> node --version
v8.9.4
> npm --version
5.6.0

所感

nvm-windows は本家 nvm に近いコマンド体系が使えるので、もともと nvm を使っていた人にとっては使い勝手が良いかもしれません。ただ、.nvmrc ファイルに対応されていないことが個人的には少し残念です。

nodist は「Inspired by n. And nodenv.」とあるように n や nodenv の慣習が踏襲されており、どちらかというと今風な使い勝手です。明示的に install コマンドを打たなくても必要なインストール処理が自動で行われるのはなかなか便利です。.node-version ファイルによるバージョン指定ができる使い勝手もなかなか良いです。

本末転倒になりますが VirtualBox 上に Linux を入れてそこで本家の nvm 等を運用するというのも、まだまだ現実的な解のひとつであるように感じました(ここまで判断材料を集めるのにけっこう苦労したので、初めから何も考えずに Linux で nvm 使っておけば検討時間は節約できたかもしれません)。

どれがベターという正解は無いのですが、個人的には nodist が肌に合うのでこれから使っていこうと思います。