Node 系ツールのプロジェクト間のバージョン管理に Volta を使い始めてみた

2021/01/17に公開

プロジェクト間で必要とされる node.js のバージョンが違うことはままあり、そのために皆さん nvm や nodebrew などのツールを使っておられることだろうと思います。

今回それ系統で Volta というツールを知ったので紹介いたします。

Volta - The Hassle-Free JavaScript Tool Manager

Volta の特徴

  • セットアップが比較的簡単
  • Rust製で速いらしい
  • 実行する node のバージョンなどをプロジェクトのディレクトリに入るだけで自動で切り替えてくれる
  • npm や yarn でグローバルインストールした時も、どのディレクトリでインストールされたかを自動で記録するため、コマンドラインから直接コマンドを実行できつつもプロジェクト毎に違うバージョンを使うことができる
  • node だけでなく npm や yarn もプロジェクト毎に固定できる

使い方

インストール

curl https://get.volta.sh | bash

これを実行することによって volta コマンドが使えるようになると思います。

また、 node や npm のパスも、上記を実行した段階で勝手に通してくれています。(他のツールで node 実行できるようにしている場合はアンインストールしておかないとダメだと思いますが)

node のバージョンの追加

volta コマンドを使って行います
https://docs.volta.sh/reference/install

volta install node@12

node 以外のツールチェーンのインストール

例えば yarn

volta install yarn

ts をグローバルインストールしたりも普通の npm コマンドでできるのですが

npm install --global typescript

ここで volta のオシャレポイントはグローバルインストールしたもののバージョンもプロジェクト毎に自動で管理してくれるところです。

ドキュメントの解説そのまま借りると、例えば次のように違うプロジェクトでそれぞれグローバルインストールを行った際に、自動的にプロジェクトとバージョンの値を覚えておいてくれて、tsc コマンドを実行した時にそのバージョンで実行してくれるようになります。
https://docs.volta.sh/guide/understanding

cd /path/to/project-using-typescript-2.9.2
tsc --version # 2.9.2

cd /path/to/project-using-typescript-3.4.5
tsc --version # 3.4.5

グローバルインストールでコマンドをシンプルに実行できるようにしつつも、プロジェクト間の整合性を気にしなくていい機能になっています。

チームで設定を共有する - pin

自分だけがプロジェクトを切り替えると使うツールチェインのバージョンが切り替わる恩恵を受けてもアレなので、設定を共有する方法ですが、 volta pin というコマンドを使います。

volta pin node@12
volta pin yarn@1.14

これを実行すると、実行したディレクトリにある package.json に次のような volta の設定が追加されます。

"volta": {
  "node": "12.20.1",
  "yarn": "1.14.0"
}

これで他の人も同じ恩恵を享受することができるようになります。

シンプルだし動作速くていいなと思ったのでみなさんも是非試してみてください👍

Discussion