asdf vs nvm: CIに適したバージョンマネージャーは?
nvmはNodeのバージョンのみを管理します。asdfは1つのツールと単一の.tool-versionsファイルから多くの言語を管理します。
nvmは.nvmrcで駆動される、Nodeに特化したバージョンマネージャーです。asdfは多言語バージョンマネージャーで、プラグインを介してNode、Python、Rubyなどを扱い、1つの.tool-versionsファイルで固定します。
| asdf | nvm | |
|---|---|---|
| 管理する言語 | 多数(プラグイン) | Nodeのみ |
| pinファイル | .tool-versions | .nvmrc |
| 最適な用途 | 多言語リポジトリ | Nodeのみのリポジトリ |
| CIでの使用 | 言語ごとにプラグインをインストール | 多くはsetup-node経由 |
| セットアップの重さ | 重め(プラグイン) | 軽量 |
CIでは
Nodeのみのリポジトリでは、nvm(または.nvmrcを読むGitHubのsetup-node)がバージョンを固定する最も軽量な方法です。多言語リポジトリでは、asdfがすべての言語を1つの.tool-versionsファイルで固定するため、単一のツールでローカルとCIの間でNode、Python、Rubyのバージョンを一貫させられます。asdfはプラグインごとのセットアップが加わりますが、複数の別々のバージョンマネージャーを不要にします。
固定してキャッシュする
.tool-versionsまたは.nvmrcをコミットして、CIが正確なローカルバージョンを使うようにし、可能な限りインストール済みツールチェーンをキャッシュしてください。ツールチェーンのインストールはCIのrunner上で実行されます。より高速なマネージドrunnerは、複数言語をインストールする必要があるコールドセットアップを短縮します。
結論
最小限のセットアップを望むNodeのみのリポジトリ: nvm(または.nvmrcを使ったsetup-node)。すべての言語を1つのツールで扱いたい多言語リポジトリ: コミットした.tool-versionsを使うasdf。いずれの場合も、再現可能なCIのためにバージョンファイルを固定してください。
関連ガイド
Volta vs nvm: Which Node Version Manager for CI?Volta vs nvm for CI: automatic version switching, pinned package.json toolchain, speed, and reproducibility.…
mise vs asdf: Which Polyglot Version Manager for CI?mise vs asdf for CI: speed, asdf plugin compatibility, task running, and .tool-versions. Which multi-language…
pyenv vs asdf: Which Python Version Manager for CI?pyenv vs asdf for CI: Python-only vs multi-language version management, plugins, and pinning. Which keeps Pyt…