Node.js のバージョン管理ツール Volta を使ってみる

2020.10.30

Node.js のバージョン管理ツールはいくつかありますが、最近リリースされた Volta という Rust 製のバージョン管理ツールが良さそうだったので使ってみました。今までは Node.js のバージョン管理ツールに nodebrew というツールを使っていましたが、Volta を見つけせっかくだし乗り換えて見ようと思ったのがきっかけです。

Volta とは

Volta は Rust で作られた OSS の Node.js のバージョン管理ツールです。Rust 製で静的バイナリとしてビルドされるため早いです。また、Volta を使えば、複数プロジェクトでバージョンが違う Node.js プロジェクトがあった場合に、手動で切り替えなくても、プロジェクトを移動することで自動的にバージョンが切り替わってくれます。

機能

特徴的な機能としては以下のようなものがあります。

  • プロジェクトごとのシームレスなバージョン切り替え
  • Windows およびすべての Unix シェルを含むクロスプラットフォームのサポート
  • パッケージマネージャーをサポート(npm, yarn)

Getting Started

まずは、基本的な使い方を見ていきます。

インストール

bash, zsh, fish の場合は、以下のコマンドでインストールすることができます。パスも自動的に通してくれます。

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

Windowsの場合は、インストーラーが用意されています

https://github.com/volta-cli/volta/releases/download/v0.9.2/volta-0.9.2-windows-x86_64.msi

Node.jsをインストールする

Node.js v12 LTS をインストールしてみます。

volta install node@12
node --version
v12.19.0

特定のバージョンもインストールできます

volta install node@14.13.1
node --version
v14.13.1

Volta の pin を使ってディレクトリごとに Node.js と パッケージマネージャ のバージョンを固定する

ここまでは、普通の Node.js のバージョン管理ツールですが、Volta の真価はこのディレクトリの pin 機能かなと思っています。この機能を使うことで、複数人でのチーム開発の際に Node.js とパッケージマネージャのバージョンを固定することができます。具体的には、プロジェクトの package.json に Node.js のバージョンを保存します。

ディレクトリごとにNode.jsとyarnのバージョンを固定する

まずは、2つのディレクトリを作成します。

$ mkdir volta-test-node-v12
$ mkdir volta-test-node-v14

作成した volta-test-node-v12 ディレクトリに移動して、 npm init して package.json を作成します。package.json が作成されたらそのディレクトリで、volta の pin コマンドを実行します。

$ cd volta-test-node-v12
$ npm init
$ volta pin node@12.19.0
success: pinned node@12.19.0 (with npm@6.14.8) in package.json
$ volta pin yarn@1.22.1
success: pinned yarn@1.22.1 in package.json

この例では、 volta-test-node-v12 ディレクトリの Node.js のバージョンを v12.19.0 に固定して、パッケージマネージャーの yarn のバージョンを 1.22.1 に固定したことになります。

package.json は以下のように更新されています。

{
  "name": "volta-test-node-v12",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "volta": {
    "node": "12.19.0",
    "yarn": "1.22.1"
  }
}

同じように volta-test-node-v14 ディレクトリも設定してみます。今度は、node のバージョンを v14.15.0、yarn のバージョンを 1.17.3 しました。

$ cd volta-test-node-v14
$ npm init
$ volta pin node@14.15.0
success: pinned node@14.15.0 (with npm@6.14.8) in package.json
$ volta pin yarn@1.17.3
success: pinned yarn@1.17.3 in package.json

これで、2つのディレクトリの Node.js のバージョンとパッケージマネージャーのバージョンを固定しました。この状態でまずは、 volta-test-node-v12 フォルダに移動してバージョンを確認してみます。

$ cd volta-test-node-v12
$ node --version
v12.19.0
$ yarn --version
1.22.1

指定したバージョンになっています。次に volta-test-node-v14 に移動してみます。

$ cd volta-test-node-v14
$ node --version
v14.15.0
$ yarn --version
1.17.3

ディレクトリの移動しかしていませんが、node のバージョンと yarn のバージョンが自動的に更新されているのがわかるかと思います。このように volta の pin 機能を使うことでディレクトリごとに バージョンを固定することができてとても便利です。

まとめ

以上、Volta の使い方についてまとめてみました。まだ、OSS として開発中で安定版にはなっていないですが、これからどんどん機能追加がなされていくと思います。興味がある方は機能フィードバックや OSS コントリビュートを行っても良いかなと思います。

参考

補足 Node.js バージョン管理ツールの種類

Node.js のバージョン管理ツールは他にも以下のようなのツールがあります。