Nodeの複数バージョン管理のお供にnをどうぞ

by @dekokun on 2014/01/01 16:13

Tagged as: Node.js.

新年早々、去年全く使っていなかったNodeのブログを。

初めに

2年ほど前にNodeを使っていた時は、複数バージョン管理にはnpm及びnaveが二大巨頭だった感じがありますが、調べたらnというのがあったので使ってみました

(2014/01/02 追記 nは、半年ほど前に開発が止まっているようだし、ちょっとイマイチなのかな…)

雰囲気

以下Readmeのトップにある動画を見ればわかるのではないかと。この、対話的にバージョンを選択する感じ、素敵ですね。

作者はexpressやjadeを作っている安心のvisionmediaさん。

インストール

  • なんらかの方法によってNode.js及びnpmをインストールし、npm install n -g
    • これが、Nodeなしでインストール可能なnvmやnaveと違う点なのですね。
    • 右記質問がイカしている。Install Node.js to install n to install Node.js?
    • ただ、そもそもnpm install nでインストールされるのはシェルスクリプト1個だけであるため、別にnpm installを行うのが必須であるわけではありません。
    • リポジトリにはMakefile(これも、シェルスクリプトを/usr/local/下に展開しているだけというお手軽実装)も存在しますので、そっちでのインストールも可能

以上、終わりです。内部の実装が、/usr/local/下のファイルをごそっと置き換えるという驚きの実装であるため、PATHの設定も必要ありません。

上記のような/usr/local下ファイルをごそっと入れ替える(正確には/usr/local/n/versions/バージョン番号下ファイルの全てを/usr/local下にコピーする)という驚きの実装が嫌な場合は環境変数N_PREFIXに、インストールしたいディレクトリを指定し、${N_PREFIX}/bin下にPATHを通してあげた後に、nを使ってください

使い方

n latestn stablen 0.11.10のようにバージョンを指定して切り替えます。(もしくは、上記動画のように、nコマンドの後に対話的に選択。

対象のバージョンが存在しない場合は勝手にインストールしてくれます。

注意点

  • 上記記載しましたように、初期設定では/usr/local/n/versions/バージョン番号/*を全て/usr/local/下に展開するという強烈な作りをしているため、ちゃんとその挙動を理解して使いましょう。
    • 嫌な場合は、上記あるように環境変数N_PREFIXを設定して使いましょう
  • 上記のような動きをするため、1台のサーバ上で動くのは1台のバージョンのみです。ですので、rbenvのように、「1台のサーバでも複数のアプリケーションで別バージョン使えるよ!」というような売りはありません。

利点

  • PATHの切り替えなどではなく、実行ファイルが直接上書きされるという仕様であるため、nodeを使う側はnの存在を全く気にすることなく使うことができます(例えば、nvmなどを使っている時のように“cronで使うにはゴニョゴニョしなくちゃいけない”とか、そういうことを考える必要がありません。)
  • 新しいバージョンのインストールが素早くていいですね。バイナリを落としているだけなのか。
    • 昔、nvm installを行う際は、コンパイルを行うため結構な時間を覚悟しなくてはいけないものだったが。
    • 今調べたら、nvmも、オプションによってバイナリを直接落とすことができるようになっていますね。いいですね。

あとがき

サーバ上のバイナリを直接書き換えることによってバージョンを切り替えているため、1台のサーバ上では常に1つのバージョンを使うことしかできず、nvmの求めている用途とは少し異なるねと思いました。 開発環境ではnvmを使い、商用サーバでのバージョンアップにnを使うなどの使い分けが必要ですね。

先ほど、Dat – データ版Git。データを分散管理、解析という、Node製のソフトウェアのブログを読み、試してみようと思ったのですが、最近新調したMacにはNode環境が整っておらず、まずNode環境を整えることからスタートしたのでした。

Dat、面白いですね。

comments powered by Disqus