Node.js
fish
fisherman

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

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

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

TL; DR

> curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
> fisher fnm
> 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
> fnm latest
Downloading <http://nodejs.org/dist/v9.8.0/node-v9.8.0-darwin-x64.tar.gz>
######################################################################## 100.0%
> node -v
v9.8.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 の使い方は以下のとおりです。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
v9.8.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.2.1
   9.3.0
   9.4.0
   9.5.0
   9.6.0
   9.6.1
   9.7.0
   9.7.1
 - 9.8.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

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