nodebrewを使ってNode.jsの複数バージョンを簡単に使い分ける

頻繁に更新されるNode.js

Node.jsは、サーバーサイドで実行できるJavaScript環境ということで、短いコードで簡単に処理を記述できることなどから利用する人が増えていると思いますが、頻繁なバージョンアップと仕様変更により、以前動いていたコードが動かないといったことがあるかと思います。また、ソースからビルドすることで、使いたいバージョンを自分で指定することもできますが、ビルドにとても時間が掛かるのでできればバイナリをインストールしたいです。さらに、Macで何かと動きがおかしい。。。ということで、今回は、Node.jsの複数のバイナリバージョンを管理してくれるnodebrewというものを使ってみたいと思います。

今回のゴール

  • 複数バージョンを使いたい
  • バイナリをインストールしたい
  • Macで壊れない

nodebrewのインストール

インストールは簡単です。Mac OSX El Capitanの環境でやってみます。まずは既にインストールされているNode環境をアンインストールします。

$ node -v
v0.10.44
$ npm -v
3.8.8

$ sudo npm uninstall npm -g
$ lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom | while read i; do sudo rm /usr/local/${i}; done
$ brew uninstall node
$ sudo rm -rf ~/.npm

$ node
bash: /Users/satoshi/.nodebrew/current/bin/node: No such file or directory
$ npm
bash: /Users/satoshi/.nodebrew/current/bin/npm: No such file or directory

アンインストールと関連ファイルの削除が完了しましたので、インストールをします。

$ curl -L git.io/nodebrew | perl - setup
$ vi ~/.bash_profile
export PATH=$HOME/.nodebrew/current/bin:$PATH
source ~/.bash_profile

とっても簡単。次に選択できるnodeのバージョン一覧を表示します。

$ nodebrew ls-remote
v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6

v0.1.0    v0.1.1    v0.1.2    v0.1.3    v0.1.4    v0.1.5    v0.1.6    v0.1.7
v0.1.8    v0.1.9    v0.1.10   v0.1.11   v0.1.12   v0.1.13   v0.1.14   v0.1.15
v0.1.16   v0.1.17   v0.1.18   v0.1.19   v0.1.20   v0.1.21   v0.1.22   v0.1.23
v0.1.24   v0.1.25   v0.1.26   v0.1.27   v0.1.28   v0.1.29   v0.1.30   v0.1.31
v0.1.32   v0.1.33   v0.1.90   v0.1.91   v0.1.92   v0.1.93   v0.1.94   v0.1.95
v0.1.96   v0.1.97   v0.1.98   v0.1.99   v0.1.100  v0.1.101  v0.1.102  v0.1.103
v0.1.104

v0.2.0    v0.2.1    v0.2.2    v0.2.3    v0.2.4    v0.2.5    v0.2.6

v0.3.0    v0.3.1    v0.3.2    v0.3.3    v0.3.4    v0.3.5    v0.3.6    v0.3.7
v0.3.8

v0.4.0    v0.4.1    v0.4.2    v0.4.3    v0.4.4    v0.4.5    v0.4.6    v0.4.7
v0.4.8    v0.4.9    v0.4.10   v0.4.11   v0.4.12

v0.5.0    v0.5.1    v0.5.2    v0.5.3    v0.5.4    v0.5.5    v0.5.6    v0.5.7
v0.5.8    v0.5.9    v0.5.10

v0.6.0    v0.6.1    v0.6.2    v0.6.3    v0.6.4    v0.6.5    v0.6.6    v0.6.7
v0.6.8    v0.6.9    v0.6.10   v0.6.11   v0.6.12   v0.6.13   v0.6.14   v0.6.15
v0.6.16   v0.6.17   v0.6.18   v0.6.19   v0.6.20   v0.6.21

v0.7.0    v0.7.1    v0.7.2    v0.7.3    v0.7.4    v0.7.5    v0.7.6    v0.7.7
v0.7.8    v0.7.9    v0.7.10   v0.7.11   v0.7.12

