Node.jsのバージョン管理はVoltaに決定

2023/01/18に公開

Voltaとは

Rust製の2020年12月に正式版が公開された比較的新しいNode.jsバージョン管理ツールです。

Volta公式では「手間のかからないJavaScriptツールマネージャー」と説明されていて、以下の特徴が挙げられています。

⚡️速い
Rust製なのでどんなJavaScriptツールもとても速くインストールして動かせる

⚡️信頼できる
プロジェクトメンバー全員が同じ環境を作れることを保障してくれる

⚡️万人共通
パッケージマネジャーやOS違いでも共通のコマンドを使える

新しいツールなのにGithubのスター数は既に7.4kで人気があり、
最新リリースも2022年10月1日、その前が2022年6月2日とメンテナンスも頻繁にされている印象です。
https://github.com/volta-cli/volta

そもそもなぜ Node.js が必要なのか

Node.jsとはブラウザ上で動くJavaScriptをサーバーサイドでも動かすためのソフトウェアです。

開発するプロジェクトごとにNode.jsのバージョンが違うことがよくあり、バージョンが違うとうまく動かなかったりするので、その度にバージョンの切り替えを行わなければなりません。

Node.jsの特徴として、1つの環境で1つのバージョンしか使えず、プロジェクトをまたぐごとにインストールし直さなくてはいけないのは面倒です。

そこでNode.jsのバージョン管理ツールがあると、簡単にバージョンを切り替えられるようになります。

Node.jsのバージョン管理ツールはたくさんあります。
Nvm, nodenv, nodebrew, n, fem, volta ・・・・

それぞれの詳しい比較に関してはここでは割愛しますが、この中で

・windows, Mac両方の環境で使えるか
・使用しているバージョンをプロジェクトのコードに残すことができるか
・プロジェクトごとに自動でバージョンを変えてくれるか

といった点で一番優れていると感じた Volta に決定しました。

1️⃣Windows Mac両方の環境で使えるか

👍使えます

macOS、Windows両方の環境で使え、Linuxもサポートしています。
さらにM1以降のMacOSでもRosettaを介さずともそのまま使えます。

2️⃣使用しているバージョンをプロジェクトのコードに残せるか

👍残せます

Voltaは設定ファイルを作成しなくとも、プロジェクトで必ず作成されるpackage.json独自フィールドに追記されます。

他の管理ツールでは.node-version.nvmrcなどの設定ファイルをプロジェクトのルートディレクトリに置いて管理しているので、ファイルが一個減るのは嬉しいポイントだと思います。

また他のツールとは違いパッケージ管理ツールのnpmやyarnのバージョンも管理することができます。

3️⃣プロジェクトごとに自動でバージョンを変えてくれるか

👍変えてくれます

Voltaでバージョンが指定されているプロジェクトでは自動で指定のバージョンに切り替えてくれて、指定されていないプロジェクトでは自分のディフォルトのバージョンになります。

プロジェクトで指定されているNode.jsのバージョンが自分のツールにインストールされていなくても、npm installするタイミングで自動でダウンロードしてくれます。

既にインストールされているNode.jsバージョン管理ツールのアンインストール

Voltaをインストールする前に、Node.jsや他のNodeバージョン管理ツールが既にインストールされている場合はアンインストールから行います。

こちらの記事を参考にしました。

Voltaのインストール

MacOS含むUnix

Macのデフォルトshellzshですが、bash,zsh,fishは全て以下のコマンドでインストールできます。自動でパスも通してくれます。

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

バージョンの確認でバージョンが返されればインストール完了!

Terminal
volta -v
> 1.1.0

Homebrewでのインストールも可能とされていますが、おすすめしていないらしいので上のコマンドでそのままインストールしましょう。

Volataコマンドを使用する前に一旦ターミナルを再起動してください。

Windows

Windowsでのダウンロードは割愛させていただきます。
公式に載っているのでそこからダウンロードしてみてください。

Node.jsのインストール | volta install

以下のコマンドでNode.jsの長期サポート版がインストールされます。

Terminal
volta install node

パッケージ管理ツールも一緒にインストールできます。

Terminal
volta install npm

Node.jsとnpmのバージョン確認

Terminal
node -v
> v18.13.0 

npm -v
> 9.3.1

最新バージョンをインストールしたい時(基本は上のコマンドでインストールされる長期サポート版を推奨しています)

Terminal
volta install node@latest

特定のバージョンをインストールしたい時

Terminal
volta install node@14.15.5

Voltaでは、installというコマンドはそのバージョンをフェッチして使用するという意味で使用されます。
複数のバージョンをインストールした後に、デフォルトで使用したいバージョンがある場合は再度volta install を実行します。

今後のためにフェッチはしたいけど今は使用したくないという場合は以下のコマンドを使用します。

Terminal
volta fetch node@12

インストールしたバージョンを確認 | volta list

インストールしたNode.jsやパッケージマネジャーのバージョンを確認します。

volta list all

> ⚡️ User toolchain:

>   Node runtimes:
>       v12.22.12
>       v18.12.1
>       v18.13.0 (default)
      
>  Package manegers:
>       npm:
>          v9.3.1 (default)
	 
>  Packages: ...

volta listで各ツールのアクティブとなっているバージョンだけ一覧できます。

Node.jsのバージョンをプロジェクトに固定 | volta pin

Node.jsのバージョンをプロジェクトに固定するには、プロジェクトのディレクトリで@の後ろを任意のバージョンにして以下のコマンドを実行します。

Terminal
volta pin node@12.22

Npmなどのパッケージマネシャーの設定もしたい場合も同じく@の後ろを任意のバージョンに変えて以下コマンドを実行。

Terminal
volta pin npm@9.3.1

これをすることで、バージョンが指定されたディレクトリに戻ってくると自動的に固定されたバージョンに変更されます。

プロジェクトのpackage.jsonには次のように追記されます。

package.json
"volta": {
  "node": "12.22",
  "npm": "9.3.1"
}

package.jsonに書かれていると埋もれてしまってわかりづらいという方もいると思いますので、
運用する際にはREADMEに記載しておくと良いかと思います。

package.jsongit cloneなどで受け取った側は Volta がインストールされているとnodeコマンドを初回実行したタイミングでインストールが走ります。

インストールされたNode.jsなどのアンインストール | volta uninstall

と言いたいところですが、Voltaではまだ削除用のコマンドは使用できません。(既にissuesで挙げられてますが、修正する時間がないとのこと)
なので直接Voltaでダウンロードしたものが格納してあるディレクトリから指定のバージョンを削除しましょう。

Terminal
rm -rf ~/.volta/tools/image/node/12.22/

Voltaのアンインストール

MacOSを含むUnix

Voltaディレクトリを削除

Terminal
rm -rf ~/.volta

シェルプロフィールの中.zshrc .bashrcなどにあるVoltaが記載されている部分を削除。

~/.zshrc
#ここの2行を削除
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"

Discussion