Node.jsのバージョン管理はVoltaに決定
Voltaとは
Rust製の2020年12月に正式版が公開された比較的新しいNode.jsバージョン管理ツールです。
Volta公式では「手間のかからないJavaScriptツールマネージャー」と説明されていて、以下の特徴が挙げられています。
⚡️速い
Rust製なのでどんなJavaScriptツールもとても速くインストールして動かせる⚡️信頼できる
プロジェクトメンバー全員が同じ環境を作れることを保障してくれる⚡️万人共通
パッケージマネジャーやOS違いでも共通のコマンドを使える
新しいツールなのにGithubのスター数は既に7.4kで人気があり、
最新リリースも2022年10月1日、その前が2022年6月2日とメンテナンスも頻繁にされている印象です。
そもそもなぜ 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のデフォルトshell
はzsh
ですが、bash
,zsh
,fish
は全て以下のコマンドでインストールできます。自動でパスも通してくれます。
curl https://get.volta.sh | bash
バージョンの確認でバージョンが返されればインストール完了!
volta -v
> 1.1.0
Homebrewでのインストールも可能とされていますが、おすすめしていないらしいので上のコマンドでそのままインストールしましょう。
Volataコマンドを使用する前に一旦ターミナルを再起動してください。
Windows
Windowsでのダウンロードは割愛させていただきます。
公式に載っているのでそこからダウンロードしてみてください。
Node.jsのインストール | volta install
以下のコマンドでNode.jsの長期サポート版がインストールされます。
volta install node
パッケージ管理ツールも一緒にインストールできます。
volta install npm
Node.jsとnpmのバージョン確認
node -v
> v18.13.0
npm -v
> 9.3.1
最新バージョンをインストールしたい時(基本は上のコマンドでインストールされる長期サポート版を推奨しています)
volta install node@latest
特定のバージョンをインストールしたい時
volta install node@14.15.5
Voltaでは、install
というコマンドはそのバージョンをフェッチして使用するという意味で使用されます。
複数のバージョンをインストールした後に、デフォルトで使用したいバージョンがある場合は再度volta install
を実行します。
今後のためにフェッチはしたいけど今は使用したくないという場合は以下のコマンドを使用します。
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のバージョンをプロジェクトに固定するには、プロジェクトのディレクトリで@の後ろを任意のバージョンにして以下のコマンドを実行します。
volta pin node@12.22
Npmなどのパッケージマネシャーの設定もしたい場合も同じく@の後ろを任意のバージョンに変えて以下コマンドを実行。
volta pin npm@9.3.1
これをすることで、バージョンが指定されたディレクトリに戻ってくると自動的に固定されたバージョンに変更されます。
プロジェクトのpackage.json
には次のように追記されます。
"volta": {
"node": "12.22",
"npm": "9.3.1"
}
package.json
に書かれていると埋もれてしまってわかりづらいという方もいると思いますので、
運用する際にはREADMEに記載しておくと良いかと思います。
package.json
をgit clone
などで受け取った側は Volta がインストールされているとnodeコマンドを初回実行したタイミングでインストールが走ります。
インストールされたNode.jsなどのアンインストール | volta uninstall
と言いたいところですが、Voltaではまだ削除用のコマンドは使用できません。(既にissuesで挙げられてますが、修正する時間がないとのこと)
なので直接Voltaでダウンロードしたものが格納してあるディレクトリから指定のバージョンを削除しましょう。
rm -rf ~/.volta/tools/image/node/12.22/
Voltaのアンインストール
MacOSを含むUnix
Voltaディレクトリを削除
rm -rf ~/.volta
シェルプロフィールの中.zshrc
.bashrc
などにあるVoltaが記載されている部分を削除。
#ここの2行を削除
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
Discussion