できない.dev

Volta

別名: volta pin / ボルタ

Node.js とパッケージマネージャのバージョンをプロジェクト単位で package.json に固定し、ディレクトリに入るだけで自動的に切り替える JavaScript ツールチェーンマネージャ。

公開: 更新:

定義

Volta は Node.js と npm・Yarn・pnpm のバージョンをプロジェクトごとに固定するツールチェーンマネージャである。package.json の volta フィールドに書かれたバージョンを読み、そのディレクトリで node や npm を実行した時点で該当バージョンへ差し替える。

詳細

volta pin node@22 を実行すると package.json に固定バージョンが書き込まれ、リポジトリを共有する全員が同じ Node で動くようになる。
切り替えは PATH 上に置かれた Volta 側の実行ファイルが担うため、シェルの起動スクリプトに手を入れる必要が無く、nvm use に当たる明示的な切り替えコマンドも要らない。
ここが nvm との最大の違いである。

Node 本体を ~/.volta 配下のユーザー領域に置くため、システム所有のディレクトリへ書き込もうとして起きる権限エラーの回避策としても使える。
グローバルに入れたコマンドラインツールは、インストール時点の Node に紐づけて保存される。

2025 年 11 月から Volta は保守されていない。公式の README(新しいタブで開く) は、今動いている機能は当面そのまま動くとしつつ、OS の更新などで起きる不具合には対応できないとして、mise(新しいタブで開く) への移行を勧めている。
最後のリリースは 2024 年 12 月の v2.0.2 である。

よくある誤解

  • nvm と併用できる: どちらも PATH の先頭に自分の実行ファイルを置く方式なので、両方入れると先に来た方が勝ち、意図しないバージョンで動くことがある。
  • engines を満たしてくれる: package.json の engines は要求の宣言に過ぎず、Volta の volta フィールドとは別物である。Node.js で engines のバージョン不一致(EBADENGINE)が出る は engines 側の話であり、Volta で固定したからといって engines の記述が変わるわけではない。

関連

Corepack は Yarn と pnpm のバージョン固定だけを担う Node.js 同梱の仕組みで、Node 本体は対象外である。
CI 側は actions/setup-node の node-version-file を使うと、ローカルの固定と揃えやすい。

この記事は役立ちましたか?