fnm (Fast Node Manager) のインストール方法と使い方

:::note warn
2023年1月30日追記
fnm から Volta に移行しました。
移行方法、使い方については以下の記事をご確認ください。
:::

https://qiita.com/taqumo/items/c6082e4f106b5efa9d9f

---------------------------------------

これまで Windows で Node.js のバージョン管理は Nodist を利用していましたが、2019年3月30日のリリース以降更新されていません…:sleeping:

https://github.com/nullivex/nodist

そんな理由から別のバージョン管理ツールに乗り換えをすすめる記事をちらほら見かけるようになりました。

乗り換えなければと思いつつ、

* Node.js が利用できなくなると仕事にならない
* 種類が多くてどれを選んだらいいのかわからない
* インストールが大変そう

という理由からずっとスルーしていました…

しかし、以下記事と出会い、 fnm (Fast Node Manager) に乗り換えることにしました！

https://qiita.com/heppokofrontend/items/5c4cc738c5239f4afe02?0

fnm の詳細は以下をご覧ください。

https://github.com/Schniz/fnm

というわけで、 fnm のインストール方法を紹介します。

ちなみに Nodist は以下の手順でアンインストール:fire:

1. 「プログラムと機能」を開き、Nodist をアンインストール
2. Nodistフォルダ削除
  `C:\Program Files (x86)\Nodist`
3. npm-cacheフォルダ削除
  `C:\Users<ユーザー名>\AppData\Roaming\npm-cache`

## :apple: mac の場合

以下コマンドを実行するだけでインストール完了です:ok_hand:

```
curl -fsSL https://fnm.vercel.app/install | bash
```

## :computer: Windows の場合

以下からダウンロードし、`PATH` が通っているところに置くだけで利用できるようですが、設置場所がわからないので Chocolatey を利用してインストールしていきます。

https://github.com/Schniz/fnm/releases

### 1. Chocolatey のインストール

#### 1-1. コマンドをコピー

公式サイトにアクセスします。

https://chocolatey.org/install

Step 2 の「Choose How to Install Chocolatey」はデフォルトで Individual（個人）が選択されているのでそのまま。

「Now run the following command:」下のコマンドをコピーしておきます。

![chocolatey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492675/2edc38de-e649-76fa-d2db-dc5a3ae13c69.png)


#### 1-2 管理者権限で PowerShell を起動

1. PowerShell を検索
2. PowerShell を右クリック → 管理者として実行

#### 1-3. PowerShell でコマンドを実行

1-1. でコピーしたコマンドを貼り付けて実行すると最新版のインストールが始まります。

```
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
```

ログ中に `Chocolatey (choco.exe) is now ready.` と出てればインストール完了です。

#### 1-4. インストールの確認

正常にインストールできたか確認のため、以下コマンドで Chocolatey のバージョンを確認します。

```
choco -v
> 0.11.3
```

### 2. fnm をインストール

管理者権限で PowerShell を起動し、以下コマンドを実行。

```
choco install fnm -y
```

### 3. シェルセットアップ

利用するシェルに合わせて fnm の初期化処理を設定する必要があります。

コマンドプロンプトの設定はレジストリをいじる必要があったり面倒なので、PowerShell だけで利用することにしました。

#### 3-1. Windows PowerShell & PowerShell

プロファイルファイルを `Microsoft.PowerShell_profile.ps1` という名前で作成し、以下コマンドを記述します。

```:Microsoft.PowerShell_profile.ps1
fnm env --use-on-cd | Out-String | Invoke-Expression
```
作成したプロファイルファイルを以下に格納します。

:::note info
Microsoft.PowerShell_profile.ps1 の格納場所は PowerShell で `$profile` と入力すると確認できます。
すでにファイルがある場合はコマンドを追記してください。
:::

```
# Windows PowerShell
C:\Users<ユーザー名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
# PowerShell
C:\Users<ユーザー名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
```
### 4. インストールの確認

正常にインストールできたか確認します。

PowerShell で以下コマンドを実行し、バージョン番号が表示されればインストールは終了です:ok_hand:

```
fnm -V
> fnm 1.29.2
```

## :beginner: fnm の使い方

fnm のコマンドの一覧は以下ページで確認できます。

https://github.com/Schniz/fnm/blob/master/docs/commands.md

### インストールできるバージョンの確認

```
fnm list-remote
```

### インストール

```
fnm install {version}
```

### アンインストール

```
fnm uninstall {version}
```

### 利用するバージョンの指定

```
fnm use {version}

# デフォルトのバージョンを指定する場合
fnm default {version}
```

### 利用するバージョンの確認

```
fnm current

# 一覧で確認
fnm list
```

### 利用するバージョンの自動変更

プロジェクトのルートディレクトリに利用したい Node.js のバージョンを記述した `.node-version` ファイルを設置しておくと自動的にバージョンを変更してくれます。
:smile:＼スッゴイ便利／:laughing:

```:.node-version
v16.17.0
```
:::note info
指定されたバージョンがない場合は、以下のように fnm がインストールするか聞いてきます。
Can't find an installed Node version matching v14.18.3.
Do you want to install it? answer [y/n]:
:::

以下コマンドを実行すると現在利用中のバージョンを記述した `.node-version` ファイルが生成されます。

```
node -v > .node-version
```