今更ながらNode.jsに触れてみた

# まずはじめに
ほんと最近ですが，Node.jsにお触りしました．
折角なので，頭の中で整理をつけるためにも書いていこうと思います．
お付き合いください．
#Node.jsとは
端的に言えば，サーバサイドで動作するJavaScriptの環境です．
大量のリクエストを高速で処理できる…そんなWebアプリの開発が可能です．
なぜに大量の処理を速くできるの？という話になりますが，
要因として，**シングルスレッド方式**や**ノンブロッキングI/O**を採用しているからだと言えますが，ひとまずここについては説明を省きます．

# 環境構築
環境構築って嫌ですよね．ハマったら最後，迷宮入り．
でもNode.jsはそんなことありません．とっても簡単なのです．
以下に示します．（Vagrant/CentOS6.4の環境下で行っています）
## NVM(Node Version Manager)のインストール
これは，Node.jsのバージョンの切り替えを簡単にできるツールです．
Node.jsは頻繁にバージョンが上がっていくので，まぁ必須です．
ただ，nodebrewのようなのもあるので，何を使うかはお任せします．

インストールするにはコマンドラインで以下の2つを実行してください．

    $ git clone https://github.com/creationix/nvm.git ~/.nvm
    $ source ~/.nvm/nvm.sh
その後，ヘルプが表示されるか確認してみましょう．
    
    $ nvm help
    Node Version Manager
     …
エラーが出なければ成功です．

## nvmでnode.jsをインストール
まず，nvm ls-remoteでインストールできるバージョンを確認してみましょう．

    $nvm ls-remote
    v0.1.14
    v0.1.15
    v0.1.16
    …
    v0.12.7
    v0.12.8
    v0.12.9
    …
このようにﾄﾞﾄﾞﾄﾞと表示されます．(2015/12/22現在)
この中からバージョンを選んでインストールしましょう．

    $ nvm install v0.12.9
終わったらば，確認を…

    $ node -v
    v0.12.9
バージョンが無事表示されればバッチリです．

また，NVMはその名の通り，バージョンの管理ができるので，いくらでもインストールできます．
自分がインストールしてきたバージョンを確認したい場合は，
 
    $ nvm ls
で確認できます．
その中で使用するバージョンを切り替えたい場合は

    $ nvm use v0.12.7
のように指定してあげれば簡単にできます．

## nvmの設定
Node.jsのデフォルトのバージョンを指定しましょう

    nvm alias default v0.12.9

次に，環境を再度立ち上げた時にnvmコマンドが実行できるよう，bash_profileへ追記しましょう．
（やらないとまた設定をし直すはめに…）

    vi ~/.bash_profile

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

環境構築は以上です．

# それでは定番の…
Hello World の時間です．
適当にhello.jsなど作って以下のソースコードを記述しましょう．

```hello.js
var http = require('http');↲
var server = http.createServer();
server.on('request', function(req, res) {↲
    res.writeHead(200, {'Content-Type': 'text/plain'});↲
    res.write('Hello World');↲
    res.end();↲
});↲
server.listen(2525,'192.168.33.10');↲
console.log("The server is now running.");↲
```

解説すると…
まず，node.jsが提供しているhttpモジュールを，オブジェクトとして読み込みます．
これは色々な場面で使うので，書くのが定番らしいです．

    var http = require('http');↲
そして，http.Serverのインスタンスを作ってサーバを作ります．

    var server = http.createServer();
次に，onでserverとイベントと紐付けします．
イベントの種類はrequestなので，アクセスする度に以下のコールバック関数が呼び出されます．
この場合，第二引数のres(response)が返ってくる値になるため，
`res.write`で'Hello World'を書き込んでください．
今回書き込みたい情報は，”Hello World”という文字列だけです，
なので，`writeHead`には，成功を意味する200のステータスコードに加え，
`Content-Type`は`text/plain`に設定しましょう．あと，最後の`end`は忘れずに…

    server.on('request', function(req, res) {↲
        res.writeHead(200, {'Content-Type': 'text/plain'});↲
        res.write('Hello World');↲
        res.end();↲
    });↲

サーバが待ち受けるポート番号(任意)とIPアドレスを指定してあげましょう
ちなみにVagrantで設定してるIPアドレスを入れています．

    server.listen(2525,'192.168.33.10');↲


だらりと説明してしまいましたが，こんな感じです．

早速，実行してみましょう．
基本的に `node [file_name]`で可能です．

    $node hello.js
    The server is now running.

コンソールログが出てきました．いいかんじ．
ではでは，ブラウザで [http://192.168.33.10:2525](http://192.168.33.10:2525) にアクセスしてみましょう！
そこには…

**Hello World**

出ているはずです．お疲れ様でした．

# 最後に言いたいこと
今回はNode.jsの環境構築からhelloworldまで載せました．
ちょっと物足りないかもしれません．
簡単なチャットアプリについても載せたかったのですが…
疲れたのでやめます（笑）
普段全く投稿しないので体力不足ですね…

またNode書いて投稿します．
見てくれてありがとうございました！

# 参考
- [いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318)
- [Node.js v0.11.11 マニュアル & ドキュメンテーション](http://nodejs.jp/nodejs.org_ja/api/http.html#http_event_request)
- [node.jsのバージョンアップ、バージョン切り替え](http://qiita.com/strsk/items/925644e124efcc964625)
- [はじめてのNode.js：Node.jsのイベントシステムを知る](https://osdn.jp/magazine/13/03/18/0939236)
- [基礎から学ぶNode.js](http://gihyo.jp/dev/serial/01/nodejs/0001)