node.jsのバージョン管理 - Nodebrewのインストールと基本操作

数多の類似記事があるから放置していたのですがアップデートしました。

今までの記事でたびたび書いておいたのですが、参照するためにもひとつの記事にまとまっていた方がよいなと思い、Nodebrew関連について書いておきます。

## Nodebrewのインストール方法について
~~Nodebrew自体も管理をラクにするためHomebrewでインストールしたいと思います。~~

curlでのインストール推奨です。

### Nodebrewのインストール

curlコマンドでインストールしたあとにパスを通すという2ステップです。
パスを通す際にさわるファイルがシェルの種類(bashとかzshとか)によって違いますので、その部分は適宜変更ください。
bashとかzshとかわからない人は以下のコマンドをターミナルで入力すればわかるはずです。

```
echo $SHELL
```

ぼくの場合は、`/usr/local/bin/zsh`と返ってくるのでzshです。
それではbrewでnodebrewをインストールしましょう。

```
curl -L git.io/nodebrew | perl - setup

vim ~/.zshrc # bashを使っている人は~/.bash_profileに適宜変更ください。
```

insertモードで、以下を貼り付けて、エスケープして保存して終了 `:wq`

```
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

設定ファイルを読み込み直します。別にターミナル再起動でも問題ないです。

```
source ~/.zshrc # bashを使っている人は~/.bash_profileに適宜変更ください。
```

動作確認をしてみます。

```
nodebrew help
```

## Nodebrewを使ってみる

Nodebrewでnode.jsあるいはio.jsをインストールする際は、インストールしてユーズという2ステップを踏みます。複数バージョン使い分けできるので、別のバージョンにというときは他のものをユーズって感じです。

### インストールする

インストールできる一覧を確認してみましょう。ちなみにnodebrewは安定版(stable)もしくは最新版(latest)を指名してインストールすることもできますので、特にインストールするバージョンはなんでもよいという方はそちらをどうぞ。

```
nodebrew ls-remote

### 中略 ###

v0.10.32  v0.10.33  v0.10.34  v0.10.35  v0.10.36  v0.10.37  v0.10.38  v0.10.39
v0.10.40

v0.11.0   v0.11.1   v0.11.2   v0.11.3   v0.11.4   v0.11.5   v0.11.6   v0.11.7
v0.11.8   v0.11.9   v0.11.10  v0.11.11  v0.11.12  v0.11.13  v0.11.14  v0.11.15
v0.11.16

v0.12.0   v0.12.1   v0.12.2   v0.12.3   v0.12.4   v0.12.5   v0.12.6   v0.12.7


### 中略 ###

io@v1.8.1 io@v1.8.2 io@v1.8.3 io@v1.8.4

io@v2.0.0 io@v2.0.1 io@v2.0.2

io@v2.1.0

io@v2.2.0 io@v2.2.1

io@v2.3.0 io@v2.3.1 io@v2.3.2 io@v2.3.3 io@v2.3.4

io@v2.4.0

io@v2.5.0

io@v3.0.0

io@v3.1.0

io@v3.2.0
```

このズラーっと並んだ一覧からインストールするのですが、インストールには`nodebrew install <version>`と`nodebrew install-binary <version>`のふたつのコマンドがあります。installだけの場合はソースから引っ張ってきて、install-binaryの場合はバイナリで落としてくると。前者はコンパイルがあるので割と遅いです。 **体感70倍近い時間がかかります。**
後者の方が公式でも推奨されているみたいですので、後者を使っていきます。

```
nodebrew install-binary io@v3.2.0 #io.js v3.2.0をインストール
```

これにてインストール完了です。
![Kobito.Wt3J0K.png](https://qiita-image-store.s3.amazonaws.com/0/58800/e4d0e7d1-0fc8-ea00-8744-4f3e8e48a42f.png "Kobito.Wt3J0K.png")


### 使用するバージョンの選択
あたりまえといえばあたりまえですが、Nodebrewを使うことで複数のバージョンのnode.jsがインストールされている状態なので、どのバージョンを使うかは指定しないとわかんないですよね。
まずは、ローカルにインストールされているバージョンを確認してみましょう。

```
nodebrew ls
v0.12.6
io@v1.8.3
io@v2.0.0
io@v2.4.0
io@v3.0.0
io@v3.2.0

