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' と表示されるはず。
うまく行かなかった場合
私の場合はサンプルコードを実行したとき、ダイアログが出た
許可してターミナルに戻ってもう一回コマンドを叩いたらこんなエラー
$ 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/ にアクセスする。
無事表示されました!ヽ(=´▽`=)ノ
*1:Node.jsとnvmを初めてインストールするときのハマりポイントと対策 - mollifier delta blog : http://mollifier.hatenablog.com/entry/20110221/p1
*2:node.jsの導入 - Qiita : http://qiita.com/HamaTech/items/adc3b07565eb29b0ed9f