Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
これからのNode.jsの話をしよう
Search
Yosuke Furukawa
PRO
February 26, 2014
Programming
8.4k
16
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
これからのNode.jsの話をしよう
Yosuke Furukawa
PRO
February 26, 2014
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
240
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.3k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.8k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
350
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
520
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
3k
Other Decks in Programming
See All in Programming
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
150
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
600
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.7k
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
240
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
990
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
230
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
4.1k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
820
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
270
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
620
Performance Engineering for Everyone
elenatanasoiu
0
270
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
820
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
Writing Fast Ruby
sferik
630
63k
Documentation Writing (for coders)
carmenintech
77
5.4k
The Curse of the Amulet
leimatthew05
2
13k
RailsConf 2023
tenderlove
30
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
How STYLIGHT went responsive
nonsquared
100
6.2k
Transcript
͜Ε͔Βͷ/PEFKTͷ Λ͠Α͏ !ZPTVLF@GVSVLBXB
!ZPTVLF@GVSVLBXB ຊ/PEFKTϢʔβʔάϧʔϓ৽ද
!ZPTVLF@GVSVLBXB $VSSFOU.Z803,4 4VQQPSU%FWFMPQFST $SFBUJOH(BNFT $SFBUJOH'SBNFXPSLT
!ZPTVLF@GVSVLBXB $VSSFOUNZJOUFSFTUT 1FSGPSNBODF*NQSPWFNFOU 3FBMUJNF "OZPUIFSOFXUFDIT MJLF(P %PDLFS $MJFOUTJEF.7$ FUD
!ZPTVLF@GVSVLBXB $VSSFOU.ZGBWT 1FSGPSNBODF*NQSPWFNFOU 3FBMUJNF "OZPUIFSOFXUFDIT MJLF(P %PDLFS $MJFOUTJEF.7$ FUD 'PMMPXNF
ຊ
ຊ /PEFKTOFXT ؾʹͳΔ/PEFKTϥΠϒϥϦ ౦ژ/PEFֶԂͷࠓޙ
/PEFKTOFXT
/PEFKTOFXT
/PEFKTOFXT Ϧʔμʔ͕*[BBDT͔Β 5+'POUBJOFʹ
5+'POUBJOF͜Μͳਓɹ ʹDPSFUFBNʹKPJO $*UFTUϝΠϯʹ୲ 8BMNBSUͷϝϞϦϦʔΫΛൃݟ ͨ͠ΓͱϨΠϠʔʹڧ͍
5+'POUBJOF͜Μͳਓɹ ʹDPSFUFBNʹKPJO $*UFTUϝΠϯʹ୲ 8BMNBSUͷϝϞϦϦʔΫΛൃݟ ͨ͠ΓͱϨΠϠʔʹڧ͍ ౦ژ/PEFֶԂࡇ ʹݺͼ͍ͨ
/PEFKTOFXT
/PEFKTOFXT W͏͙͢Ͱ͢Ͷ
WͰ৽͘͠ͳΔ͜ͱ 4USFBN DMVTUFSSPVOESPCJO NVMUJQMFDPOUFYUJOWN TZODDIJME@QSPDFTT USBDJOHBQJ QFSGPSNBODFJNQSPWFNFOU FUD
WͰ৽͘͠ͳΔ͜ͱ 4USFBN DMVTUFSSPVOESPCJO NVMUJQMFDPOUFYUJOWN TZODDIJME@QSPDFTT USBDJOHBQJ QFSGPSNBODFJNQSPWFNFOU FUD ೦ͳ͕ΒWͰ&4σϑΥϧτʹͳΒͳ͍
WͰ৽͘͠ͳΔ͜ͱ ٞͷྲྀΕΛϒϩάʹհͯ͠ΔͷͰ͕࣌ؒ͋Εݟ ͍ͯͩ͘͞ɻ
WͰ৽͘͠ͳΔ͜ͱ 4USFBN DMVTUFSSPVOESPCJO NVMUJQMFDPOUFYUJOWN TZODDIJME@QSPDFTT USBDJOHBQJ QFSGPSNBODFJNQSPWFNFOU FUD
TZODDIJME@QSPDFTT DIJME@QSPDFTTʹҎԼͷ"1*͕Ճ͞ΕΔɻ FYFD4ZOD FYFD'JMF4ZOD TQBXO4ZOD
TZODDIJME@QSPDFTT DIJME@QSPDFTTʹҎԼͷ"1*͕Ճ͞ΕΔɻ FYFD4ZOD FYFD'JMF4ZOD TQBXO4ZOD HSVOUͱ͔ͷλεΫϥϯφʔͰ خ͍͠ػೳ
TZODDIJME@QSPDFTT %&.0
USBDJOH"1* QSPpMJOH༻ͷ"1* IFBQNFNPSZͷঢ়گΛϞχλͨ͠Γ UJDLຖʹVTFSͷҙͷΦϒδΣΫτΛUSBDFͰ͖ Δ
USBDJOH"1* %&.0
Wͷશػೳհ͠ ͖Εͳ͍
Wͷશػೳհ͠ ͖Εͳ͍ 4USPOH-PPQ͕͔ͳΓ հͯ͠ΔͷͰݟΑ͏ /PEFֶԂࡇʹ4USPOH-PPQͷਓ ݺΜͰ͍͍͔
ؾʹͳΔϥΠϒϥϦ
ؾʹͳΔϥΠϒϥϦ
ؾʹͳΔϥΠϒϥϦ 8"'ฤ
ؾʹͳΔϥΠϒϥϦ 8"'ฤ // Express! ! // response time! ! app.use(function(req,
res, next){! var start = new Date;! res.on('header', function(){! var ms = new Date - start;! res.setHeader('X-Response-Time', ms + 'ms');! });! next();! }); ! ! // response! ! app.use(function(req, res, next){! res.send(200, "Hello World");! }); // koa! ! // response time! ! app.use(function *(next){! var start = new Date;! yield next;! var ms = new Date - start;! this.set('X-Response-Time', ms + 'ms');! });! ! // response! ! app.use(function *(){! this.body = 'Hello World';! });
ؾʹͳΔϥΠϒϥϦ 8"'ฤ // Express! ! // response time! ! app.use(function(req,
res, next){! var start = new Date;! res.on('header', function(){! var ms = new Date - start;! res.setHeader('X-Response-Time', ms + 'ms');! });! next();! }); ! ! // response! ! app.use(function(req, res, next){! res.send(200, "Hello World");! }); // koa! ! // response time! ! app.use(function *(next){! var start = new Date;! yield next;! var ms = new Date - start;! this.set('X-Response-Time', ms + 'ms');! });! ! // response! ! app.use(function *(){! this.body = 'Hello World';! }); HFOFSBUPSZJFME Ͱͷະདྷ
ؾʹͳΔϥΠϒϥϦ 8"'ฤ // handle error! app.use(function *(next) {! // try-catchͰΤϥʔϋϯυϦϯάͰ͖Δ!
try {! yield next;! } catch (err) {! this.status = 500;! this.body = err.message;! }! });! ! // error thrower! app.use(function *(next) {! if (this.url === "/_err") {! throw new Error("Send Error");! }! yield next;! });!
ؾʹͳΔϥΠϒϥϦ 8"'ฤ // handle error! app.use(function *(next) {! // try-catchͰΤϥʔϋϯυϦϯάͰ͖Δ!
try {! yield next;! } catch (err) {! this.status = 500;! this.body = err.message;! // errorΠϕϯτΛൃߦ! this.app.emit("error", err, this);! }! });! ! // error thrower! app.use(function *(next) {! if (this.url === "/_err") {! throw new Error("Send Error");! }! yield next;! });! ΤϥʔϋϯυϦϯάײత
ৄ͘͠
ৄ͘͠ ͷॻ͍ͨLPBೖهࣄΛ͝ҰಡԼ͍͞ɻ
ؾʹͳΔϥΠϒϥϦ SFBMUJNFฤ
ؾʹͳΔϥΠϒϥϦ SFBMUJNFฤ 4PDLFU*0 ৽͍͠1FSMͰ͋Δɻ
SFBMUJNFϥΠϒϥϦ ࣮ͨ͘͞Μ͋Δ
SFBMUJNFϥΠϒϥϦ ࣮ͨ͘͞Μ͋Δ TPDLFUJPʹ͚ͩ नΘΕΔඞཁͳ͍ɻ
ͰͲΕ͏ͷ
1SJNVT
1SJNVT ͦ͜Ͱɺ1SJNVTɻ USBOTGFSͰFOHJOFJP GBZF TPDLKT CSPXTFSDIBOOFM XT͕ ͑Δɺͦͷ্ͰTPDLFUJPͰαϙʔτ͍ͯ͠ΔΑ͏ͳ SPPNͱ͔ͷΞϓϦέʔγϣϯΛߏங͢Δ
1SJNVT ͦ͜Ͱɺ1SJNVTɻ USBOTGFSͰFOHJOFJP GBZF TPDLKT CSPXTFSDIBOOFM͕ ͑Δɺͦͷ্ͰTPDLFUJPͰαϙʔτ͍ͯ͠ΔΑ͏ͳ SPPNͱ͔ͷΞϓϦέʔγϣϯΛߏங͢Δ ΜͰͳ͍Ͱ1SJNVT͓͏ɺ ޙͰUSBOTGFSม͑ΒΕΔɻ
ؾʹͳΔϥΠϒϥϦ ϑϩϯτΤϯυπʔϧฤ
ؾʹͳΔϥΠϒϥϦ ϑϩϯτΤϯυฤ ඦՖ៶ཚ͗ͯ͢ɺઆ໌ׂѪɻ
ؾʹͳΔϥΠϒϥϦ ϑϩϯτΤϯυπʔϧฤ ݸਓతʹHVMQ CSPXTFSJGZ DPNQPOFOUJP
͜ͷޙCSPXTFSJGZͷ ͋Γ·͢ʂʂɹ
౦ژ/PEFֶԂͷࠓޙ
جຊํ ೋ݄ʹҰ/PEFֶԂΛ։࠵ͯ͠ɺΈΜͳͷ ݟΛूΊ͍ͨ ʹҰɺ౦ژ/PEFֶԂࡇ։࠵͍ͨ͠ /PEFKTͷ͔Γ͡Όͳͯ͘ผͳݴޠ͔Βֶ ΜͩΓɺ৽͍͠ࣄͲΜͲΜٵऩ͍ͨ͠
جຊํ ೋ݄ʹҰ/PEFֶԂΛ։࠵ͯ͠ɺΈΜͳͷ ݟΛूΊ͍ͨ ʹҰɺ౦ژ/PEFֶԂࡇ։࠵͍ͨ͠ /PEFKTͷ͔Γ͡Όͳͯ͘ผͳݴޠ͔Βֶ ΜͩΓɺ৽͍͠ࣄͲΜͲΜٵऩ͍ͨ͠ ͭ·Γ͜Ε·Ͱ௨Γ /PEFֶԂΛΓ͍ͨ
ม͍͑ͨ͜ͱ ͬͱελοϑҎ֎͔Βͷਓͷҙݟฉ͖͍ͨɻ ΈΜͳ͕ͲΜͳͷʹڵຯ͕༗Δͷ͔ืू͍ͨ͠ɻ HJUUFSͱHJUIVCϦϙδτϦ࡞Γ·ͨ͠ɻ IUUQTHJUUFSJNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM IUUQTHJUIVCDPNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM
ม͍͑ͨ͜ͱ ͬͱελοϑҎ֎͔Βͷਓͷҙݟฉ͖͍ͨɻ ΈΜͳ͕ͲΜͳͷʹڵຯ͕༗Δͷ͔ืू͍ͨ͠ɻ HJUUFSͱHJUIVCϦϙδτϦ࡞Γ·ͨ͠ɻ IUUQTHJUUFSJNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM IUUQTHJUIVCDPNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM Θ͍Θ͍Γ͍ͨ
·ͱΊ
·ͱΊ /PEFKTOFXT Ϧʔμʔมߋ J[T5+'POUBJOF /PEFKTWͰมΘΔ͜ͱ ؾʹͳΔ/PEFKTϥΠϒϥϦ ,PB 1SJNVT ϑϩϯτΤϯυπʔϧ͋Γա͗
౦ژ/PEFֶԂͷࠓޙ جຊม͑ͳ͍ ҙݟΛऩू͘͢͠ɺө͘͢͢͠Δ Θ͍Θ͍Θʔ͍
ೋऻ໊൸࿐ޱ্
͍ͭ·ͰมΘΒ͵NodeֶԂͷޚްɺ͝ርΛ ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ
͍ͭ·ͰมΘΒ͵NodeֶԂͷޚްɺ͝ርΛ ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ ΑΖ͓͘͠ئ͍͠·͢