node.jsのバージョン管理ツールは多くの種類があり、どれを利用するか選ぶに当たって調べたことをまとめます。nodenv、nodebrew、ndenvを比較してnodenvを選びました。

nodeバージョン管理ツールの選考基準

nodeバージョン管理ツールを選んだ基準は次の3つです。

  • 設定や使い方の情報が多い
  • プロジェクト単位でバージョン管理できる(いちいち切り替えなくていい)
  • ツール自体の管理がされている

[比較基準1]設定や使い方の情報が多い

「node バージョン管理」で検索に上がってきたのは下記の4つでした。

  • nodenv
  • nodebrew
  • ndenv
  • nodenv

この4つが設定や使い方の情報が多く感じたため、この4つのツールを対象に残り2つの基準プロジェクト単位でのバージョン管理とツール自体の管理を比較しました。

[比較基準2]プロジェクト単位でバージョン管理できる

バージョン管理ツールを調べていたところ、ツールによって管理方法に違いがあることがわかりました。

  • グローバルのバージョンを適宜切り替えるタイプ
  • ディレクトリ毎にバージョンを設定できるタイプ

グローバルのバージョンを適宜切り替えるタイプでは使用するバージョンをインストールした後、ターミナルなどから使用するバージョンを指定することで、バージョンの切り替えを行います。
このタイプではnodeのバージョンはマシン全体(正確にはユーザー)に設定されます。
メリットはどのディレクトリにいても使用しているバージョンを確認できること、デメリットはプロジェクト間で異なるバージョンを使用している場合、プロジェクト毎に使用しているバージョンを記録しておくこと、作業するプロジェクトを移動する度に手動でバージョンを切り替える必要があるので面倒ということです。

一方、ディレクトリ毎にバージョンを設定するタイプでは使用するバージョンをインストールした後、ターミナルなどからプロジェクト(ディレクトリ)毎に設定ファイルを作成することでバージョンの指定を行います。
このタイプではnodeのバージョンはプロジェクト(ディレクトリ)毎に設定されます。
メリットはプロジェクト毎に使用しているバージョンが独立していること、プロジェクトを移動しても手動でバージョンを切り替える必要がないこと、デメリットとしてはプロジェクトのディレクトリに移動しないと使用しているバージョンを確認できないことです。

個人的に複数のプロジェクトを進めることが多いため、プロジェクト単位でバージョン管理ができる方が利便性が高いと考えました。

候補にあげたnodenv、nodebrew、ndenvの3つでは
グローバルのバージョンを適宜切り替えるタイプ・・・nodebrew
ディレクトリ毎にバージョンを設定できるタイプ・・・nodenv、ndenv
となっておりnodenv、ndenvが候補として残りました。

[比較基準3]ツール自体が管理されている

候補として残ったnodenvndenvの公開リポジトリで最終更新日を確認しました(2019年6月9日現在)。

キャプチャ:nodenvのリポジトリ
nodenvのリポジトリ最終更新日は2019年5月5日
キャプチャ:ndenvのリポジトリ
ndenvのリポジトリ最終更新日は2018年12月27日

ndenvは1年以上更新されておらず、またREADMEにはndenvはもうメンテナンスしてないから、nodenvを使うことを考えてくださいという旨の記述がありました。

[Deprecated] nodenv is better alternative

Please consider to use nodenvndenv repository is not maintained actively.

https://github.com/riywo/ndenv

ツール自体の管理としてndenvはふさわしくないため、nodenvを使うことに決めました。

nodeバージョン管理ツール選びのまとめ

設定や使い方の情報が多い、プロジェクト単位でバージョン管理できる、ツール自体の管理がされているとう3つの基準でnodeバージョン管理ツールを比較して、nodenvを選びました。

選ぶ基準や何がいいかは人によって異なると思いますが、同じようにnodeバージョン管理ツールに何を使うか考えている方の助けになれば嬉しく思います。

インストール方法や使い方は@palmtreeさんのQiitaの記事を参考にしました。
node以外の言語もバージョン管理するという方はanydenv経由でnodenvを入れるといいと思います。

この記事を書いた人

Yuki Tomioka

元焼肉店店長からゼロシード株式会社の1人目のwebエンジニアとなる。テクニカルディレクターとして勤務し、WordPressのカスタマイズやアクセス解析や広告運用などに従事。現在は事業会社のフロントエンドエンジニアとして勤務。
タイムチケットで相談も受け付けてます。