macoril's diary

へたれプログラマーのリハビリな日々

macにnode.jsを入れてみる

はじめに

いろんなサイトを参考に、MacBookにnode.jsを入れてサンプルコードを動かしてみた。 今回はとりあえずその手順。

単純にインストールするだけならとても簡単。 公式からLTSかStableをダウンロードしてきて実行するだけ。

ただ、実際には、node.jsだけではなくて、 node.jsのバージョン管理を楽にするツールを併せてインストールする人が多い様子。

コレをいれておくと複数バージョンのインストールや切り替えが簡単にできるので、 頻繁なバージョンアップや、バージョンによってモジュールが動かなかったりしたときに対応しやすいから。

mac向けのnode.jsのバージョン管理ツールとしては nvm と homebrew があるようなんだけど、 今回はnvmを選択。 過去のバージョンの話のようだけど

zsh の場合はエラーが出てしまう。実は nvm.sh は bash が前提になっていて、${BASH_ARGV[0]} ってとこが zsh で解釈できないからだ*1

って見かけたので、zshユーザーの人はhomebrewにしておいたほうがいいのかも。

node.js自体についてとか、nvmってなによとか、nvmとhomebrewの違いとかは、 後日ちゃんと調べてから、改めて記事にしようと思ってる。

手順

nvmをインストールする

git clone https://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh

nodeをインストールする

インストールするバージョンを選ぶ

まずはインストールするバージョンを選ばないといけない。

nvm ls-remote

上記のコマンドで現時点で利用可能なバージョンが確認できる。 2/9 19時時点で281個とちょっと多いので、 最近のバージョンしか興味ないって人は

nvm ls-remote | tail -n 20

とかするといい。

実際の執筆時点での実行結果はこんな感じ。

$ nvm ls-remote
        v0.1.14
        v0.1.15
        v0.1.16
        v0.1.17
〜〜(中略)〜〜
        v0.12.8
        v0.12.9
    iojs-v1.0.0
    iojs-v1.0.1
〜〜(中略)〜〜
    iojs-v3.3.0
    iojs-v3.3.1
         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
         v5.0.0
         v5.1.0
         v5.1.1
         v5.2.0
         v5.3.0
         v5.4.0
         v5.4.1
         v5.5.0

で、じゃあどのバージョンを選ぶべきなのか。

node.jsは2番目の数値が偶数なのが安定板、奇数なのが開発版*2

他のページでも奇数は開発版って記述をチラホラみかけたので、 今回はマイナーバージョンが偶数で一番新しいv5.4.1をチョイス。

…したんだけど、インストール済んでから見てみたら、公式TOPにv5.5.0がStableってあるんだよね。あとそもそもメジャーバージョンの4系と5系では大きな差があって、4系が長期サポートポリシーがあるけど5系にはそれがないらしい。んで「2番目の数値(マイナーバージョン)が偶数が安定版」って話が本当なのか疑わしく思うので、バージョンについては後でちゃんと調べて別記事にまとめる予定

インストールする

インストールするバージョンを決めたことだしいよいよインストールだ! といっても手間も時間もかからない

nvm install 5.4.1

この5.4.1のところを好みのバージョンに変えて実行するだけ。

実行結果はこんな感じ

$ nvm install 5.4.1
Downloading https://nodejs.org/dist/v5.4.1/node-v5.4.1-darwin-x64.tar.gz...
######################################################################## 100.0%
Now using node v5.4.1 (npm v3.3.12)

シェルの初期化ファイルに追記

シェルをログアウトするとnvmの設定はなくなってしまうので、 このままなにもしないと、ログインの度にnvmの設定を繰り返すことになる。

なので、~/.bash_profileとかにnvm関連の設定を書いておこう。

if [[ -s ~/.nvm/nvm.sh ]];
 then source ~/.nvm/nvm.sh
fi

複数のバージョンをインストールした場合は、nvm use "v5.4.1"とかも一緒に書いておくといい感じ

サンプルコードを実行してみよう

サンプルの用意と実行

サンプルコードはwikiから拝借。

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

これを test.js とでも名前をつけて保存して、

node test.js

を実行! うまく実行されていれば、 http://127.0.0.1:8000/ をアクセスすると 'Hello World' と表示されるはず。

うまく行かなかった場合

私の場合はサンプルコードを実行したとき、ダイアログが出た

f:id:macoril:20160209201525p:plain

許可してターミナルに戻ってもう一回コマンドを叩いたらこんなエラー

$ node example.js 
Server running at http://127.0.0.1:8000/
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8000
    at Object.exports._errnoException (util.js:856:11)
    at exports._exceptionWithHostPort (util.js:879:20)
    at Server._listen2 (net.js:1236:14)
    at listen (net.js:1272:10)
    at Server.listen (net.js:1368:5)
    at Object.<anonymous> (/Users/macoril/Develop/nodetest/example.js:6:4)
    at Module._compile (module.js:397:26)
    at Object.Module._extensions..js (module.js:404:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)

Error: listen EADDRINUSE :::8000 とあって、要は8000番ポートが使用中ということ。 恐らくダイアログが出たときの実行分が生きてるんでしょう。

lsof -i:8000 とか ps aux | grep node して確認。 今回はどっちもしてみる。 んでそのプロセスをkillしたら完了!

$ lsof -i:8124
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    75355 macoril   11u  IPv6 0xffffff800ca90600      0t0  TCP *:8124 (LISTEN)
$ ps aux | grep node
macoril        75607   0.0  0.0  2434892    548 s001  S+    2:00AM   0:00.01 grep --color node
macoril        75355   0.0  0.1  3057524   3024 s000  S+    1:54AM   0:00.19 node test.js
$ sudo kill -9 75355

改めて node example.js を実行して http://127.0.0.1:8000/ にアクセスする。 f:id:macoril:20160210020521p:plain

無事表示されました!ヽ(=´▽`=)ノ

*1:Node.jsとnvmを初めてインストールするときのハマりポイントと対策 - mollifier delta blog : http://mollifier.hatenablog.com/entry/20110221/p1

*2:node.jsの導入 - Qiita : http://qiita.com/HamaTech/items/adc3b07565eb29b0ed9f