Node.js で Web アプリ開発

      NSEG #15

     ながぬまたつみ
普通のサーバー
マルチプロセス(スレッド)サーバー
Node.js




          Evented I/O for V8 JavaScript

(V8 JavaScript を用いたイベント駆動I/Oの実現
                  )
イベント駆動I/Oとは
• なにか起こったらデータ入出力処理をする
  o なにか → イベント
  o 起こったら → 駆動
  o データ入出力処理をする → I/O
     ファイル
     ソケット
     データーベース
     ネットワーク
     標準入出力
     etc...
イベント駆動I/Oとは



        要するに
イベント駆動I/O



      ずくなし のこと。
イベント駆動I/O
というと人聞きが悪いので... 朝食の準備を考えてみよ
う

 •   パンをトースターにセット
 •   牛乳をグラスに入れ、電子レンジであたため
 •   フライパンに卵を入れてコンロへ
 •   まいん!を見る
 •   電子レンジがチーン → 牛乳を取り出す
 •   0655を見る
 •   目玉焼き完成 → お皿に盛る
 •   シャキーン!を見る
 •   トースト完了
     o いただきます
イベント駆動じゃないと...
(マルチスレッド)
3人で朝食の準備をする!

• Aさん:パンをトースターにセット
  o トースト完了を待つ!
• Bさん:牛乳をマグに入れ、電子レンジでスタート
  o あたため完了を待つ!
• Cさん:フライパンに卵を入れてコンロへ
  o 目玉焼き完了を待つ!
• それぞれできたところで、みなさんご一緒に
  o いただきます
  o キッチンに3人もいたら狭い...
マルチプロセス(スレッド)サーバー
イベント駆動サーバー
イベント駆動は何がいいのか

 • イベントが起こるまで何もしない
   o イベントが起こらなければリソースを消
     費しない

 • 処理が終わったらすぐリソースを開放
   o イベントを大量にさばける

 • 必要なイベントの処理のみ書けば良い
   o 処理が独立して見通しが良くなる
   o 自動テストしやすい
Node.js




          Evented I/O for V8 JavaScript

(V8 JavaScript を用いたイベント駆動I/Oの実現
                  )
なぜ JavaScript なのか

 • JavaScript は イベント駆動

  element.onclick = function() {
    alert("Hello, world!");
  }

 • JavaScript はシングルスレッド
    o イベント駆動は基本的にシングルスレッド
    o ライブラリもシングルスレッド
つまり Node.js とは
  • JavaScriptで書ける!
     o クライアントもサーバーも同じ言語
     o Webアプリ開発者なら使えるはず

  • ハイパフォーマンスなアプリが書ける
    !
    o 同期不要

  • HTML5 & NoSQLと相性がいい!
    o Web Socket
利用例
• リアルタイム チャット
• リアルタイムお絵かき
• Kinnectとつなげてゲーム
• 音声通話
  o HTML Audio API + Web Socket
• プレゼンツール
• WebOS
  o Developing JavaScript
    Services https://developer.palm.com/content/api/
    dev-guide/js-services/overview.html
いいことばかりでもないけど...

• イベント駆動はちょっと面倒
  o 無名関数のネスト...読みづらい
  o エラー処理が書きづらい

• マルチコア対応
  o シングルプロセス&シングルスレッドで性能が
    出る?
  o 対応中...

• まだまだ発展途上!
  o 2009/2 → 2011/4 v0.4.7
Node.js 開発環境

          もちろん

             vi
            node
         Webブラウザ

        でもいいのですが...
Webブラウザですべて開発!




           http://cloud9ide.com/
    https://github.com/ajaxorg/cloud9
Cloud9 IDE

• ブラウザ上でコーディング
• ブラウザ上で実行&確認
• ブラウザ上でデバッグ
Cloud9 IDE

             デモ
Node.js を拡張する
• モジュール
  o JavaScriptで書く
  o require('module');

• C(C++)モジュール
  oC
  o wscript
  o node-waf configure build
Node.js 関連プロダクト
• npm ... Node Package Manager
   o http://npmjs.org/
   o npm install <package>
   o package.json

• CoffeeScript ... better JavaScript
  o http://jashkenas.github.com/coffee-script/
  o コンパイルするとJavaScriptのコードが得られ
    る
  o Rails 3.1でもサポートされるらしい

• Jison ... JavaScript parser generator
   o http://zaach.github.com/jison/
今後の Node.js
• マルチプロセス対応
  o node自体が対応 ... node 起動オプションで
    指定
  o マルチプロセス対応モジュール
  o アプリケーションレベル(Web Workers)
おしまい




   ありがとうございました。

Node.js で Web アプリ開発