【Node.js】Volta で Node.js のインストール/バージョン管理をする全手順 ＆ Volta の使い方

## 概要
PCに Node.js を導入する際に、**Volta** を利用した導入手順の備忘録。
また、Volta の使い方やよく使用するコマンドについても簡単に解説する。

## Volta とは
「[Volta（ボルタ）](https://volta.sh/)」は、次世代の Node.js のバージョン管理ツールです。
厳密には、Node バージョン管理ツールではなく **JS ツールマネージャ**（node 以外にも npm や yarn 等のバージョンも管理可能）
最新バージョンはもちろん、古いバージョンの Node.js をコマンド一発で簡単にインストールしたり、すぐにバージョンを切り替えたりできるツールです。

他の方の開発作業を手伝う場合などで、その開発に使用されている Node.js の指定バージョンが古い場合などに使用します。Node.js バージョン管理ツールがあれば、既にインストールされている最新バージョンを削除してから、古いバージョンを探して再度インストールするといった手間が無くなるためです。

Node.js のバージョン管理ツールは他にも存在し、nodenv, nodebrew 等が有名ですが、現在、個人的には Volta を使用した Node.js の導入/管理をお勧めします。

#### 特徴

- Rust 製で処理が早い。macOS/Windows/Linux など OS が違っても共通のコマンドを使える
- M1/M2 など Apple チップ Mac でも Rosetta を介さずに古いバージョンまで使用可能
- 比較的新しく、[GitHub](https://github.com/volta-cli/volta) のスターも多く、活発にメンテが行われている
- package.json に独自の値を記載することで、Node.js の自動バージョン切り替え/自動インストールにも対応

## Volta 導入手順
Windows の場合 [こちら](https://docs.volta.sh/guide/getting-started) の公式ページの **「Windows Installation」** からインストーラを取得して導入。

macOS/Linux の場合、Homebrew を利用せず<small>（※ 理由は後述）</small>、公式の通りに **cURL** でマシンにVolta をインストールする

```bash
# インストール
$ curl https://get.volta.sh | bash

# 結果
  Installing latest version of Volta (1.1.1)
    Checking for existing Volta installation
    Fetching archive for macOS, version 1.1.1
########################################################### 100.0%
    Creating directory layout
  Extracting Volta binaries and launchers
    Finished installation. Updating user profile settings.
Updating your Volta directory. This may take a few moments...
success: Setup complete. Open a new terminal to start using Volta!
```

この際、環境変数 `VOLTA_HOME` の追加とパスを通す設定は自動で行われる（`.zshrc` 等の各シェルの設定ファイルへの更新・反映は自動で完了する）

以下、動作確認で導入完了
```bash
# バージョン確認
$ volta -v

1.1.1
```

### Homebrew で Volta を導入しない理由

Homebrew を使用せずに、上記の通りにインストールした場合、volta は **ユーザディレクトリ** 内で動作する。
```bash
$ which volta

/Users/ユーザ名/.volta/bin/volta
```

しかし、`brew` コマンドで Homebrew 経由にすると以下の場所にインストールされる

```
/usr/local/bin
```

これだと、開発時などで Node.js を利用する際に、マシンの権限設定によっては、ユーザが `/usr/local/bin` へのアクセス権限がなくてエラーになる等の可能性があるので、`brew install` での導入は非推奨です。

## Node.js 導入手順
Volta を使って Node.js をインストールする方法

```bash
# Node.js インストール (最新の安定版を取得する場合)
$ volta install node

# Node.js インストール (@ でバージョン指定)
$ volta install node@10
```
→ Node.js のインストールだけでなく、有効化（デフォルトの切り替え）もしてくれる
→ バージョンはフル指定しなくても OK（上記の場合、`v10` の最新 ＝ `v10.24.1` がインストールされる）

インストール確認
```bash
# バージョン確認
$ node -v

v10.24.1
```

尚、**インストール済みバージョンへの切り替え時** も `volta install` を使う。

## コマンド一覧
その他、使いそうなコマンドを記載

```bash
# node のアンインストール
$ volta uninstall node@10.24.1

# マシンにダウンロードはするが有効化しない場合
$ volta fetch node@11

# アクティブな JS ツール一覧確認
$ volta list

# node だけ一覧表示
$ volta list node

# 導入した JS ツール一覧確認
$ volta list all

# プロジェクト内の node バージョン固定設定を pakcage.json に追記
$ volta pin node@10.24

# その他ヘルプでコマンド確認 (サブコマンドのヘルプも閲覧可能)
$ volta -h
$ volta help <SUBCOMMANDS>
```

## アンインストール

### Volta で導入した Node.js をアンインストールする場合
執筆時現在では、`volta uninstall node@x.x.x` が使用できないため、直接ファイルを削除する

```bash
# これで volta list の表示からは消える
rm -rf ~/.volta/tools/image/node/20.11.1

# こっちも消しておく
rm -rf ~/.volta/tools/inventory/node/node-v20.11.1-npm
rm -rf ~/.volta/tools/inventory/node/node-v20.11.1-darwin-x64.tar.gz
```

### Volta 自体をアンインストールする場合

まず、フォルダの削除
```bash
# 直接フォルダを削除
$ rm -rf ~/.volta
```

シェルの設定ファイルから以下の２行を削除
```
export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"
```

`source` コマンドでシェルの設定を反映させれば完了