Edited at

fish シェルのための便利な node.js バージョンマネージャ fnm

fnmfish シェルのための node.js のバージョンマネージャです。複数のバージョンの node.js をインストールして、バージョンを簡単に切り替えられるようにしてくれます。fish シェルのプラグインマネージャ fisherman のプラグインとして提供されています。

この記事では、fnm の「インストール方法」と「使い方」について説明します。


TL; DR

# fisherman のインストール

> curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher

# fnm のインストール
> fisher fnm

# node.js LTS のインストール
> fnm lts
Downloading <http://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz>
######################################################################## 100.0%
> node -v
v8.10.0

# node.js 最新安定版のインストール
> fnm latest
Downloading <http://nodejs.org/dist/v9.8.0/node-v9.8.0-darwin-x64.tar.gz>
######################################################################## 100.0%
> node -v
v10.0.0


fisherman と fnm のインストール

fisherman と fnm を順番にインストールしていきます。fish シェルはすでにインストールされているものとします。


fisherman のインストール

スクリーンショット 2018-03-09 1.57.05.png

fisherman は、fish シェルにさまざまな機能を簡単に追加できるようにしてくれるプラグインマネージャです。以下の1行のコマンドでインストールできます。

> curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher


fnm のインストール

fisherman をインストールすると、プラグインを管理するための fisher コマンドが使えるようになります。プラグインをインストールするには、fisher <plugin-name> のコマンドを実行します。さっそく、fnm をインストールしましょう。

> fisher fnm

Installing 1 plugin/s
OK Fetch fnm github.com/fisherman/fnm
Installing 4 dependencies
OK Fetch menu github.com/fisherman/menu
OK Fetch get_file_age github.com/fisherman/get_file_age
OK Fetch await github.com/fisherman/await
OK Fetch last_job_id github.com/fisherman/last_job_id
Done in 6s 113ms


fnm の使い方

fnm の使い方は以下のとおりです。usermls の3つのサブコマンドで node.js のバージョンを管理します。

> fnm -h

Usage: fnm [COMMAND] [VERSION]

ここで COMMAND には次のいずれか1つが入ります。
use 指定したバージョンのノードを使います(省略可)
rm 指定したバージョンの node を削除する
ls 利用可能な node の全バージョンをリストする

そして VERSION には次のいずれか1つが入ります。
X.X.X バージョン番号
latest 最新の安定版の node リリース
lts 最新の LTS の node リリース

(ヘルプは実際には英語ですが、日本語に翻訳してみました。)


node.js のインストール


推奨版

推奨版 (LTS; Long Term Support; 長期サポート版) をインストールするには、バージョンとして lts というエイリアスを指定します。fnm は、その時点の最新版を自動的に選択してくれます。

> fnm lts

Downloading <http://nodejs.org/dist/v8.10.0/node-v8.10.0-darwin-x64.tar.gz>
0.0%
#################################### 50.0%
######################################################################## 100.0%
> node -v
v8.10.0

たった1つのコマンドで node が使えるようになりました。素晴らしいですね。


最新版

最新版をインストールするには、バージョンとして latest を指定します。

> fnm latest

...
> node -v
v10.0.0


特定のバージョンを指定する

エイリアスではなく、特定のバージョンを直接指定することもできます。

> fnm 7.0.0

Downloading <http://nodejs.org/dist/v7.0.0/node-v7.0.0-linux-x64.tar.gz>
...
> node -v
v7.0.0

また、バージョンの一部だけを指定すれば、該当するバージョンの最終版を取得してくれます。

> fnm 6

Downloading <http://nodejs.org/dist/v6.13.1/node-v6.13.1-linux-x64.tar.gz>
...
> node -v
v6.13.1


利用可能バージョンの一覧

利用可能なバージョンは、ls サブコマンドでリストアップできます。インストール済みのバージョンには - が、現在使用中のバージョンには が表示されます。

> fnm ls

0.10.0
0.10.1
0.10.2
0.10.3
...
8.9.0
8.9.1
8.9.2
8.9.3
8.9.4
• 8.10.0
9.0.0
9.1.0
9.2.0
...
9.11.1
9.11.2
- 10.0.0
10.1.0
10.2.0
10.2.1
10.3.0
10.4.0
10.4.1
10.5.0
10.6.0


特定のバージョンの削除

使用しなくなったり古くなったバージョンの node.js を削除するには、rm サブコマンドを使用します。

> fnm rm 6.13

>

複数のバージョンを指定することも可能です。

> fnm rm 7 lts

>


その他


グローバルインストールした Node パッケージのインストール場所

npm i -g <package-name>yarn global add <package-name> でグローバルにパッケージをインストールすると、

> npm i -g yarn

~/.config/fnm/bin/yarn -> ~/.config/fnm/lib/node_modules/yarn/bin/yarn.js
~/.config/fnm/bin/yarnpkg -> ~/.config/fnm/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.5.1
added 1 package in 0.507s
> yarn global add jest
yarn global v1.5.1
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 📃 Building fresh packages...
success Installed "jest@22.4.2" with binaries:
- jest
✨ Done in 16.71s.

パッケージは ~/.config/fnm/ 以下のディレクトリにインストールされます。

> tree ~/.config/fnm/ -L 2

~/.config/fnm/
├── bin
│   ├── node
│   ├── npm -> ../lib/node_modules/npm/bin/npm-cli.js
│   ├── npx -> ../lib/node_modules/npm/bin/npx-cli.js
│   ├── yarn -> ../lib/node_modules/yarn/bin/yarn.js
│   └── yarnpkg -> ../lib/node_modules/yarn/bin/yarn.js
├── etc
├── lib
│   └── node_modules
├── version
└── versions
└── 9.8.0

5 directories, 7 files


グローバルインストールしたパッケージの PATH について

fisherman で fnm をインストールすると、~/.config/fish/conf.d/fnm.fish が作られます。このスクリプトは fish シェル起動時に自動的に読み込まれ、~/.config/fnm/binPATH を通してくれるため、自分で PATH を設定する必要はありません。◻