v0.8.0    v0.8.1    v0.8.2    v0.8.3    v0.8.4    v0.8.5    v0.8.6    v0.8.7
v0.8.8    v0.8.9    v0.8.10   v0.8.11   v0.8.12   v0.8.13   v0.8.14   v0.8.15
v0.8.16   v0.8.17   v0.8.18   v0.8.19   v0.8.20   v0.8.21   v0.8.22   v0.8.23
v0.8.24   v0.8.25   v0.8.26   v0.8.27   v0.8.28

v0.9.0    v0.9.1    v0.9.2    v0.9.3    v0.9.4    v0.9.5    v0.9.6    v0.9.7
v0.9.8    v0.9.9    v0.9.10   v0.9.11   v0.9.12

v0.10.0   v0.10.1   v0.10.2   v0.10.3   v0.10.4   v0.10.5   v0.10.6   v0.10.7
v0.10.8   v0.10.9   v0.10.10  v0.10.11  v0.10.12  v0.10.13  v0.10.14  v0.10.15
v0.10.16  v0.10.17  v0.10.18  v0.10.19  v0.10.20  v0.10.21  v0.10.22  v0.10.23
v0.10.24  v0.10.25  v0.10.26  v0.10.27  v0.10.28  v0.10.29  v0.10.30  v0.10.31
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.10.41  v0.10.42  v0.10.43  v0.10.44

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
v0.12.8   v0.12.9   v0.12.10  v0.12.11  v0.12.12  v0.12.13

v4.0.0    v4.1.0    v4.1.1    v4.1.2    v4.2.0    v4.2.1    v4.2.2    v4.2.3
v4.2.4    v4.2.5    v4.2.6    v4.3.0    v4.3.1    v4.3.2    v4.4.0    v4.4.1
v4.4.2    v4.4.3    v4.4.4

v5.0.0    v5.1.0    v5.1.1    v5.2.0    v5.3.0    v5.4.0    v5.4.1    v5.5.0
v5.6.0    v5.7.0    v5.7.1    v5.8.0    v5.9.0    v5.9.1    v5.10.0   v5.10.1
v5.11.0   v5.11.1

v6.0.0    v6.1.0

io@v1.0.0 io@v1.0.1 io@v1.0.2 io@v1.0.3 io@v1.0.4 io@v1.1.0 io@v1.2.0 io@v1.3.0
io@v1.4.1 io@v1.4.2 io@v1.4.3 io@v1.5.0 io@v1.5.1 io@v1.6.0 io@v1.6.1 io@v1.6.2
io@v1.6.3 io@v1.6.4 io@v1.7.1 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 io@v3.3.0 io@v3.3.1

ステキです。

Node.jsとio.jsはマージされてNode.js v4系ができたようです。今後は、v0.x系はサポートされなくなるようですので、v4とかv6を利用するのが良いかと思います。

Node.jsのバージョンを指定して利用

一覧が表示できましたので、バージョンを指定してデフォルト設定にしたいと思います。

$ nodebrew install-binary v0.10.44
Installed successfully
$ nodebrew ls
v0.10.44
current: none
$ nodebrew use v0.10.44
use v0.10.44

動作を確認します。

$ node -v
v0.10.44
$ npm -v
2.15.0

npmを最新に上げてみます。

$ npm install -g npm
/Users/satoshi/.nodebrew/current/bin/npm -> /Users/satoshi/.nodebrew/current/lib/node_modules/npm/bin/npm-cli.js
npm@3.8.9 /Users/satoshi/.nodebrew/current/lib/node_modules/npm
$ npm -v
3.8.9

複数バージョンを使い分ける

nodebrewは複数のバイナリーをインストールして切り替えられます。

$ nodebrew install-binary v6.1.0
Installed successfully
$ nodebrew ls
v0.10.44
v6.1.0

current: v0.10.44

$ nodebrew use v6.1.0
use v6.1.0
$ node -v
v6.1.0

$ nodebrew alias default v0.10.44
default -> v0.10.44

まとめ

簡単にインストールできましたので、今後はもっと積極的にNode.jsの最新バージョンの動作確認をしてみたいですね。ちなみに、Amazon Linuxでも同様にインストールできました!

参考資料

hokaccha/nodebrew

nodebrewでローカルのNode.js環境を整える

今からでも間に合う!Node.js v4&v5は何が変わったか?

Node.js v6.0 (Current) がリリースされました。