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
230
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.2k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.7k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
340
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
510
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
3k
Other Decks in Programming
See All in Programming
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.3k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
920
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
300
Oxcを導入して開発体験が向上した話
yug1224
4
340
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.4k
Performance Engineering for Everyone
elenatanasoiu
0
210
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
13
6.2k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
930
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
JavaDoc 再入門
nagise
1
410
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Context Engineering - Making Every Token Count
addyosmani
9
980
The Pragmatic Product Professional
lauravandoore
37
7.3k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Ace a Technical Interview
jacobian
281
24k
Abbi's Birthday
coloredviolet
3
8.2k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
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ֶԂͷޚްɺ͝ርΛ ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ ΑΖ͓͘͠ئ͍͠·͢