Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
これからの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
Webの地図
yosuke_furukawa
PRO
6
4.7k
XHTMLが残したもの
yosuke_furukawa
PRO
2
830
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
410
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
310
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
370
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.2k
Other Decks in Programming
See All in Programming
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
150
Are APIs Still Relevant in the AI Era?
soyuka
0
290
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
840
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
8k
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
320
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
190
Workers Cache を知る
syumai
0
130
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
380
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3.1k
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
640
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
290
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
420
The Cost Of JavaScript in 2023
addyosmani
55
10k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
290
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
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ֶԂͷޚްɺ͝ርΛ ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ ΑΖ͓͘͠ئ͍͠·͢