Node.js で Web アプリ開発

Preview:

DESCRIPTION

Node.jsの特徴と、開発環境についてまとめました。NSEG第15回勉強会(2011年5月21日)の発表資料。

Citation preview

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クライアントもサーバーも同じ言語oWeb アプリ開発者なら使えるはず

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

• HTML5 & NoSQL と相性がいい!oWeb 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 開発環境

もちろん

vinode

Web ブラウザ

でもいいのですが ...

Web ブラウザですべて開発!

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

Cloud9 IDE

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

Cloud9 IDE

デモ

Node.js を拡張する• モジュール

oJavaScript で書くo require('module');

• C ( C++ )モジュールoCowscriptonode-waf configure build

Node.js 関連プロダクト• npm ... Node Package Manager

o http://npmjs.org/o npm install <package>o package.json

• CoffeeScript ... better JavaScripto http://jashkenas.github.com/coffee-script/o コンパイルすると JavaScript のコードが得られ

るo Rails 3.1 でもサポートされるらしい

• Jison ... JavaScript parser generatoro  http://zaach.github.com/jison/

今後の Node.js

• マルチプロセス対応onode 自体が対応 ... node 起動オプションで

指定oマルチプロセス対応モジュールoアプリケーションレベル( Web Workers )

おしまい

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

Recommended