NodeJSのバージョン管理ツールって結局どれ使えばええんや！

# きっかけ
NodeJSのバージョン管理ツールってめちゃめちゃ種類ありますよね！
結局一番良いのはどれなんや！
気になったのでまとめてみました。

ちなみにパッケージマネージャーについては、[こちら](https://qiita.com/tak8_al/items/46129afd7b7ddbd4a252)で詳しく書きましたので、関心がある方は、ぜひご覧ください。

# ツール選定条件
#### 1. macOSとWindowsに対応しているかどうか
どちらのOSも使用する可能性を考慮して。

#### 2. 使用しているバージョンを.node-version などのドキュメントに残せるかどうか
運用保守の観点を踏まえて、誰でも再現可能にするため。


#### 3. プロジェクトに追従して自動でNode.jsのバージョンが変更される
様々なプロジェクトを移動する機会が多い可能性を考慮して。
以下の7つのツールを検討します。
# 検討ツール
* nvm
* n
* nodenv
* nodebrew
* fnm
* asdf
* Volta 

# 各ツールの比較
以下7つのツールの比較をします。
## nvm
GitHubURL: https://github.com/nvm-sh/nvm
### 概要

* GitHubスター数: 62k

* 最終リリース: 10月14日

### 条件を満たしているか

1. macOSやLinuxでは問題なし。WindowsではWSLなどを使うと問題なく動作する。

2. .nvmrcに記述される。

3. avnという別ツールを使うか、シェルスクリプトを記述する必要がある。

### 特徴

* かなり前から存在するツールで、GitHubのスター数が一番多いバージョン管理ツール。
* どのツールよりもドキュメントが豊富で、メンテナンスもしっかりされている。
* 特別な理由がない限りはこのツールを使うのが良さそう。




## n

GitHubURL: https://github.com/tj/n
### 概要

* GitHubスター数: 16.9k

* 最終リリース: 2022年7月16日

### 条件を満たしているか

1. npmの環境があれば問題なし。macOSの場合はbrewでも導入できる。

2. .n-node-versionや.node-version、.nvmrcに記述される。

3. nvmと同様にavnという別ツールを使う必要がある。

### 特徴

macOSの場合は直接brewから導入できる。

Windows等それ以外の場合は、一度npmが使用できる環境を導入した後にnpm installをして導入する必要がある。





## nodenv

GitHubURL: https://github.com/nodenv/nodenv

### 概要

* GitHubスター数: 1.9k

* 最終リリース: 2020年7月20日



### 条件を満たしているか

1. macOS準拠。Windowsで同等の機能を扱うためにnodistが必要。

2. .node-versionに記述される。

3. 該当のバージョンがダウンロードされている場合にはすぐ使える。そうでない場合はインストールを自分で実行する必要がある。




### 特徴

* anyenv + nodenvで環境構築している人が多い。

* Windowsにて同様の操作をする場合に必要なnodistというバージョン管理ツールの最終リリースが2019年3月とかなり前。





## nodebrew

GitHubURL: https://github.com/hokaccha/nodebrew

### 概要

・GitHubスター数: 1k

・最終リリース: 2022年3月19日



### 条件を満たしているか

1. macOS準拠。Windowsで同等の機能を扱うためにはnodistが必要。

2. なし。

3. 公式のドキュメントには記載なし。



### 特徴

* brewを使って導入できるためmacOSの場合環境構築の難易度がかなり低い。

* 提供されている機能がNode.jsのバージョンの切り替えのみ





## fnm
GitHubURL: https://github.com/Schniz/fnm

### 概要

・GitHubスター数: 5.4k

・最終リリース: 2022年7月19日



### 条件を満たしているか

1. macOS、Windowsともに問題なく動作。Linuxもサポートしている。

2. .node-versionや.nvmrcに記述される。

3. 該当ディレクトリに移動後、installまで自動で行ってくれる



### 特徴

* 他のツールで使用しているバージョン管理方法を使用することができ、互換性がある。
* Rustで書かれており、処理速度が速い。

# asdf
GitHubURL: https://github.com/asdf-vm/asdf

### 概要

・GitHubスター数: 16k

・最終リリース: 2022年6月9日



### 条件を満たしているか

1. macOSやLinuxでは問題なし。WindowsではWSLなどを使うと問題なく動作する。

2. .tool-versionsに記述される。

3. 該当ディレクトリに移動後、installする必要がある。



### 特徴

Node.jsだけではなく、様々な言語のバージョンを管理してくれる。
普段の開発で多様な言語やツールを扱うことがある人におすすめ。

 

## Volta

GitHubURL: https://github.com/volta-cli/volta

### 概要

・GitHubスター数: 6.9k

・最終リリース: 2022年10月1日



### 条件を満たしているか

1. macOS、Windowsともに問題なく動作。Linuxもサポートしている。

2. package.jsonの独自フィールドに記載される。

3. 該当ディレクトリに移動後、installまで自動で行ってくれる



### 特徴

* 新しいツールのため、日本語のドキュメント等がしっかり整備されていない。
* 他のツールとは違いnpmやyarnのバージョンも管理可能で、TypeScriptなどのOSSでも導入されている。
* Rustで書かれており、処理速度が速い。

# まとめ
||条件1|条件2|条件3|
|:---|:---:|:---:|:---:|
|nvm|◯|◯|◯|
|n|△|◯|×|
|nodenv|×|◯|◯|
|nodebrew|×|×|×|
|fnm|◯|◎|◎|
|asdf|◯|◯|◯|
|Volta|◎|◯|◎|

上記の表からわかるように、条件を満たしているツールは以下のツールでした。

* nvm

* fnm

* asdf

* Volta

その中で処理速度も速いのが以下の2つです。
* fnm
* Volta

# 最終的に選んだのは。。。

Voltaです。

決めた理由としては、以下の2つです。
* 新しい技術である。
* 最終リリースが2022年10月としっかりメンテナンスが行われていそう。

[こちら](https://qiita.com/tak8_al/items/9baab2a2fe7f175cc9e0)の方でより詳しく書きましたので、詳しく知りたい方はぜひ。


# 他のツールの使用ケース
残り3つのツールがどのような状況だったら選択されていたかをご紹介します。


### nvm
使用者数No.1
最初に導入するにはおすすめ。
プラグイン等も豊富なため、やりたいと思ったことはだいたいできる。



### fnm
バージョン管理の方法をnvmなど他のツールと同じにできる。
大規模なプロジェクトに参加しており、人それぞれバージョン管理方法が異なる場合におすすめ。



### asdf
さまざまなツールのバージョン管理が可能
Node.js以外にも言語を扱う要望がある場合におすすめ。