nvm vs fnm: より高速な Node バージョン切り替え
nvm はシェルで書かれた最も広く使われる Node バージョンマネージャ。fnm はシェル起動がより速い Rust 製の高速な代替です。
nvm はシェル関数と .nvmrc ファイルで Node バージョンを管理し、ほぼどこにでもインストールされていますが、そのシェルの source 読み込みがターミナル起動を遅くします。fnm は同じ仕事を Rust で行い、はるかに速く起動し、.nvmrc と .node-version をサポートし、cd 時にバージョンを切り替えます。どちらもプロジェクトごとに Node を固定し、fnm は nvm の普遍性と引き換えに明確に優れた速度を提供します。
| nvm | fnm | |
|---|---|---|
| 言語 | シェル | Rust |
| 速度 | シェル起動が遅い | 高速 |
| 設定 | .nvmrc | .nvmrc / .node-version |
| 自動切り替え | プラグイン / 手動 | cd 時 |
| 最適な用途 | 最大の普遍性 | 速度重視の開発者 |
CI では
nvm は CI で動作しますが、job ごとにシェルの source 読み込みのオーバーヘッドが加わります。fnm は単一のバイナリから Node をより速くインストール・切り替えます。どちらも .nvmrc を読むため移行は容易です。実際には多くのパイプラインは setup-node を使いますが、リポジトリの .nvmrc を尊重する必要がある job には fnm がより無駄のない選択肢です。
高速化
.nvmrc と lockfile をキーに、Node のインストールディレクトリとパッケージマネージャの cache を保存しましょう。どちらも CI runner 上で動作し、より高速なマネージド runner は Node のインストールと依存関係の手順を短縮します。
結論
最大のコミュニティを持ち最も普遍的に利用できるツールがほしいなら nvm。単一のバイナリから高速なシェル起動と素早いバージョン切り替えがほしいなら fnm。fnm は .nvmrc を読むため、nvm と並行して試すのは低リスクです。