非同期プログラミング
養成ギブスとしてのnode.js
niryuu<niryuu@gmail.com>

14年2月28日金曜日
自己紹介
• プログラミング初心者
• C→Python→PHP→node.js
• Android,iOS
• 地理情報システムの会社
• 皆さん、酒飲んでて下さい
14年2月28日金曜日
私と非同期プログラミング
•

PHPでWebアプリケーションフレームワークを使ってやっていた→非同
期とは無縁

•

iOS/Android:まあHTTP通信とかNSOperationQueueとかAsyncTaskとかいろ
いろ非同期プログラミングが登場する場面はあるが、イディオムに従っ
ていた感じ

•
•
•
•

14年2月28日金曜日

要はわかっていない
node.jsで非同期プログラミングをやっていくことで、教訓を得ていった
koaとかQとかがあるが、実際どうなっているのか
Webの話をするが、他のことでも本質的に変わらないと思う
ざっくりと記述すると
•
•
•
•
•

非同期処理をやる前の処理(Context A)
非同期処理(Context B)
やった後の処理(Context A)
Thread でも Event Loop でも変わらない
継続とかの議論は省く(とはいっても、コルーチン
などが事実上使われ始めているので、無視はでき
ないが)

14年2月28日金曜日
何で難いか
•

一旦元のコンテキストから切り離して、戻っ
てくるので、処理がリニアではない(非同期処
理を言い換えてるだけじゃん!)

•
•
•
14年2月28日金曜日

concurrentとかparallelとかその辺の議論は勘弁
切り離すのはOK
どう戻ってくるか
戻すのをマズると
どうやばいか
•
•

終わった/失敗した非同期処理、終わらない実行
非同期がないなら、処理が成功したらいけるしダメだったらた
だ死ぬのだが、そうでないのでデバッグが大変

•

node.jsの場合→プロセスが1つなので、死んだら終わり(実際の
ところ passenger とかで解決可能であるが、望ましくはない)

•
•
•
14年2月28日金曜日

clusterで4つ立ち上げたら、4つとも刺さって死んだ
→デバッグが大変
複数の非同期処理が混在してると、さらにわけわからなくなる
コールバックによる方法
• hidouki(arg1, arg2,.. ,cb)
• hidouki を呼ぶコンテキストと、cbが実
行されるコンテキストが同じ

• とてもわかりやすい
• しかし
14年2月28日金曜日
コールバック地獄
•
•
•

省略(みなさんお分かりでしょう)
要約すると「▶」
問題:コードが汚い

•

コードの汚さが記法によるため、リファクタリングする気
もなくなる

•
•

問題:cbにちゃんと戻さないとダメ

•
14年2月28日金曜日

解決策:ちゃんとcbの関数を定義して、それを呼びましょう

解決策:ちゃんとやる
Promise(Q)
•
•
•

もうコールバックスタイルの記法嫌だ

•
•
•

利点:記法がわかりやすい、スコープがわかりやすい、続けて書ける

Promiseでしょ
hidouki(args)
.then(a)
.then(b)
.fail(e)

変わらない点:ちゃんとresolve/rejectしましょう
変わらない点:長い処理を書くと、thenの中身が凄く長くなる

•
14年2月28日金曜日

解決策:ちゃんと関数を定義して、それを呼びましょう
koa - yield/coによる方法
•
•
•
•
•
•

期待の新星
var result = yield hidouki(args)
よっしゃ!これは良い!
利点:スコープがわかりやすい、非同期でないように書ける
例外処理を自然に使える
なぜ「記法がわかりやすい」が利点でないか?

•

非同期処理してる部分とそうでない部分の区別が一見してつきに
くい

•
14年2月28日金曜日

解決策:ちゃんと責務を分けましょう
yield/coによる方法
• 変わらない点
• ちゃんとreturnしましょう
• return しないなら、ちゃんと例外を吐
いて、catchしよう

• 例外!全然使ったことなかった!
14年2月28日金曜日
教訓
•

最適解はあっても、ちゃんとしたコードが書け
ないと仕方がない

•

ダラッダラ同じ所に処理を書くのをやめて、
処理を分割しよう

•

ちゃんとエラー処理とか例外とかをハンドリ
ングしよう

