Block Rockin’ Codes

back with another one of those block rockin' codes

node.js の環境管理ツール nodebrew

intro

nodebrew は バージョンアップの速い node.js を、複数バージョン管理するためのツールです。
ruby の rvm や、 python の virtualenv、 perl の perlbrew などの node.js 版と思ってもらえれば良いです。


自分はこれまで nvm を使っていたんですが、今年初めあたりから全てのマシンで nodebrew に乗り換えました。


今日はこの nodebrew を紹介します。

既存の node.js の環境管理

既存の、ものとしては

  • nvm
  • nave
  • n
  • nodeenv

などがありました。
それぞれにあった問題については、過去に愚痴を書いています。


簡単にまとめると以下です。

nvm
bash向けに書かれてて、zshなどと相性が悪い場合がある。
nave
node へのパスを通した子shellを起動するタイプで、子shellというのが微妙なときが有る。
n
インストール先が /usr/local/n で、そこはいじりたくない。しかも n コマンドでプロセス起動。
nodeenv
python の virtualenv をコピーで、ちょっと過剰な感じ。


じゃあどんなのが欲しいかというと、

  • /usr とかいじらず、 home 以下あたりに入れてパスを通すだけ
  • sudo 無しで完結
  • 簡単にバージョンが切り替えられる
  • sh ではなく言語で書いてプラットフォーム(bash, zsh etc)に依存しない
  • できれば mac に最初から入ってるような言語で書いてある


まあ、「なら自分で作れよ」って話で、実際ちょっと考えてたんですが、
tumblr に記事を上げてからすぐ、 @ さんがまさしくそのままのものを作って公開されました。
hokaccha △!!

nodebrew書いてみた - hokaccha.hamalog v2


こちらで公開されています。

hokaccha/nodebrew · GitHub


特徴はこんな感じ

perl で書かれてる
Mac やサーバ OS に入ってる率高め
curlwgetワンライナーで入れる
入れるのに git とかいらない
パスを指定すれば nodebrew コマンドが使える
インストールに sudo がいらない、 .bashrc/.zshrc とかに書けばいい
.nodebrew 以下に node をインストール
sudo いらないしバージョンの切り替えもパスだけだし、 /usr とかいじらないし、消すのも .nodebrew だけで他を汚さない。


他にも、 ls-remote や clean、 selfupdate など、
欲しい一通りの機能がついています。
なんで無かったんだろう、というくらいコンパクトで使いやすいです。
初心者の方々でも、一番トラブル少なく使えそうかなと思ってます。。
(ただし windows は知りません。)

使い方

最後に簡単な使い方を紹介します。といってもほぼ README のままです。
(必要な perl のバージョンとかはよくわからない。。)

インストール

落として perl に渡すだけ。
ホームに .nodebew ができるだけなので sudo はいりません。

curl
$ curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup
wget
$ wget https://raw.github.com/hokaccha/nodebrew/master/nodebrew
$ perl nodebrew setup

パス

.nodebrew 内に node.js がインストールされるので、そこを PATH に足しておきます。
.zshrc や .bashrc などのファイルにこれを足せば良いだけです。

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

足したら読み直しなど。

$ source ~/.bashrc

node のインストール

あとは非常に直感的

$ nodebrew install latest # 最新
$ nodebrew install v0.6.x # v0.6
$ nodebrew install 0.6.0  # `v` 無しもおk

バージョンの切り替え

$ nodebrew use v0.6.0

これも .bashrc とかに書いておくと良いかも。
例えばこんな感じ。

# source nodebrew
if [[ -f ~/.nodebrew/nodebrew ]]; then
    export PATH=$HOME/.nodebrew/current/bin:$PATH
    nodebrew use v0.6.0
fi

その他のコマンド

一通り揃ってます。
ls-remote と selfupdate あたり便利。

$ nodebrew help                    Show this message
$ nodebrew install <version>       Download and install a <version>
$ nodebrew uninstall <version>     Uninstall a version
$ nodebrew use <version>           Modify PATH to use <version>
$ nodebrew list                    List installed versions
$ nodebrew ls                      Alias list
$ nodebrew ls-remote               List remote versions
$ nodebrew ls-all                  List remote and installed versions
$ nodebrew clean <version> | all   Remove source file
$ nodebrew selfupdate              Update nodebrew

あとがき

Windows となると話は変わりますが、Mac メインな自分としては申し分ないです。
issue とか、 perl 書ける人はパッチなんか送るときっと喜んでもらえるんじゃないでしょうか。
(自分は perl 書けない。。すいません。。)

最後に、 @ さん、素晴らしいツールありがとうございます、お疲れさまでした!