18 ポイント 投稿者 xguru 2024-05-13 | 4件のコメント | WhatsAppで共有
  • 主な比較項目: クロスプラットフォーム、初期設定、Nodeバージョンのソース、日常的な使い勝手

Node Version Manager (NVM)

  • GitHubリポジトリで75.2kスターを持つ、Nodeバージョン管理で最も人気のあるソリューション
  • 早い時期に登場し、コミュニティで大きな人気を得た
  • 完全なWindowsサポートはなく、GitBash、Cygwin、WSLなどで動作する
  • Windows向けの別パッケージとしてnvm-windowsがあるが、NVM自体ではない
  • POSIXシェル(bash、zsh)のみをサポートしており、Fishなどの利用者は対象外
  • インストールは簡単なコマンドで可能
  • .nvmrc ファイルによって使用するNode.jsバージョンを判別できる
  • nvm use コマンドは現在のシェルでのみNode.jsバージョンを設定するため、プロジェクトフォルダを離れてもバージョンは維持される
  • 現在のシェルのNode.jsバージョンと、プロジェクトに必要なバージョンを常に意識しなければならない負担がある
  • すべてのNode.jsバージョンを手動で管理するよりは良いが、完全な統合にはほど遠い

N

  • GitHubで18.5kスターを持つ人気のNode.jsバージョン管理ツール
  • クロスプラットフォームではなく、NVMよりも制約が多い
  • Windowsネイティブシェル、Git for Windows Bash、Cygwin DLLでは動作しない
  • NPMやBrew経由で直接インストールするか、shスクリプトをダウンロードしてインストールできる
  • package.jsonの engines セクションから直接Nodeバージョンを検出できる
  • 別のプロジェクトで正確なNode.jsバージョンを使うには、自分で追跡しなければならないという問題がある
  • 「グローバル」なNode.jsバージョンを管理するため、シェルを閉じた後も最後のプロジェクトで使ったNodeバージョンが残る

Fast Node Manager (FNM)

  • Rustで書かれたNodeバージョン管理ツールで、GitHubで15.2kスター
  • この一覧で最初に登場するクロスプラットフォームのNodeバージョン管理ツール
  • 追加パッケージなしでWindows上で実行できる
  • インストール手順は明確で直感的
  • シェルごとにNode.jsバージョンを管理し、プロジェクトで指定されたバージョンがない場合は「デフォルト」バージョンを使う
  • フォルダベースでNode.jsバージョンを自動切り替えする機能があるが、設定が必要
  • 自動切り替えを正しく機能させるには、必要なNode.jsバージョンをあらかじめインストールしておく必要がある
  • .node-version または .nvmrc ファイルでのみNodeバージョンを検出できる

Volta

  • GitHubで10kスターを持つ、バージョン管理の世界で注目株
  • Rustで書かれており、クロスプラットフォーム
  • Unix系システムではインストール手順がスムーズ
  • Node.jsバージョンの設定に追加ファイルは不要
  • package.jsonから直接設定を取得する
  • engines セクションがVolta設定のすぐ隣にあるため、バージョンを簡単に同期できる
  • ツールチェーン管理が可能で、Node.jsバージョンだけでなくYarnバージョンまで動的に切り替えられる
  • インストールコマンドを実行するたびに、Node.jsとYarnのバージョンが宣言どおりであることを保証する

PNPM

  • NPMやYarnの代替と見なされるが、Node.jsバージョンも管理できる
  • クロスプラットフォームで、すべてのプラットフォームで同じNode.jsバージョン管理体験を提供する
  • Nodeバージョン管理が中核機能ではないため、NPMやYarnと併用しにくい
  • PNPMでインストールしたNode.jsにはCorepackが含まれない
  • Node.jsバージョンはグローバルにしか管理できず、シェルごとの設定はできない
  • プロジェクト間を移動してもNode.jsバージョンを動的に切り替えないため、自分で追跡する必要がある

結論

  • Node.jsバージョン管理ツールは大きく進化してきた
  • NVMは最も古く人気のあるソリューションであり、今もなおそうである
  • しかしエコシステムは進化しており、N、FNM、Voltaなど多様なツールが登場している
  • 現時点では、Voltaが最も機能豊富で完成度の高いNode.jsバージョン管理ツールに見える
  • Voltaはクロスプラットフォームで、日常利用でもスムーズな体験を提供し、プロジェクトで使う他のツールまで管理してくれる

4件のコメント

 
firea32 2024-05-20

別のパッケージとして管理するために学ぶのが面倒なので、私は単に brew unlink && brew link node@14 みたいに使っていますね。

 
halfenif 2024-05-14

あまりにもいろいろありすぎて、本気で学びたい気持ちが「微弱」になる。

昔、FileForgeでWindows向けの実行ファイルをあれこれ漁っていた頃を思い出すと、便利でもここまで便利でいいのかと思ってしまう。

 
surfindia 2024-05-13

私がバージョンマネージャーに期待するのは性能というより汎用性なのですが、その点では https://github.com/asdf-vm/asdf を十分満たしていて、普段から使っています。プラグイン次第で node だけでなく python、ruby、golang などもすべて管理できるので。direnv plugin も便利に使っています。

 
kroisse 2024-05-13

Nodenv もかなり良い代替手段なのに、言及がないのは少し残念ですね。GitHub star が 2.2k なので、あまり有名ではないと見なされて除外されたようです。

シェルスクリプトベースなので Windows 互換性が弱いのは NVM や N と似ていますが、その代わりグローバルな Node.js バージョンとは別に、フォルダ単位で Node.js バージョンを指定することも、特定バージョンの Node.js を使うシェル環境を新しく立ち上げることもできます。