•
14年2月28日金曜日

当たり前のことを要求する養成ギブス
まとめ
• 養成されました
• node.js ありがとう
• おわり にしようと思ったが

14年2月28日金曜日
• きれいに書けるに越したことはない
• ユーザーインタフェースとかの実装も
簡潔に書けて、なおかつ検証も可能な
計算モデルを構築したくなった

• 博士課程に行きます
14年2月28日金曜日

More Related Content

PPTX
Azureでのプレゼン
PPTX
ウェブエンジニアとしての1年目を振り返って
PPTX
ググリワードを探す話
PDF
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
PDF
趣味プロダクトで楽しいコードライフワークを送る
PDF
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
PPTX
Bottle使ってPython学習一緒にはじめませんか?
PDF
Django で始める PyCharm 入門
Azureでのプレゼン
ウェブエンジニアとしての1年目を振り返って
ググリワードを探す話
あと一つプログラミング言語を
覚えたら死ぬ! 脳みそがパンクしそうな
あなたのための
nodeJSことはじめ
趣味プロダクトで楽しいコードライフワークを送る
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Bottle使ってPython学習一緒にはじめませんか?
Django で始める PyCharm 入門

What's hot (20)

PPTX
CakePHP を使ってよかったこと
PDF
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
PDF
Tropyをつくろう!
PPTX
Processing on web
PPTX
Windows 8のTipsを5分間でできるだけお話します
PDF
Fukuoka.php 第一回勉強会 LTスライド
PDF
プログラミング初心者の壁の越え方
PDF
2015/07/11 第7回G-Study発表資料-ITエンジニアのためのDTM入門
PPTX
非同期系統の基礎
PDF
Web frontend performance tuning
PDF
PHPMATSURI2011 LT大会
PDF
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
PDF
CLR/H第54回勉強会 ライトニングトーク
PDF
WordBench三重 2018年7月22日「Gutenbergで作るランディングページ」
PPTX
Webデザイナーのためのphp wordpress
PDF
「プログラミングGroovy」入門(公開用)
ODP
stapy#23 LT
PDF
解り方と教え方
PDF
簡単!Groovy入門
PPTX
俺と前回敗因から分析するバッドパターン
CakePHP を使ってよかったこと
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
Tropyをつくろう!
Processing on web
Windows 8のTipsを5分間でできるだけお話します
Fukuoka.php 第一回勉強会 LTスライド
プログラミング初心者の壁の越え方
2015/07/11 第7回G-Study発表資料-ITエンジニアのためのDTM入門
非同期系統の基礎
Web frontend performance tuning
PHPMATSURI2011 LT大会
(未発表) JavaScriptテスト勉強会@福岡#0の前に考えていたこと
CLR/H第54回勉強会 ライトニングトーク
WordBench三重 2018年7月22日「Gutenbergで作るランディングページ」
Webデザイナーのためのphp wordpress
「プログラミングGroovy」入門(公開用)
stapy#23 LT
解り方と教え方
簡単!Groovy入門
俺と前回敗因から分析するバッドパターン
Ad

Viewers also liked (19)

PDF
Deeplearning with node
PDF
Node.jsなら日曜プログラマーでも簡単に通信対戦ゲームが作れる
PDF
リアルタイムweb入門
PDF
Learn Http Requests & Responses for Test Engineer
PDF
Python を使ってカメリオを高速化した話
ODP
Wxasyncweb
PDF
非同期の時代がやってくる!
PDF
スクレイピングとPython
PPTX
Python札幌201406
PDF
いまさら恥ずかしくてAsyncをawaitした
PDF
これからの「async/await」の話をしよう
PDF
async/awaitダークサイド is 何
PDF
Pythonによる非同期プログラミング入門
PDF
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
PPTX
非同期処理の基礎
PDF
Test Yourself - テストを書くと何がどう変わるか
PDF
Gunosy go2015 06-02
PDF
組織にテストを書く文化を根付かせる戦略と戦術
PPTX
Python Project (3)
Deeplearning with node
Node.jsなら日曜プログラマーでも簡単に通信対戦ゲームが作れる
リアルタイムweb入門
Learn Http Requests & Responses for Test Engineer
Python を使ってカメリオを高速化した話
Wxasyncweb
非同期の時代がやってくる!
スクレイピングとPython
Python札幌201406
いまさら恥ずかしくてAsyncをawaitした
これからの「async/await」の話をしよう
async/awaitダークサイド is 何
Pythonによる非同期プログラミング入門
Pythonによるソーシャルデータ分析―わたしはこうやって修士号を取得しました―
非同期処理の基礎
Test Yourself - テストを書くと何がどう変わるか
Gunosy go2015 06-02
組織にテストを書く文化を根付かせる戦略と戦術
Python Project (3)
Ad

