Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
य़͔Β͡ΊΔ ৽͍͠Node.js ؔNodeֶԂ #1 ฏ ণ࢜ / @shisama
Slide 2
Slide 2 text
{ "about": { "name": "Masashi Hirano", "works": "Weblio, Inc.", "twitter": "@shisama_", "github": "shisama" } }
Slide 3
Slide 3 text
Agenda • ݱࡏͷNode.jsΛ෮श • ৽͍͠Node.jsΛ༧श • ৽͍͠Node.jsΛ࣮श
Slide 4
Slide 4 text
ରͱ͢Δਓ • Node.jsΛͬͨ͜ͱ͋Δਓ • Node.jsͬͯΔ͚Ͳɺ࠷৽ใΛΓ͍ͨਓ • ݹ͍όʔδϣϯͷNode.jsͬͯΔਓ
Slide 5
Slide 5 text
ࠓ͞ͳ͍͜ͱ • Node.jsͱ • ϑϩϯτΤϯυ(jQuery,React,Angular,Vue…) • ػೳ༷ͷͯ͢ʢ࣌ؒత੍ʣ
Slide 6
Slide 6 text
Goal • Node.jsͷ࠷৽ใΛΔ • ݹ͍ڥΛΞοϓσʔτ͢Δ • ৽͍͠Node.jsͷػೳΛͬͯΈΔ
Slide 7
Slide 7 text
·ͣࠓճ͢༰ʹؔ͢Δ ༻ޠΛͬ͘͟Γ෮श
Slide 8
Slide 8 text
V8 engine • Google͕։ൃ͢ΔJavaScriptΤϯδϯ • ChromeͱNode.jsͰΘΕ͍ͯΔ • ࣮ߦ͕͍
Slide 9
Slide 9 text
npm • Node Package Manager • ϥΠϒϥϦཧ • λεΫ࣮ߦ
Slide 10
Slide 10 text
V8ɺnpmͷόʔδϣϯใ https://nodejs.org/en/download/releases/
Slide 11
Slide 11 text
EcmaScript • JavaScriptͷ༷ • ҰൠతʹEcmaScriptECMA-262Λࢦ͢ • TC39ͱ͍͏ҕһձ͕༷ࡦఆΛ͍ͯ͠Δ • Living Standard • ৗʹ༷͕Ξοϓσʔτ͞ΕΔ
Slide 12
Slide 12 text
EcmaScript • 2ϲ݄ʹ1ճϛʔςΟϯά͕ߦΘΕ͍ͯΔ • ֤ػೳͷεςʔδߋ৽ͳͲ͕ٞ͞ΕΔ • stage-4ʹͳͬͨͷ͕1ʹ1ճEcmaScript ͷ༷ͱͯ͠ϦϦʔε͞ΕΔ(ES201X)
Slide 13
Slide 13 text
EcmaScript • ༷ࡦఆ·Ͱʹstage0ʙstage4·Ͱͷஈ֊͕ଘࡏ͢Δ • 0 Strawman - ΞΠσΞ • 1 Proposal - ఏҊ • 2 Draft - υϥϑτ • 3 Candidate- ༷ॻͱಉ͡ܗࣜ • 4 Finished - ࡦఆྃ
Slide 14
Slide 14 text
EcmaScript https://azu.github.io/slide-what-is-ecmascript/slide/ B[V͞Μͷʰ&$."4DSJQUͱԿ͔ʁʱ͕ Θ͔Γ͍͢ͷͰಡΜͰΈͯ΄͍͠
Slide 15
Slide 15 text
&DNB4DSJQUͷ࠷৽ใ5$ͷ ϦϙδτϦʹ͋Γ·͢ʂ
Slide 16
Slide 16 text
ݱࡏͷNode.jsΛ෮श
Slide 17
Slide 17 text
Release Schedule • github.com/nodejs/Releaseʹࡌ͍ͬͯΔ • ʹҰճϝδϟʔϦϦʔε͕ߦΘΕΔ
Slide 18
Slide 18 text
https://github.com/nodejs/Release
Slide 19
Slide 19 text
https://github.com/nodejs/Release
Slide 20
Slide 20 text
Active • LTS (Long Term Support) • 18ϲ݄ؒαϙʔτ͕ߦΘΕΔ • ຖ10݄͔ΒLTS ActiveʹͳΔ • όʔδϣϯ൪߸͕ۮ
Slide 21
Slide 21 text
https://github.com/nodejs/Release
Slide 22
Slide 22 text
Current • ࠷৽ͷϦϦʔε൛ • ϝδϟʔόʔδϣϯ͕حˠ10݄ʹϦϦʔε • ϝδϟʔόʔδϣϯ͕ۮˠ4݄ʹϦϦʔε
Slide 23
Slide 23 text
https://github.com/nodejs/Release
Slide 24
Slide 24 text
Maintenance • LTSCurrentظؒऴྃޙͷϝϯςφϯεظؒ • LTS12ϲ݄ؒαϙʔτ • όάɺ੬ऑੑɺυΩϡϝϯτͳͲ͕ϝϯς͞ ΕΔ
Slide 25
Slide 25 text
https://github.com/nodejs/Release ݱࡏαϙʔτதͷόʔδϣϯʁ
Slide 26
Slide 26 text
Node 4.x • V8Τϯδϯ4.5 • ES2015ͷػೳͷଟ͕͑͘ΔΑ͏ʹ • 2018/04/30ʹϝϯςφϯεऴྃ༧ఆ • αϙʔτࢭ·ΔͷͰΞοϓσʔτඞਢ
Slide 27
Slide 27 text
Node 6.x • V8Τϯδϯ5.1 • ProxyσϑΥϧτҾ͕͑ΔΑ͏ʹ • 2018/04/30͔ΒLTSͰͳ͘ͳΔ༧ఆ • ϝϯςφϯε͞ΕΔ͚Ͳདྷ4݄ʹαϙʔτ ऴྃ༧ఆ
Slide 28
Slide 28 text
Node 8.x • ݱࡏͷLTS • V8Τϯδϯ6.1 • async / awaitΛαϙʔτ͢Δ࠷ॳͷLTS • util.promisify, inspectorͳͲ͕Ճ͞Εͨ
Slide 29
Slide 29 text
Node 8.x • npm@5 • package-lock.json • 8.5͔Βϑϥά͖ͰES Modules͑Δ • import / export syntax • AWS LambdaͰ࠷ۙΑ͏͘v8͕͑ΔΑ͏ʹ
Slide 30
Slide 30 text
Node 8.x • 2019/04͔ΒLTSͰͳ͘ͳΔ • 2019/12ʹϝϯςφϯεऴྃ • ࠓ͏ͳΒ͜ͷόʔδϣϯ͕ແ
Slide 31
Slide 31 text
Node 9.x • ݱࡏͷCurrent • V8Τϯδϯ6.2 • HTTP2͕ϑϥάͳ͠Ͱ͑Δ • 2018/06/30Ͱϝϯςφϯεऴྃ༧ఆ
Slide 32
Slide 32 text
͜͜·Ͱͷ͓͞Β͍ • 4.xͬͯΔਓࠓ݄தʹΞοϓσʔτ • 6.xͬͯΔਓ̍ҎʹΞοϓσʔτ • 8.xͬͯΔਓ·ͩ̍Ҏ্େৎ • 9.xͬͯΔਓ݄̒·ͰʹΞοϓσʔτ
Slide 33
Slide 33 text
͜͜·Ͱͷ͓͞Β͍ • 4.xͬͯΔਓࠓ݄தʹΞοϓσʔτ • 6.xͬͯΔਓ̍ҎʹΞοϓσʔτ • 8.xͬͯΔਓ·ͩ̍Ҏ্େৎ • 9.xͬͯΔਓ݄̒·ͰʹΞοϓσʔτ ࠓ͕Ξοϓσʔτ͢Δͱ͖Ͱ͢Αʂʂ
Slide 34
Slide 34 text
৽͍͠Node.jsΛ༧श
Slide 35
Slide 35 text
https://github.com/nodejs/Release
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
Node.js 10.0 • 2018/04/24ʹϦϦʔε༧ఆ • ࣍ͷLTS • V8Τϯδϯ6.6 • npm@6(ϦϦʔε࣌ʹೖΔ͔ະఆ)
Slide 38
Slide 38 text
V8 Engine • ݱࡏͷmasterʹೖͬͯΔͷ6.6 • 6.7ʹͯ͠΄͍͠ཁ͋Δ
Slide 39
Slide 39 text
WWFSTJPOIʹఆٛ͞Ε͍ͯΔ https://github.com/nodejs/node/blob/master/deps/ v8/include/v8-version.h ࠷৽ͷNode.jsͷV8ʁ
Slide 40
Slide 40 text
V8 engine • Node 9.x(V8 6.2) => Node 10.0(V8 6.6) • EcmaScript৽ػೳͷՃ(ޙड़) • ࣮ߦͷվળ • asyncͷύϑΥʔϚϯεվળ
Slide 41
Slide 41 text
https://github.com/nodejs/node/pull/19091 V8 6.7 7ʹTUBCMFʹͳΔ͚Ͳɺ ͦΕͰ͗͢Δ /PEF݄ޙʹϦϦʔε͍ͨ͠
Slide 42
Slide 42 text
V8 6.7 • Chrome 67 • BigInt(64bitܕ)ͳͲEcmaScript৽ػೳͷ Ճ • Node v10Ͱϑϥά͖Ͱ͑Δͷ͋ Δ
Slide 43
Slide 43 text
npm@6 https://github.com/npm/npm/releases/tag/v6.0.0-next.0 มߋখ͞Ίɻ/PEF͕ϦϦʔε͞Ε Δ·Ͱখ͍͞มߋ͔͠͠ͳ͍༧ఆ
Slide 44
Slide 44 text
npm@6 https://github.com/npm/npm/releases/tag/v6.0.0-next.0 ࠓޙʹେ͖ͳมߋΛೖΕΔ ༧ఆɻOQN!ʹʂ
Slide 45
Slide 45 text
npm@6 • Node 10.0ʹ͚ͯখ͞ͳมߋ͋Δ • Node 4.xͱNode 7.xͷαϙʔτऴྃ • npm ci && npm tͳnpm cit͕Ճ • npm install͢Δͱ͖ʹdeprecateͷόʔδϣϯ ΛճආͳͲ
Slide 46
Slide 46 text
deprecateͷόʔδϣϯΛճආ $ npm install example@~1.1.0 // 1.1.2 // 1.1.3 (deprecated) // 1.2.0 (latest) ͕Yͷ࠷৽͕ͩɺEFQSFDBUFʹͳͬ ͍ͯΔͨΊΠϯετʔϧ͞Εͳ͍
Slide 47
Slide 47 text
EcmaScript৽ػೳ • ଟ͘ͷػೳ͕Ճ͞Εͨ • ES Modules·ͩϑϥά͚ͳ͍ͱ͑ͳ͍
Slide 48
Slide 48 text
Node.js v10ʹՃ͞ΕΔ EcmaScript৽ػೳ • Dynamic import • Async Iteration • Promise.prototype.finally • RegExp New Features • Intl.NumberFormat.formatToParts • Function.prototype.toString() • Optional catch binding • String.prototype.trimStart • String.prototype.trimEnd
Slide 49
Slide 49 text
Dynamic Import (async() => { let count = 0; let id = setInterval(async() => { const i = Math.floor(Math.random() * 3) + 1; const module = await import(`./hello${i}.mjs`); module.hello(); count++; if (count === 10) { clearInterval(id); } }, 1000); })(); ಈతʹϞδϡʔϧΛJNQPSUՄ ೳʹ
Slide 50
Slide 50 text
Async Iteration async function* gen() { while (true) { const res = await axios.get(‘https:// hogehoge.com'); const data = await res.data; yield data; } } (async() => { for await (const data of gen()) { console.log(data); } })(); 1SPNJTFͳྻΛGPSBXBJU PGͰඇಉظϧʔϓ͕Մೳʹ
Slide 51
Slide 51 text
Promise.prototype.finally Promise.resolve(“then”) .then(val => { console.log(val); throw new Error(“catch") }).catch(err => { console.log(err.message) }).finally(() => { console.log(“finally") }); pOBMMZ ͕Ճ
Slide 52
Slide 52 text
RegExp New Features const result = '123$456 $789 $ 000'.match(/(?<=\ $)\d+/g); console.log(result); // ['456', '789'] ਖ਼نදݱͷޙಡΈ͕Մೳɻ ଞʹ υοτ ͕վߦจࣈʹϚον͢ ΔΑ͏ʹͳΔTϑϥάͳͲ
Slide 53
Slide 53 text
Intl.NumberFormat.formatTo Parts const num = 1000; const formatter = new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }); const yen = formatter.formatToParts(num).map(({type, value}) => { switch (type) { case 'currency': return "
" + value + " strong>"; default: return value; } }).reduce((string, part) => {return string + part}); console.log(yen); // => "
¥
1,000" ͷΧελϜϑΥʔϚοτ ͕Մೳʹ
Slide 54
Slide 54 text
Function.prototype.toString function /* a comment */ foo () {} foo.toString(); // → 'function /* comment */ foo () {}' UP4USJOH ͷ༷มߋ
Slide 55
Slide 55 text
Optional catch binding try { const a = 1; a = 2; } catch { console.error("catch"); } DBUDIͷҾͳ͠ͰՄೳʹ
Slide 56
Slide 56 text
String.prototype.trim{Start|End} const value = " has spaces "; console.log(`‘${value}'`); // => ‘ has spaces ‘ console.log(`‘${value.trimStart()}'`); // => ‘has spaces ‘ console.log(`trimEnd: '${value.trimEnd()}'`); // => ‘ has spaces‘ จࣈྻͷલޙͷεϖʔεΛআ ڈ
Slide 57
Slide 57 text
http://node.green/ OPEFHSFFOͱ͍͏αΠτʹ /PEFKTͷόʔδϣϯ͝ͱʹ &4ͷͲͷػೳ͕͑Δ͔ࡌ͍ͬͯΔ
Slide 58
Slide 58 text
ͦͷଞؾʹͳΔՃػೳ • fs͕PromiseϕʔεͰಈ͔ͤΔΑ͏ʹͳͬͨ • const data = await fs.readFile(‘./ something’, ‘utf-8’); • util.types.isPromiseͱ͔isDateͰܕఆ ͳͲ
Slide 59
Slide 59 text
Wʹ͍ͭͯͬͱৄ͍͠Λฉ ͖͍ͨਓདྷि౦ژʂ
Slide 60
Slide 60 text
৽͍͠Node.jsΛ࣮श
Slide 61
Slide 61 text
࠷৽ͷNode.jsΛ͏
Slide 62
Slide 62 text
https://github.com/nodejs/Release
Slide 63
Slide 63 text
master • ࠷৽ͷιʔείʔυ • ຖେྔʹίϛοτ͞Ε͍ͯΔ • ࠓϏϧυ͢ΔͱNode 10.0.0-preʹͳΔ
Slide 64
Slide 64 text
Node.jsΛϏϧυ https://github.com/nodejs/node/blob/master/BUILDING.md #6*-%*/(NEΛݟΕ֤04͚ͷखॱ͕ॻ ͔Ε͍ͯΔɻ Ϗϧυ࣌ؒͦΜͳʹ͔͔Βͳ͍
Slide 65
Slide 65 text
Node.jsΛϏϧυ $ ./configure $ make -j4 Ϗϧυதɾɾɾ $ ./node -v > v10.0.0-pre ͜Ε͚ͩ
Slide 66
Slide 66 text
Ϗϧυͨ͠Node.jsΛ͏ • ৽ػೳΛࢼͯ͠ΈΔ ➡ ࠓհͨ͠ES৽ػೳಈ͘ʂʂ • Nodeຊମͷ࣮Λมߋͯ͠ಈ͔ͯ͠ΈΔ
Slide 67
Slide 67 text
͞Βʹ৽͍͠ػೳΛࢼ͢ • Node.jsʹ࣮ݧతʹ࣮͞Ε͍ͯΔػೳ͕͋ Δ • ϑϥάΛ͚ͭΔ͜ͱͰ͑Δ • ES Modules·࣮ͩݧతͳػೳ
Slide 68
Slide 68 text
ES Modules $ node —experimental-modules index.mjs FYQFSJNFOUBMNPEVMFTϑϥάΛ͏ɻ ֦ுࢠNKT
Slide 69
Slide 69 text
harmony • --harmonyϑϥάΛ࣮͑ݧతͳػೳ͕͑ ΔΑ͏ʹͳΔ • Node.jsʹ࣮͞Ε͍ͯΔEcmaScriptͷػೳʹ ΑͬͯϑϥάมΘΔ • EcmaScriptͷػೳ̏ͭʹ͚ΒΕΔ
Slide 70
Slide 70 text
EcmaScriptͷػೳ • shipping: ϦϦʔεࡁ • ϑϥάͳ͠Ͱ࣮ߦՄೳ • staged: ΄΅͕ͩɺ҆ఆ͍ͯ͠ΔͱΈͳ͞Εͳ͍ • --harmonyϑϥάͰ࣮ߦՄೳ • in progress: ։ൃத • --harmony-class-fieldsͷΑ͏ʹݸʑʹ༻ҙ͞Εͨ harmonyϑϥά
Slide 71
Slide 71 text
harmony ֬ೝํ๏ $ node —v8-options | grep harmony --es_staging (enable test-worthyɾɾɾ --harmony (enable all completedɾɾɾ --harmony_shipping (enable allɾɾɾ --harmony_array_prototype_values (ɾɾ --harmony_function_sent (enableɾɾɾ ͲΜͳIBSNPOZϑϥά͕͋Δ͔W PQUJPOTΛ࣮ߦ͢Ε֬ೝͰ͖Δ
Slide 72
Slide 72 text
harmony ྫ $ node —harmony-bigint > typeof 123n ‘bigint’ > 123n + 1n 124n IBSNPOZϑϥάΛ͚ͭΔ͜ͱͰ#JH*OU ͑Δ /PEFW
Slide 73
Slide 73 text
Node.jsʹ࣮͞Ε͍ͯͳ͍ػೳΛ͏ • BabelͰτϥϯεύΠϧ • EcmaScriptશػೳΛΧόʔ͍ͯ͠ΔΘ͚Ͱͳ ͍ • Node.jsͱޓੑ͕ͳ͍SyntaxͰಈ͘ͷͰҙ • import {readFile} from ‘fs’; ͜ΕNode.jsͰ ErrorʹͳΓ·͢
Slide 74
Slide 74 text
Ξτϓοτ͢Δ • ৽͍ٕ͠ज़ʹ৮ΕͨΒ͔ͤͬ͘ͳͷͰݟΛ ڞ༗ͯ͠΄͍͠ʂ • ϒϩά • Qiita • ษڧձ
Slide 75
Slide 75 text
ؔNodeֶԂ ͍ͭͰ͋ͳͨͷొஃΛ ͓͍ͪͯ͠·͢ʂ
Slide 76
Slide 76 text
·ͱΊ • Node.jsͷαϙʔτظؒΛҙࣝ͠Α͏ʂ • Node.js v10 དྷिϦϦʔεʂ(༧ఆ) • ٕज़Δ͚ͩͰͳ͘ɺͬͯͳΜ΅Ͱ͢ʂ • ొஃͯ͘͠ΕΔํ͓͍ͪͯ͠·͢ʂʂ
Slide 77
Slide 77 text
Special Thanks! ओ࠵ऀϝϯόʔ (@sbntaminif, @vanx2, @mdaisuke, @kamiyam,@leichtgewicht), ͘͞ΒΠϯλʔωοτ ༷, εϐʔΧʔͷํʑ(@mochiya98, @sota1235, @h_michael_z) and ࠓདྷͯ͘Εͨօ༷!! 1ճ։࠵Ͱ͖ͯخ͍͠Ͱ͢ʂ͜Ε͔ΒؔNode ֶԂΛӬ͘ΑΖ͓͘͠ئ͍͍ͨ͠·͢
Slide 78
Slide 78 text
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