25
Node.js Web ででででで NSEG #15 ででででででで

Node.js で Web アプリ開発

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Node.js で Web アプリ開発

Node.js で Web アプリ開発

NSEG #15

ながぬまたつみ

Page 2: Node.js で Web アプリ開発

普通のサーバー

Page 3: Node.js で Web アプリ開発

マルチプロセス(スレッド)サーバー

Page 4: Node.js で Web アプリ開発

Node.js

Evented I/O for V8 JavaScript

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

Page 5: Node.js で Web アプリ開発

イベント駆動 I/O とは• なにか起こったらデータ入出力処理をする

oなにか → イベントo起こったら → 駆動oデータ入出力処理をする → I/O

ファイルソケットデーターベースネットワーク標準入出力etc...

Page 6: Node.js で Web アプリ開発

イベント駆動 I/O とは

要するに

Page 7: Node.js で Web アプリ開発

イベント駆動 I/O

ずくなし のこと。

Page 8: Node.js で Web アプリ開発

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

• パンをトースターにセット• 牛乳をグラスに入れ、電子レンジであたため• フライパンに卵を入れてコンロへ• まいん!を見る• 電子レンジがチーン → 牛乳を取り出す• 0655を見る• 目玉焼き完成 → お皿に盛る• シャキーン!を見る• トースト完了

o いただきます

Page 9: Node.js で Web アプリ開発

イベント駆動じゃないと ...(マルチスレッド)3 人で朝食の準備をする!

• A さん:パンをトースターにセットoトースト完了を待つ!

• B さん:牛乳をマグに入れ、電子レンジでスタート oあたため完了を待つ!

• C さん:フライパンに卵を入れてコンロへo目玉焼き完了を待つ!

• それぞれできたところで、みなさんご一緒にo いただきますo キッチンに 3 人もいたら狭い ...

Page 10: Node.js で Web アプリ開発

マルチプロセス(スレッド)サーバー

Page 11: Node.js で Web アプリ開発

イベント駆動サーバー

Page 12: Node.js で Web アプリ開発

イベント駆動は何がいいのか

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

費しない

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

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

Page 13: Node.js で Web アプリ開発

Node.js

Evented I/O for V8 JavaScript

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

Page 14: Node.js で Web アプリ開発

なぜ JavaScript なのか

• JavaScript は イベント駆動

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

• JavaScript はシングルスレッドo イベント駆動は基本的にシングルスレッドo ライブラリもシングルスレッド

Page 15: Node.js で Web アプリ開発

つまり Node.js とは• JavaScript で書ける!

oクライアントもサーバーも同じ言語oWeb アプリ開発者なら使えるはず

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

• HTML5 & NoSQL と相性がいい!oWeb Socket

Page 16: Node.js で Web アプリ開発

利用例• リアルタイム チャット• リアルタイムお絵かき• Kinnect とつなげてゲーム• 音声通話

o HTML Audio API + Web Socket• プレゼンツール• WebOS

o Developing JavaScript Services https://developer.palm.com/content/api/dev-guide/js-services/overview.html

Page 17: Node.js で Web アプリ開発

いいことばかりでもないけど ...

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

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

出る?o 対応中 ...

• まだまだ発展途上!o 2009/2 → 2011/4 v0.4.7

Page 18: Node.js で Web アプリ開発

Node.js 開発環境

もちろん

vinode

Web ブラウザ

でもいいのですが ...

Page 19: Node.js で Web アプリ開発

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

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

Page 20: Node.js で Web アプリ開発

Cloud9 IDE

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

Page 21: Node.js で Web アプリ開発

Cloud9 IDE

デモ

Page 22: Node.js で Web アプリ開発

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

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

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

Page 23: Node.js で Web アプリ開発

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/

Page 24: Node.js で Web アプリ開発

今後の Node.js

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

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

Page 25: Node.js で Web アプリ開発

おしまい

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