fnm vs nvm: CI向けのNodeバージョンマネージャー
fnmは高速なRust製のNodeバージョンマネージャー、nvmはほぼ誰もが使ってきた元祖のshellベースのものです。
どちらもNode.jsのバージョンをインストールして切り替え、プロジェクトのバージョンファイルを読みます。fnmは高速に起動し.node-versionまたは.nvmrcを読むコンパイル済みバイナリで、nvmは汎用的だがshellでのソースが遅いBashスクリプトです。
| fnm | nvm | |
|---|---|---|
| 実装 | 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でどちらも不要になります。
関連ガイド
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…
How to Speed Up GitHub Actions: 9 High-Impact TacticsMake GitHub Actions faster: caching, parallelization, test splitting, Docker layer caching, slimmer images, a…
npm vs pnpm: Which Node Package Manager for CI?npm vs pnpm for CI: install speed, disk usage, lockfiles, and monorepo support. Which package manager keeps y…