Skip to content
Latchkey

fnm vs nvm: CI向けのNodeバージョンマネージャー

fnmは高速なRust製のNodeバージョンマネージャー、nvmはほぼ誰もが使ってきた元祖のshellベースのものです。

どちらもNode.jsのバージョンをインストールして切り替え、プロジェクトのバージョンファイルを読みます。fnmは高速に起動し.node-versionまたは.nvmrcを読むコンパイル済みバイナリで、nvmは汎用的だがshellでのソースが遅いBashスクリプトです。

fnmnvm
実装RustバイナリBashスクリプト
shell起動のオーバーヘッド低い顕著(スクリプトをソースする)
バージョンファイル.node-version / .nvmrc.nvmrc
cd時の自動切り替えはい(shellフックあり)追加設定経由
普及度拡大中非常に広くドキュメント化

fnmが有利な場面

単一バイナリとして、fnmはCIにクリーンにインストールでき、shell起動のオーバーヘッドをほとんど追加しません - 多くのstepがshellを起動する場合に重要です。.node-versionと.nvmrcの両方を読むので、既存のリポジトリにうまく収まります。ディレクトリ変更時の自動切り替えはshellフックでスムーズです。

nvmが有利な場面

nvmは最もドキュメント化された選択肢で、ほとんどのガイドやオンボーディングが前提とするものです。起動速度が重要でないローカルの開発マシンでは、その遍在性と馴染みは実際の利点です。多くのチームはすでにnvmの操作が体に染みついています。

CIでは

GitHub Actionsでは、最もシンプルな道は通常、.nvmrcを読むactions/setup-nodeで、バージョンマネージャーは不要です。job途中でその場の切り替えが必要な場合にfnmまたはnvmを使います。パイプラインの速度にはfnmがより無駄のない選択肢です。

結論

速度とクリーンな単一バイナリのインストールにはfnmを選びます - 特にCIや高速なshellで。ローカルマシンでの最大限の馴染みにはnvmを選びます。ほとんどのパイプラインでは、バージョンファイルを使うsetup-nodeでどちらも不要になります。

関連ガイド