LoginSignup
0
0

はじめに

筆者は今まで Node.js のバージョン管理には 「 nvm 」 と 「 asdf 」 を利用して来ましたが、ここ最近のトレンドはどれだろう?と思い調べたところ 「 Volta 」 なるものが人気になりつつあるようです。

Volta の以下の点に魅力を感じたので、今回は Volta を導入し利用する流れを備忘録として残したいと思います。

  1. package.json の独自フィールドにバージョン定義が記載される
    .tool-versions.nvmrc のように別ファイルに分かれず、 package.json ひとつで済むのでファイルがごちゃつかない。

  2. プロジェクトごとに自動で Node.js のバージョンが切り替わる
    package.json の独自フィールドに応じて自動的に Node.js のバージョンが切り替わるため、切り替えにコマンドを打つ手間が省ける。また、 npmyarn のバージョン管理も可能。

  3. 更新が活発
    2020/12 にリリースされた Volta は最終更新が 2023/01/25 となっており、 nvm (2022/12/24) や asdf (2023/01/15) と比べても盛んに更新されていることが見受けられるので、多少の安心感がある.

  4. Rust で書かれており、処理速度が比較的早い
    筆者は特に他のツールと比較計測をしたわけではないので、数値的に語ることはできませんがどうやら早いらしい。
    time コマンドで簡易計測したところ node v16 のインストールには 4.265s 、 node v14 のインストールには 3.815s かかりました。

Volta のインストール

  1. ターミナルで curl https://get.volta.sh | bash を叩きインストールする。

    # デフォルトシェルが zsh でも以下のコマンドでOK
    % curl https://get.volta.sh | bash
    
  2. インストールが完了したら一度ターミナルを再起動

    # 1の実施後、以下が表示されたら一度ターミナルを再起動する
    > success: Setup complete. Open a new terminal to start using Volta!
    
  3. 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
package.json
+ "volta": {
+    "node": "18.16.1"
+  }

プロジェクトの pnpm のバージョンを固定

Volta では pnpm のサポートがまだ実験段階なため、利用する際は環境変数へフラグを立てる必要があります。
参考: https://docs.volta.sh/advanced/pnpm

.zshrc
# 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
package.json
 "volta": {
     "node": "18.16.1",
+    "pnpm": "8.6.7"
 }

あとがき

記載した以外にも Volta では、 typescript などのツールチェーンを npm や yarn などでグローバルインストールした際に、「どのプロジェクトでどのバージョンをインストールしたか?」を覚えていてくれるため、グローバルインストール時のプロジェクト間の生合成を保ってくれたりもするようです。

pmpm 対応も含め Volta は今後も進化していきそうなので、引き続き追っていけたらと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0