nodebrewでNode.js( io.js )を管理する

最近Node.jsを使うことが多いので自分の復習も兼ねてのメモです。

# nodebrewとは
nodebrewとは、Node.js( io.js )のバージョンを管理するためのツールです。  
nodebrewを使うことで、任意のバージョンのNode.jsを簡単にインストールすることができたり、 
バージョンの切り替えをおこなうことができます。
Node.jsのバージョンを管理するためのツールとしては他にnvmとかnbenvがありますが今回はnodebrewを使ってみました。

# nodebrewのインストール
インストールは簡単で、黒い画面で以下のように1行入力するだけです。

```bash:shell
$ curl -L git.io/nodebrew | perl - setup

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 22630  100 22630    0     0   9868      0  0:00:02  0:00:02 --:--:--  9868
fetching nodebrew...
install nodebrew in $HOME/.nodebrew

========================================
Add path:

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

インストールが終わると、パスを追加してねと言っているのでシェルの設定ファイル( .zshrcとか.bashrcとか )に追加します。

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

追加が終わったら、設定ファイルを再読み込みします。

```bash:shell
$ source .bashrc
```

nodebrewを実行してhelp画面が表示されたらインストール成功です。

```bash:shell
$ nodebrew
nodebrew 0.8.1

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install a <version> (compile from source)
    nodebrew install-binary <version>     Download and install a <version> (binary file)
    nodebrew uninstall <version>          Uninstall a version
    nodebrew use <version>                Use <version>
    nodebrew list                         List installed versions
    nodebrew ls                           Alias for `list`
    nodebrew ls-remote                    List remote versions
    nodebrew ls-all                       List remote and installed versions
    nodebrew alias <key> <version>        Set alias to version
    nodebrew unalias <key>                Remove alias
    nodebrew clean <version> | all        Remove source file
    nodebrew selfupdate                   Update nodebrew
    nodebrew migrate-package <version>    Install global NPM packages contained in <version> to current version
    nodebrew exec <version> -- <command>  Execute <command> specified <version>

Example:
    # install from binary
    nodebrew install-binary v0.10.22

    # use a specific version number
    nodebrew use v0.10.22

    # io.js
    nodebrew install-binary io@v1.0.0
    nodebrew use io@v1.0.0
```

# Node.jsをインストールする
Node.jsをインストールするにはバイナリを直接インストールする方法と
ソースをコンパイルしてインストールする方法があります。
以下のコマンドは、Node.jsのv0.12.2をバイナリからインストールする例です。

```bash:shell
$ nodebrew install-binary v0.12.2

fetch: http://nodejs.org/dist/v0.12.2/node-v0.12.2-darwin-x64.tar.gz
######################################################################## 100.0%
Install successful
```

以下のようにソースからインストールすることも可能です。
( 結構時間かかります。。 )

```bash:shell
$ nodebrew install v0.12.2

...
...
```

ローカルにインストールされているバージョンを確認するには`ls`オプションを使用します。

```bash:shell
$ nodebrew ls
v0.12.2

current: none
```

また、リモートで管理されているNode.js( io.js )のバージョンを調べるには`ls-remote`オプションを使用します。バージョンを指定してインストールする場合は、ここからインストールしたいバージョンを探しましょう。io.jsを指定することもできます。


```bash:shell
$ nodebrew ls-remote

v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6
...
v0.12.0   v0.12.1   v0.12.2
...
io@v1.6.0 io@v1.6.1 io@v1.6.2 io@v1.6.3 io@v1.6.4

io@v1.7.1
```

今回はバージョンを直接指定してインストールしましたが、stableバージョンを指定してインストールしたり最新のバージョンを指定してインストールすることもできます。

```bash:shell
$ nodebrew install-binary stable    # stableバージョンをインストール
$ nodebrew install-binary latest    # 最新バージョンをインストール
$ nodebrew install-binary v0.12.x   # v0.12系の最新バージョンをインストール
$ nodebrew install-binary 0.12.2    # vを省略できる
$ nodebrew install-binary io@stable # io.jsのstableバージョンをインストール
$ nodebrew install-binary io@latest # io.jsの最新バージョンをインストール
```

# 使用するNode.js( io.js )のバージョンを指定する
ここまでで、ローカルにNode.jsをインストールすることができましたが、これだけではまだNode.jsを使用することができません。以下のように使用するNode.jsのバージョンを指定する必要があります。

```bash:shell
$ nodebrew ls # ローカルにインストールされているバージョンを確認

v0.12.2
io@v1.6.4
io@v1.7.1

current: none # バージョンが指定されていないためnoneになっている

$ nodebrew use v0.12.2 # 使用するバージョンを指定する

use v0.12.2
```

Node.jsが使用できるようになったか確認するために、以下のコマンドを実行してみます。

```bash:shell
$ node -e 'console.log("Hello Node.js");'

Hello Node.js
```

`Hello Node.js`と表示されていれば成功です！

# そのほかのオプション
nodebrewのそのほかのオプションをいくつか紹介します。

* `uninstall` 指定したバージョンをアンインストールする

```bash:shell
$ nodebrew uninstall io@v1.7.1

io@v1.7.1 uninstalled
```

* `selfupdate` nodebrewをアップデートする

```bash:shell
$ nodebrew selfupdate


fetching nodebrew...
Update successful
```

* `alias` バージョン名にエイリアスをはる

```bash:shell
$ nodebrew alias v12 0.12.2 # エイリアス名, バージョン

v12 -> v0.12.2

$ nodebrew use v12 # v12で指定できるようになる

use v0.12.2
```

* `unalias` エイリアスをはずす

```bash:shell
$ nodebrew unalias v12

remove v12
```

* `migrate-package` 指定したバージョンの`npm install -g`でインストールされたパッケージをcurrentにもインストールする

ためしてみる。とりあえずNode.jsのv0.12.2とv0.11.16をインストール

```bash:shell
$ nodebrew binary-install v0.12.2
$ nodebrew binary-install v0.11.16
$ nodebrew use v0.11.16
```

適当にexpressとgulpをインストール

```bash:shell
$ npm install -g express gulp
... # 長いから省略
$npm ls -g # 入ってるか確認
... # 長いから省略
```

使用するバージョンを変更し`migrate-package`してみる

```bash:shell
$ nodebrew use v0.12.2
$ nodebrew migrate-package v0.11.16
... # インストールがはじまった
```

gulpのインストールでこけましたがexpressはインストールされていました。
ものによっては失敗するものがあるみたいですが、このオプションを使用することで
グローバルにインストールされたパッケージの移行も簡単にできそうです。