Node Version Switcher (nvs)でらくらくバージョン切り替え

## はしめに
Visual Studio Code [v1.21](https://code.visualstudio.com/updates/v1_21)から、正式にNode Version Switcher (nvs)がサポートされるようになりました。個人的には、バージョン切り替えの需要があまりなかったのですが、最近旧バージョンを併用しなければならなくなったのでこの機会に触れてみました。

## Node Version Switcher

### Node Version Switcherとは
[Node Version Switcher](https://github.com/jasongin/nvs) (以下、nvs)とは、クロスプラットフォームで動作する、Node.jsのバージョン切り替えを行えるユーティリティです。nvs以外に必要な依存パッケージはなく、単独で動作します。Node.jsすら必要がないため、手軽に環境を構築して使い始めるられます。

### セットアップ
ここでは、Windows環境をターゲットにnvsのセットアップの方法を説明します(もちろん、Macなどにもインストールできますが、手元に環境がないので割愛します)。説明といっても、手順は簡単で、Github上にホストされているnvsの[リリースページ](https://github.com/jasongin/nvs/releases)から最新のインストーラー(nvs-X.X.X.msi)をダウンロードして、インストールするだけです。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/67429/752296f6-efc8-92af-4820-c9cf40eac481.png)

なお、nvsにはコマンドプロンプトから呼び出せない機能があるため、PowerShell 3.0以上が必要になります。PowerShell 3.0は、Windows 8以降であれば標準搭載されていますので、特に配慮することはありません。Windows 7の場合は、PowerShellをアップデートするために[更新プログラム](https://www.microsoft.com/en-us/download/details.aspx?id=34595)の適用が必要になります。

### nvsのコマンド
コマンド                         | 概要
-------------------------------- | -----------
`nvs help <command>`             | ヘルプ表示
`nvs install`                    | プロファイルの初期化
`nvs uninstall`                  | nvsをプロファイルと環境からアンインストール
`nvs --version`                  | nvsのバージョンを表示
`nvs add <version>`              | 指定したバージョンのNode.jsをインストール
`nvs rm <version>`               | 指定したバージョンのNode.jsをアンインストール
`nvs migrate <fromver> [tover]`  | グローバルモジュールの移行
`nvs upgrade [fromver]`          | メジャーバージョンにマイナーパッチの適用
`nvs use [version]`              | 現在のシェルで使用するバージョンの切り替え
`nvs auto [on/off]`              | 自動切換えのオン/of
`nvs run <ver> <js> [args...]`   | スクリプトの実行
`nvs exec <ver> <exe> [args...]` | `PATH`を使用してスクリプトを実行
`nvs which [version]`            | Node.jsのパスを表示
`nvs ls [filter]`                | ローカルにあるNode.jsのリストを表示
`nvs ls-remote [filter]`         | ダウンロード可能なNode.jsのリストを表示
`nvs link [version]`             | 既定で使用するNode.jsのバージョンを指定
`nvs unlink [version]`           | 既定で使用するNode.jsのバージョンを解除
`nvs alias [name] [value]`       | Node.jsのバージョンに名前をつける
`nvs remote [name] [value]`      | Node.jsの提供先のURIを指定

### コマンド実行例
#### Node.jsのダウンロード
ダウンロードは`add`オプションにバージョン指定をしておこないます。最新版やLTSバージョンでは、latest(最新版)やCarbon(8系統)などのエイリアスを指定してダウンロードすることもできます。

```powershell
nvs add latest  # 最新版のダウンロード 
nvs add 7.7.4   # 7.7.4のダウンロード
```

#### スクリプトの実行
`run`オプションにバージョンとファイル名を指定します。

```powershell
nvs run 7.7.4 main.js # Node.js 7.7.4でmain.jsを実行
```

毎回バージョンを指定するのが面倒な場合は、エイリアスで指定もできます。

```powershell
nvs alias 7.7.4 node7 # Node.js 7.7.4をnode7というエイリアスに指定
nvs run node7 main.js # Node.js 7.7.4でmain.jsを実行
```

#### パッケージのインストール
プロンプト上で`npm`コマンドをたたくだけです。

```powershell
npm install -g gulp # Gulpをグローバルインストール
```

なお、上記のコマンドを実行すると既定のバージョンのNode.jsにのみグローバルインストールされます。既定のバージョンを切り替える場合は、`link`オプションを使用します。

```powershell
nvs link latest # 既定を最新版に変更
npm install -g gulp # 最新版のNode.jsにGulpをグローバルインストール
```

繰り返しになりますが、上記のコマンドを実行すると**既定のバージョンのNode.jsにのみグローバルインストールされます**。そのほかのバージョンのNode.jsにもグローバルインストールする場合は、`migrate`オプションを用います。

```powershell
nvs link latest # 既定を最新版に変更
npm install -g gulp      # 最新版のNode.jsにGulpをグローバルインストール
nvs migrate latest 7.7.4 # 最新版のNode.jsにグローバルインストールされているパッケージを7.7.4にもインストール
```

## VS Codeから使用
VS Codeからは、`.vscode/launch.json`に下記の設定を埋め込むだけで、`F5`キーで実行できるようになります。実行時に使用するNode.jsのバージョンは`runtimeArgs`で指定しています。

```json
"configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${file}",
      "args": [ ],
      "runtimeArgs": [ "7.7.4" ],
      "windows": { "runtimeExecutable": "nvs.cmd" },
      "osx": { "runtimeExecutable": "nvs" },
      "linux": { "runtimeExecutable": "nvs" }
    }
]
```

## 最後に
nvsを使用すると簡単なコマンドでNode.jsのバージョンを切り替えることができます。複数バージョンのNode.jsを使って開発しているという方は、手軽に始められるのでぜひ使ってみてください。