Similar to 非同期プログラミング養成ギブスとしてのNode.js (20)

PPTX
テストコードの DRY と DAMP
PDF
phpstudy_php_to_node
PPT
Pythonで始める競技プログラミング
PPTX
Ciecleci
PPTX
211120 他人の書いたPythonスクリプトをステップ実行で理解する
PDF
受託開発でAnsibleを導入した話
PDF
第45回PHP勉強会(里洋平)
PDF
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
PDF
LT: 今日帰ってすぐに始められるPython #nds45
PDF
Python勉強会 2015-12-02
PDF
TOPPERS as an IoT OS(kernel)
PDF
ひよこテスト駆動開発(PHPカンファレンス2014)
PDF
DBエンジニアに必要だったPythonのスキル
PPTX
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
PDF
20120927 findjob4 dev_ops
PDF
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
PDF
vscode pipenv docker
PPTX
ソフトウェア開発が好きだ
PDF
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
PDF
20230226ゆるあさ.pdf
テストコードの DRY と DAMP
phpstudy_php_to_node
Pythonで始める競技プログラミング
Ciecleci
211120 他人の書いたPythonスクリプトをステップ実行で理解する
受託開発でAnsibleを導入した話
第45回PHP勉強会(里洋平)
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
LT: 今日帰ってすぐに始められるPython #nds45
Python勉強会 2015-12-02
TOPPERS as an IoT OS(kernel)
ひよこテスト駆動開発(PHPカンファレンス2014)
DBエンジニアに必要だったPythonのスキル
あたしデザイナだけど"ナントカ.js"と仲良くできたよ
20120927 findjob4 dev_ops
エンジニア×デザイナー GitHubで変わるコミュニケーション(PHPカンファレンス2014 P4Dセッション)
vscode pipenv docker
ソフトウェア開発が好きだ
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
20230226ゆるあさ.pdf

More from Tajima Itsuro (17)

PDF
ドラクエ映画の問題点
PDF
カジュアル・デジタル・コレクション
PDF
新しい並行計算ライブラリ js-csp のご紹介
PDF
完全韻
PDF
Foss4g2013tokyo geothematics
PDF
PDF
Androidとオープンデータ ~国のデータを アプリに取り入れよう!~
PDF
ロケーションデータの取り扱い方法、わかりやすいビジュアライズの方法
PDF
Gisとは何か
PDF
オープンデータを活用したアプリケーション開発
PDF
Development - International Open Data Hackathon Tokyo - Chiyoda ward geolocat...
PDF
International Open Data Hackathon Tokyo - Chiyoda ward geolocation team
PDF
現実世界をハックせよ!
PDF
Open Data
KEY
Space Apps Challenge Ideathon Presentation
PPT
iModela で モコモコ立体を作る
PDF
Nottingam Gms
ドラクエ映画の問題点
カジュアル・デジタル・コレクション
新しい並行計算ライブラリ js-csp のご紹介
完全韻
Foss4g2013tokyo geothematics
Androidとオープンデータ ~国のデータを アプリに取り入れよう!~
ロケーションデータの取り扱い方法、わかりやすいビジュアライズの方法
Gisとは何か
オープンデータを活用したアプリケーション開発
Development - International Open Data Hackathon Tokyo - Chiyoda ward geolocat...
International Open Data Hackathon Tokyo - Chiyoda ward geolocation team
現実世界をハックせよ!
Open Data
Space Apps Challenge Ideathon Presentation
iModela で モコモコ立体を作る
Nottingam Gms

非同期プログラミング養成ギブスとしてのNode.js