直近の案件で初めてNode.jsを利用したので導入からHelloworld作成までをまとめたいと思います。
-
サーバーサイドのJavaScript実行環境
-
非同期処理を行えるためDBからの結果を待たずに処理できたりする。
-
シングルスレッドで動作する
Node.jsではI/O処理をブロックされないためデットロックが発生しない。よって多数の同時接続を処理することが可能となる。 -
Google Chrome用JavaScript実行エンジン(V8)で動作させると早い
-
イベントループ
リクエストやコールバックはイベントとして扱い処理が終わった際に次のイベントを処理するように動作する
#導入環境
- Mac OS 10.11
#環境構築
今回は、nodebrewという、node.jsのバージョン管理ツールを利用して導入する手順を説明したいと思います。
1.ターミナルを起動する。
2.nodeblewをインストールする
$ curl -L git.io/nodebrew | perl - setup
3.bashrc等の設定ファイルに以下を加えてパスを通してください.
$ vi ~/.bash_profile
$ export PATH=$HOME/.nodebrew/current/bin:$PATH
4.反映して、バージョン表示で問題なくパスが通っていることを確認する
$ source ~/.bash_profile
$ nodebrew -v
5.最新のnode.jsを確認する
$ nodebrew ls-remote
そしたら以下のように表示されます。
node.jsは2番目の数値が偶数なのが安定板、奇数なのが開発版のようです。
6.安定版をインストールする。
今回は、v0.12.7をインストールします。
- バージョンを指定する場合
$ nodebrew install-binary 0.12.7
- 最新の安定版をインストールする場合
$ nodebrew install stable
7.利用するnodeのバージョンを指定する。
$ nodebrew use v0.12.7
$ node -v
ただし、ターミナル再起動で毎回設定しないといけないので、bashscにいかのように記述しておくことで都度設定しなくても済みます。
vi ~/.bash_profile
export PATH=$HOME/.nodebrew/current/bin:$PATH
先ほど追加した上記行を以下に書き換えてください
if [[ -f ~/.nodebrew/nodebrew ]]; then
export PATH=$HOME/.nodebrew/current/bin:$PATH
nodebrew use v0.12.7
fi
#その他のコマンド
- インストールされているversionの一覧もcommandで確認する場合
$ nodebrew ls
#Node.jsの動作確認
##対話環境でhello worldしてみる
Nodeを起動し、簡単なコンソールログを埋め込んで実行してみましょう
コンソールでnodeコマンドを入力すると、REPL(Read eval print loop:対話的実行環境)が起動し、対話的にJavaScriptコードを記述して、その都度結果を確認することが可能のようです。便利ですね。
console.log自体は何も返さないので、評価結果はundefinedになります。
$ node # 対話環境を立ち上げる
> console.log("hello world");
hello world
undefined
> .help # 使えるコマンドを参照できます
> .exit # 対話環境から抜ける
#ファイルからの実行
1.任意のディレクトリに以下のjsファイルを配置しておく
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000);
console.log('Server running at http://localhost:3000/');
2.実行する
$ node /<path>/app.js
3ブラウザを起動してアクセスしてHellow Worldと表示されれば成功です。
http://localhost:3000/
#まとめ
・nodebrewを使うと簡単に導入できました。
・REPLを使うことで簡単なjavascriptをかけるので簡単な処理を書くのであれば即座に確認できるので便利ですね。
・node.jsは実行環境がブラウザでないため、WindowやDOMに関する命令は使えないようです。そりゃそうだ
#参考サイト
http://nodejs.org/
http://gihyo.jp/dev/serial/01/nodejs/0001
http://expressjs.com/ja/starter/hello-world.html