SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
koa.js
2014.3.28
agenda
● node.jsのアプリケーションフレームワーク
● 非同期
● koa.js
https://github.com/koajs/koa
なんか化粧品っぽいロゴ?
https://www.shiseido.co.jp/
node.jsのアプリケーションフレームワーク
http://expressjs.com/
・アプリの雛形を形成
・view, middlewareの選択
・routing
viewの提供
middleware
routing
var express = require('express')
var app = express();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.static(__dirname +
'/public'));
app.use(express.json());
app.use(app.router);
});
// Routes
app.get('/', routes.index);
app.listen(3000);
node.jsのアプリケーションフレームワーク
現状はexpressが牛耳ってますが
これに取って代わる存在として
koa.jsが話題に。
node.jsのアプリケーションフレームワーク
http://business.nikkeibp.co.jp/article/person/20080729/166535/?
rt=nocnt
what’s new?
koa.jsは以下のような特徴を持ちます。
・generator/yieldを使ってmiddlewareを記述可能
 -> 非同期処理いい具合にします
・koa.jsは最小限の仕事をするmoduleの集まり
 -> フレームワークのシンプル化、柔軟性向上
・http通信のrequestやresponseをラップした、
コンテキストという概念を持つ
 -> リクエスト処理のシンプル化、エラーハンドリング
非同期地獄にサヨナラ!
非同期地獄
・node.jsでは頻繁に非同期地獄に遭遇します
var fs = require('fs');
// カレント ディレクトリーのファイル一覧を取得する
fs.readdir('.', function(err, files) {
// 先頭のファイルの中身を読み取る
fs.readFile(files[0], 'utf-8', function(err, data) {
// 読み取った結果を出力する
console.log(data);
});
});
app.use(function (req, res, next) {
var end = res.end();
res.end = function (…) {
// monkey patching …
// a post-filter
res.write(…);
end();
};
next();
});
koa.jsの場合
before after
var co = require('co');
var fs = require('fs');
co(function *() {
var files = yield co.wrap(fs.readdir)('.');
var data = yield co.wrap(fs.readFile)(files[0],
'utf-8');
console.log(data);
});
var fs = require('fs');
// カレント ディレクトリーのファイル一覧
を取得する
fs.readdir('.', function(err, files) {
// 先頭のファイルの中身を読み取る
fs.readFile(files[0], 'utf-8', function
(err, data) {
// 読み取った結果を出力する
console.log(data);
});
});
今日はこれを解説します。
・generator/yieldを使って 
middlewareを記述可能
・yieldって??
一言で言えば、関数を途中で止められる。
generator/ yield
function* N() {
console.log("start");
yield 1;
console.log("after 1");
yield 2;
console.log("after 2");
return 3;
}
generator/ yield
関数定義は、
「function」 ではなく、「function*」
で宣言
var g = N()
を実行すると、
関数が処理されるのではなく、関数を処
理するためのジェネレータが返る
function* N() {
console.log("start");
yield 1;
console.log("after 1");
yield 2;
console.log("after 2");
return 3;
}
generator/ yield
// generatorを生成
var g = N();
console.log(g.next());
// start
// { value: 1, done: false }
console.log(g.next());
// start
// { value: 2, done: false }
console.log(g.next());
// start
// { value: 3, done: true }
generator/ yield
つまり、こんな書き方ができます
https://github.com/koajs/koa/blob/master/docs/guide.md
co.js
generater、yieldを応用した、非同期処理を管理す
るモジュール
koa.jsの挙動の基本となるモジュール
var co = require('co');
var fs = require('fs');
co(function *() {
var files = yield co.wrap(fs.readdir)('.');
var data = yield co.wrap(fs.readFile)(files[0], 'utf-8');
console.log(data);
});
挙動例
「co(koa.js)は中で何をしているのか.」http://qiita.com/nashibao@github/items/5bab9744c26f74c1aa0d
・node.js 0.12以降で可能です。
 - DECIDEでは使ってないです。。
# asyncというモジュールでカバー
・起動方法がちょっと変わります。
- (before) node app.js
- (after) node --harmony app.js
制限事項
co.js
まとめ
generator,
yield
非同期処理
エラーハンドリング
コンテキスト制御

Weitere ähnliche Inhalte

Was ist angesagt?

3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular jsShin Adachi
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancementkamiyam .
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Toshiro Shimizu
 
Astah plugin 実行方法とSysML要求図のサンプル
Astah plugin 実行方法とSysML要求図のサンプルAstah plugin 実行方法とSysML要求図のサンプル
Astah plugin 実行方法とSysML要求図のサンプルYukio Saito
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点誠一郎 栗原
 
さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)Kazuhiro Yoshimoto
 

Was ist angesagt? (11)

Study Intro Backbone
Study Intro BackboneStudy Intro Backbone
Study Intro Backbone
 
