Skip to content
Latchkey

Volta vs nvm: CIに適したNodeバージョンマネージャーは?

nvmはオンデマンドでNodeのバージョンを切り替えます。Voltaはツールチェーンをpackage.jsonに固定し、Rustで実装され、シェルフックなしで自動的に切り替えます。

nvmは長年使われているNodeバージョンマネージャーで、.nvmrcとシェル関数で駆動されます。VoltaはRustベースのツールチェーンマネージャーで、Node、npm、ツールをpackage.jsonに固定し、プロジェクトごとにバージョンを自動的に切り替えます。

Voltanvm
実装Rustバイナリシェル関数
バージョン切り替えプロジェクトごとに自動手動 / .nvmrc
pinの場所package.json(voltaフィールド).nvmrc
パッケージマネージャーを固定はい(npm/yarn/pnpm)Nodeのみ
速度速い良好

CIでは

VoltaはNodeとパッケージマネージャーをpackage.jsonに直接固定し、シェルフックなしで切り替えるため、最小限の設定でローカルとCIのバージョンを一致させられます。nvmはよりシンプルで広く普及しており、CIでは多くのチームがnvmを実行する代わりに.nvmrcを使ったsetup-nodeを利用します。Voltaの強みは、Nodeだけでなくツールチェーン全体をロックすることです。

固定してキャッシュする

voltaのpin(または.nvmrc)をコミットして、CIが正確なローカルバージョンを使うようにし、インストール済みツールチェーンをキャッシュしてください。インストールはCIのrunner上で実行されます。より高速なマネージドrunnerは、コールドなツールチェーンのセットアップを短縮します。

結論

自動切り替えと、package.jsonに固定されたツールチェーン(Node + パッケージマネージャー)が欲しいなら: Volta。シンプルで広く普及した標準(多くはsetup-node経由)が欲しいなら: nvm。いずれの場合も、再現可能なCIのためにpinをコミットしてください。

関連ガイド