VoltaでNode.jsをバージョン管理する

n-ozawan

皆さん、こんにちは。技術開発グループのn-ozawanです。
台風の名前は、あらかじめ用意された140個のアジア名を順番に用いて命名されます。

本題です。
Node.jsもしくはnpmをインストールするときにバージョン管理ツールを使うことはよくあります。ただ、Node.jsのバージョン管理ツールって沢山あって何を使えばいいのか迷ってしまいます。いろいろと検討してみた結果、Voltaを使うようになったので、今回はVoltaを紹介したいと思います。

Volta

Voltaは割と最近にリリースされたNode.jsのバージョン管理ツールです。もちろん、Node.js以外にもnpmやyarnのバージョンも管理できます。同様にバージョン管理ツールと言えば、おそらく利用者が多いnvm、軽量に動作するfnm、Node.js以外もバージョン管理可能なasdfなどがあります。そんな中でVoltaを使い始めた理由は以下があります。

1.Windows、MacOS、Linuxの各OSに対応している
OSごとに使用するツールを使い分けるのは少し面倒です。出来れば1つのバージョン管理ツールに纏めたいです。

2.プロジェクトディレクトリに移動するだけで、自動的にバージョンを切り替えてくれる
package.jsonにNode.jsやnpmなどのバージョンを指定しておけば、特別なコマンド操作なしで自動的に切り替えてくれます。

インストール手順

インストールは以下のコマンドを実行するだけです。

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

Windowsの場合は、githubのリポジトリから最新のインストーラ(*.msi)をダウンロードしてインストールしてください。

チートシート

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

$ volta install node           # Node.jsの最新バージョンをインストール
$ volta install node@18.17.0   # Node.jsのv18.17.0をインストール
$ volta install npm            # npmの最新バージョンをインストール
$ volta install npm@9.8.1      # npmのv9.8.1をインストール

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

$ rm -rf ~/.volta/tools/image/node/18.17.0

Voltaのドキュメントには、volta uninstall というコマンドがあるのですが、今(2023-08-30)はまだ使えないようです(GitHubのIssue #327を参照)。なので、アンインストールするときはフォルダごと削除します。

Windowsの場合は%LOCALAPPDATA%\Volta\tools\image\node配下にある該当バージョンのフォルダを削除すればOKです。

使用中のバージョンを確認する

$ volta list          # 現在使用しているNode.jsやnpmなどのバージョンを表示する
$ volta list all      # インストールしたNode.jsやnpmなどのバージョンをすべて表示する
$ volta list node     # インストールしたNode.jsのバージョンを表示する
$ volta list node -c  # 現在使用しているNode.jsのバージョンを表示する

使用するバージョンを指定する

既にインストール済みのバージョンをvolta installで指定することでバージョンを切り替えることが出来ます。後述するようにpackage.jsonにバージョンを指定しておけば、特別な操作なしでバージョンを切り替えることが出来ます。

そのプロジェクトで使用するバージョンを指定しておく

package.jsonに以下のようにバージョンを指定しておくことで、特別な操作なしにバージョンを切り替えることが出来ます。

"volta": {
  "node": "18.17.1",
  "npm": "9.8.1"
}

例えば、上記をpackage.jsonに記述していた場合、package.jsonがあるフォルダに移動して、nodeもしくはnpmのコマンドを実行するだけで、指定したバージョンで実行してくれます。もし該当バージョンをまだインストールしていない場合は、自動的にインストールした後に実行します。

おわりに

冒頭でもお話しした通り、Node.jsのバージョン管理ツールは沢山あります。それぞれに一長一短があり、これが正解、と言えるツールはないかと思います。Windowsで開発しないのであれば、利用者が多く安定しているnvmがいいかと思います。また、既存のプロジェクトが.nvmrc.node-versionでバージョンを指定している場合はfnmなども良いでしょう。自分自身の開発スタイルに合わせて選んでみてください。

ではまた。

Recommendおすすめブログ