はじめに
筆者は今まで Node.js のバージョン管理には 「 nvm 」 と 「 asdf 」 を利用して来ましたが、ここ最近のトレンドはどれだろう?と思い調べたところ 「 Volta 」 なるものが人気になりつつあるようです。
Volta の以下の点に魅力を感じたので、今回は Volta を導入し利用する流れを備忘録として残したいと思います。
-
package.json の独自フィールドにバージョン定義が記載される
.tool-versions
や.nvmrc
のように別ファイルに分かれず、package.json
ひとつで済むのでファイルがごちゃつかない。 -
プロジェクトごとに自動で Node.js のバージョンが切り替わる
package.json
の独自フィールドに応じて自動的に Node.js のバージョンが切り替わるため、切り替えにコマンドを打つ手間が省ける。また、npm
やyarn
のバージョン管理も可能。 -
更新が活発
2020/12 にリリースされた Volta は最終更新が 2023/01/25 となっており、 nvm (2022/12/24) や asdf (2023/01/15) と比べても盛んに更新されていることが見受けられるので、多少の安心感がある. -
Rust で書かれており、処理速度が比較的早い
筆者は特に他のツールと比較計測をしたわけではないので、数値的に語ることはできませんがどうやら早いらしい。
time
コマンドで簡易計測したところ node v16 のインストールには4.265s
、 node v14 のインストールには3.815s
かかりました。
Volta のインストール
-
ターミナルで
curl https://get.volta.sh | bash
を叩きインストールする。# デフォルトシェルが zsh でも以下のコマンドでOK % curl https://get.volta.sh | bash
-
インストールが完了したら一度ターミナルを再起動
# 1の実施後、以下が表示されたら一度ターミナルを再起動する > success: Setup complete. Open a new terminal to start using Volta!
-
volta -v
を叩き、バージョンが表示されたら成功% volta -v > 1.1.1
使い方
Node.js のインストール
volta install
コマンドで対象ツールのインストールを行います。
# LTSバージョンのインストール
% volta install node
> success: installed and set node@18.16.1 (with npm@9.5.1) as default
% node -v
> v18.16.1
# バージョン指定は node@バージョン で可能
% volta install node@16
> success: installed and set node@16.20.1 (with npm@8.19.4) as default
ちなみに、 volta install
コマンドでは 「Node.js の Fetch」と「ローカルマシンの Node.js を選択」の2つを実行しています。そのためコマンド実行時に対象のバージョンが Fetch 済みの場合は 「ローカルマシンの Node.js の選択」 のみが実行されます。
もし Fetch だけを実行したい場合は volta fetch
コマンドを使いましょう。
インストール済みバージョンの表示
volta list
コマンドでインストール済みのツールバージョンを確認できます。
npm や yarn などもインストールしている場合もこのコマンドで表示することができます。
% volta list all
> ⚡️ User toolchain:
> Node runtimes:
> v14.21.3
> v16.20.1
> v18.16.1 (default)
> Package managers:
> Yarn:
> v4.0.0-rc.48 (default)
> Packages:
プロジェクトの Node.js バージョンを固定
volta pin
コマンドでプロジェクトの Node バージョンやパッケージマネージャのバージョンを固定することができます。
# v18.16.1 でバージョンを固定する
% volta pin node@18.16.1
> success: pinned node@18.16.1 (with npm@9.5.1) in package.json
# パージョン確認
% node -v
> 18.16.1
+ "volta": {
+ "node": "18.16.1"
+ }
プロジェクトの pnpm のバージョンを固定
Volta では pnpm のサポートがまだ実験段階なため、利用する際は環境変数へフラグを立てる必要があります。
参考: https://docs.volta.sh/advanced/pnpm
# pnpm の実験的機能利用フラグをオンにする
export VOLTA_FEATURE_PNPM=1
# pnpm の最新版をインストール
volta pin pnpm@latest
> success: pinned pnpm@8.6.7 in package.json
# パージョン確認
% pnpm -v
> 8.6.7
"volta": {
"node": "18.16.1",
+ "pnpm": "8.6.7"
}
あとがき
記載した以外にも Volta では、 typescript などのツールチェーンを npm や yarn などでグローバルインストールした際に、「どのプロジェクトでどのバージョンをインストールしたか?」を覚えていてくれるため、グローバルインストール時のプロジェクト間の生合成を保ってくれたりもするようです。
pmpm 対応も含め Volta は今後も進化していきそうなので、引き続き追っていけたらと思います。