3分でわかるangular js
3分でわかるangular js3分でわかるangular js
3分でわかるangular js
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancement
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
 
Astah plugin 実行方法とSysML要求図のサンプル
Astah plugin 実行方法とSysML要求図のサンプルAstah plugin 実行方法とSysML要求図のサンプル
Astah plugin 実行方法とSysML要求図のサンプル
 
PhoneGap Introduction
PhoneGap IntroductionPhoneGap Introduction
PhoneGap Introduction
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点
 
さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)さわってみようReact.js、AngularJS(1系、2系)
さわってみようReact.js、AngularJS(1系、2系)
 
Vue.js入門
Vue.js入門Vue.js入門
Vue.js入門
 

Ähnlich wie Koa.js_エンジニア勉強会20140328

Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application FrameworkLearningTech
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみたYuki Takei
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」Shunsuke Watanabe
 
Node.js勉強会 Framework Koa
Node.js勉強会 Framework KoaNode.js勉強会 Framework Koa
Node.js勉強会 Framework Koakamiyam .
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみKazunari Hara
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験Toshio Ehara
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoHideo Harada
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + VuexKei Yagi
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころMasayuki Wakizaka
 
Scalaでプログラムを作りました
Scalaでプログラムを作りましたScalaでプログラムを作りました
Scalaでプログラムを作りましたTomoharu ASAMI
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 

Ähnlich wie Koa.js_エンジニア勉強会20140328 (20)

Express Web Application Framework
Express Web Application FrameworkExpress Web Application Framework
Express Web Application Framework
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」大阪Node学園八時限目 「expressで作るWebアプリ」
大阪Node学園八時限目 「expressで作るWebアプリ」
 
Node.js勉強会 Framework Koa
Node.js勉強会 Framework KoaNode.js勉強会 Framework Koa
Node.js勉強会 Framework Koa
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
 
Vue入門
Vue入門Vue入門
Vue入門
 
traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験traceur-compilerで ECMAScript6を体験
traceur-compilerで ECMAScript6を体験
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
Ext.direct
Ext.directExt.direct
Ext.direct
 
Map server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 HokkaidoMap server入門 - FOSS4G 2012 Hokkaido
Map server入門 - FOSS4G 2012 Hokkaido
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころ
 
Scalaでプログラムを作りました
Scalaでプログラムを作りましたScalaでプログラムを作りました
Scalaでプログラムを作りました
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 

Mehr von エンジニア勉強会 エスキュービズム

Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたエンジニア勉強会 エスキュービズム
 

Mehr von エンジニア勉強会 エスキュービズム (20)

エスキュービズム新技術発表資料
エスキュービズム新技術発表資料エスキュービズム新技術発表資料
エスキュービズム新技術発表資料
 
小売りにおけるAIの可能性
小売りにおけるAIの可能性小売りにおけるAIの可能性
小売りにおけるAIの可能性
 
React Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリングReact Redux Redux-Saga + サーバサイドレンダリング
React Redux Redux-Saga + サーバサイドレンダリング
 
Azure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみたAzure container service上でコンテナベースでオートスケールの検証をしてみた
Azure container service上でコンテナベースでオートスケールの検証をしてみた
 
はじめての品質
はじめての品質はじめての品質
はじめての品質
 
Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発Go言語によるWebアプリケーション開発
Go言語によるWebアプリケーション開発
 
機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow機械学習ライブラリ : TensorFlow
機械学習ライブラリ : TensorFlow
 
Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。Developer Summit 2016 参加してきました。
Developer Summit 2016 参加してきました。
 
ほんのりTDD
ほんのりTDDほんのりTDD
ほんのりTDD
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
IoTで何をやったか
 
2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)2016 新人研修 基本技術講座 (1)
2016 新人研修 基本技術講座 (1)
 
Dockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについてDockerを用いたマイクロサービスについて
Dockerを用いたマイクロサービスについて
 
VRのコンテンツ
VRのコンテンツVRのコンテンツ
VRのコンテンツ
 
Azureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについてAzureで動いている機械学習のいろいろについて
Azureで動いている機械学習のいろいろについて
 
レイアウトについて
レイアウトについてレイアウトについて
レイアウトについて
 
アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)アルゴリズムとデータ構造(初歩)
アルゴリズムとデータ構造(初歩)
 
何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか何故エンジニアはテストをしないのか
何故エンジニアはテストをしないのか
 
IoTのIを考えてみる話
IoTのIを考えてみる話IoTのIを考えてみる話
IoTのIを考えてみる話
 
AzureのIaaSとかの話
AzureのIaaSとかの話AzureのIaaSとかの話
AzureのIaaSとかの話
 
【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ【エンジニア勉強会】品質ってなんなのさ
【エンジニア勉強会】品質ってなんなのさ
 

Koa.js_エンジニア勉強会20140328