current: io@v3.0.0 # 現在使用中のもの
```

あたらしくインストールしたio@v3.2.0を使うには`use`を使う

```
$ nodebrew use io@v3.2.0
```

確認してみましょう。

```
nodebrew ls
v0.12.6
io@v1.8.3
io@v2.0.0
io@v2.4.0
io@v3.0.0
io@v3.2.0

current: io@v3.2.0 # 変わった。
```

### 設定の引き継ぎ
これがあるからnodebrew使うようになりましたというくらい便利なコマンド(だと思ってる)。
上の例のように、バージョンを変えたあとには自分で入れたnpmモジュールたちは未インストールの状態です。
しかし、それを引き継ぐことができるコマンドが、`nodebrew migrate-package`です

```
nodebrew migrate-package <version>
```

これで、指定したバージョンから現在のバージョンに引き継ぎます。
実際にやってみたところこうなりました。

![Kobito.wL2eCU.png](https://qiita-image-store.s3.amazonaws.com/0/58800/66f956cd-2670-aa27-14a0-2b337b1cc159.png "Kobito.wL2eCU.png")

いつもgulpとyoはインストールにコケるので、何事もなくこの2つは`npm i -g gulp`とかいった感じでインストールしてます。

このコマンドは本当に便利で、nodeに脆弱性が見つかったときとか乗り換えるための障壁を低くしてくれます。

### ここまでのコマンドまとめ

ここまで使ったコマンドをまとめてみました。割とよく使うのばかりです。

|コマンド|説明|
|:--|:--|
|nodebrew help|helpコマンド|
|nodebrew ls-remote|インストールできるバージョンの一覧を表示|
|nodebrew install-binary \<version>|指定したバージョンのインストール|
|nodebrew ls|ローカルの一覧を表示|
|nodebrew use \<version>|使用するバージョンの選択|
|nodebrew migrate-package \<version>|設定引き継ぎ|


### その他の操作

|コマンド|説明|
|:--|:--|
|nodebrew list|lsと挙動はいっしょ|
|nodebrew ls-all|リモートとローカルのすべてのバージョンを表示|
|nodebrew install \<version>|指定したバージョンのインストール(遅い)|
|nodebrew uninstall \<version>|指定したバージョンのアンインストール|
|nodebrew clean \<version> \| all|指定したバージョンのソースの削除|
|nodebrew alias \<key> \<version>|指定したバージョンにkeyというエイリアスの作成|
|nodebrew unalias \<key> |エイリアスの解除|
|nodebrew exec \<version> -- \<command>|バージョンを指定してコマンドを実行|
|nodebrew selfupdate|nodebrew自体のアップデート|

nodebrewのバージョンもHomebrewでアップグレードしてるので、selfupdateはほとんど使わないです。
それとメモ程度に書いておきますが、cleanとuninstallは別物ですので、特定のバージョンを完全削除したい場合は、どちらも実行しましょう。
例を挙げるとこんな感じですかね。

![Kobito.kO77Mm.png](https://qiita-image-store.s3.amazonaws.com/0/58800/256ff1be-2a20-6d8a-786a-d601924e2e13.png "Kobito.kO77Mm.png")

![Kobito.O1VIEI.png](https://qiita-image-store.s3.amazonaws.com/0/58800/3c645a6e-2e08-fc4f-88e6-b35226419d36.png "Kobito.O1VIEI.png")

わかりますかね。`nodebrew list`ではv1.2.0はもう存在しません(uninstall済)が、srcを消し忘れていて残っています。これは単なるcleanのし忘れですので、この後にしておきましたと。


## 参考
[GitHub - nodebrew](https://github.com/hokaccha/nodebrew)

割とこの記事を書くためにドキュメントを読んだら、さすがにしっかり出来ていてこの記事の存在価値を疑いましたとさ。

前記事 - [どんなエディタでもEditorConfigを使ってコードの統一性を高める](http://qiita.com/naru0504/items/82f09881abaf3f4dc171/?next)