27
入門 Satoshi Takami @tikemin 1

Node js 入門

Embed Size (px)

DESCRIPTION

勉強会で発表した資料。

Citation preview

Page 1: Node js 入門

入門Satoshi Takami

@tikemin

1

Page 2: Node js 入門

Agenda

■ Hello Node.js

■ Node.jsを使ったWebサーバ構築【演習】

■ Node.jsとMySQLとの連携【演習】

■ Node.jsを使ったWebアプリケーション開発【演習】

■ Node.jsの開発をより便利に

2

Page 3: Node js 入門

はじめに

■ この資料はNode.jsに上級者向けの資料ではありません

■ Node.jsという言葉は知ってるけど、詳しい事はよく知らない初心者向けです

■ この資料を見てNode.jsが完璧に出来るようになるような魔法の資料ではありません

■ 間違いや誤解している点があると思うので指摘して頂ければと思います

3

Page 4: Node js 入門

Hello Node.js

4

Page 5: Node js 入門

Node.jsとは?

■ 一言でいうと

□ C10K問題

□ イベントループ

□ ノンブロッキングI/O

□ Google V8エンジン

Server Side js

5

Page 6: Node js 入門

Node.js の歴史

■ 2009年頃に生まれる

□ 「Scalable Network」/「Easily Building Fast」

□ 規模が大きく、高速なネットワークを手軽に構築

Concept

Node’s goal is to make non-blocking network programmingaccessible to users who are not well-versed in server development.

(Ryan Dahl)

6

Page 7: Node js 入門

Node.js の歴史

■ Web2.0の登場と共に...

□ C(クライアント)10K(1万台)問題

□ 大規模なI/Oが発生する処理の需要が高まる

□ Apacheなどは1HTTPリクエストに1プロセス(つまりポート数の32767が限界)

□ マルチスレッドだとメモリの消費が激しい

C10K問題

7

Page 8: Node js 入門

Node.js の歴史

■ そこで...

□ 1つのスレッドでイベントを管理(シングルスレッド)

□ スレッドが増えるのを抑えることができる

□ ブロックが発生する(大容量のDB参照,ロジック自体の処理が長いetc.)

イベントループ

8

Page 9: Node js 入門

Node.js の歴史

□ ブロックの無いイベントループ(Ryan Dahl)

□ ノンブロッキングを強制する

□ Google V8 エンジンにより実現

ノンブロッキングI/O

9

Page 10: Node js 入門

つまり

10

Page 11: Node js 入門

Node.jsとは

■ C10K問題

■ イベントループ

■ Google V8エンジン搭載

■ ノンブロッキングI/O

■ Server Side js(Java Script)

11

Page 12: Node js 入門

Node.jsのアーキテクチャ

出典:http://www.iij.ad.jp/company/development/tech/activities/nodejs/

c-ares

OS

non-blocking I/O system cal l

z l ib

l ibev

Node Core Module V8

Node User Module

l ibeio

l ibuv

openssl

http-parser

epol l kqueue event port IOCPLinux BSD Solaris(SmartOS) Windows

12

Page 13: Node js 入門

演習

13

Page 14: Node js 入門

Node.jsを使ったWebサーバ構築【演習】

14

Page 16: Node js 入門

Node.jsとMySQLとの連携【演習】

16

Page 17: Node js 入門

Node.jsを使ったWebアプリケーション開発

【演習】

17

Page 18: Node js 入門

Node.jsのフレームワーク【演習】

18

Page 19: Node js 入門

Node.jsのFW

■ Express(http://expressjs.com/)

□ Sinatra ライクなWebアプリケーションFW

■ Salis.js(http://sailsjs.org/)

□ フルスタックなMVC FWhttp://nantokaworks.com/?p=1101

19

Page 20: Node js 入門

Node.jsとJava FW

DAO

DB

BuisnessLogic

JSP

Struts

Struts+

Spring

プレゼンテーション層 サービス層 永続化層

Bean

20

Page 21: Node js 入門

Expressのアーキテクチャ

出典:http://www.slideshare.net/dbloete/expressjs

Connect

Session ProviderSession Cookie

ErrorHandling

Helper

Connection

Jade(Template Engine)

+EJS

View Controller/Model

21

Page 23: Node js 入門

では、実際につかってみましょう

23

Page 24: Node js 入門

Node.jsの開発をより便利に

24

Page 25: Node js 入門

TypeScript

■ Micorosoftが提供するNode.js用のオブジェクト指向言語

□ jsには型が無い(動的型付け)

□ オブジェクト指向でないのでチーム開発に向かない

・静的型付け・オブジェクト指向・IDEによる開発サポート(VSで可能)・オープンソース

http://www.typescriptlang.org/

25

Page 26: Node js 入門

TypeScript Sample

■ 「Hello, World!!」「Type Script!!」

1 // モジュール定義 2 module TSSample{ 3 // クラスの定義 4 export class Sample{ 5 // コンストラクタ 6 constructor(private text : string){ 7 } 8 // メソッド 9 display(_InAddText : string) : void{10 console.log(this.text + ' ' + _InAddText);11 }12 }13 }14 var sample : TSSample.Sample = new TSTest.Sample('Hello, World !!!');15 sample.display('TypeScript!');

26

Page 27: Node js 入門

References

■ Nodeの歴史

□ http://d.hatena.ne.jp/badatmath/20101020/1287587240

■ Web2.0の先にあるもの

□ http://www.atmarkit.co.jp/news/analysis/200701/09/c10k.html

■ npm をproxy経由で使えるようにする設定by makits

□ http://p.tl/GQCK

■ Node.js開発者(Ryan Dahl)の話

□ http://www.publickey1.jp/blog/11/nodejs_node.html

□ http://www.publickey1.jp/blog/11/nodejsnodejs.html

27