Slide 1

Slide 1 text

NodeFest 2018 2018/10/30 @yosuke_furukawa

Slide 2

Slide 2 text

NodeFest 2018 ։࠵͠·͢ʂʂʂʂ

Slide 3

Slide 3 text

New Logo

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Stickers, T-Shirts, Mugs are getting ready !!!

Slide 6

Slide 6 text

Day1: Conference

Slide 7

Slide 7 text

Featured Speakers

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

͜ͷଞʹ΋

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

ॻ͖͖Εͳ͍΄Ͳίϯςϯπ͋Γ·͢ʂʂʂʂ

Slide 16

Slide 16 text

Day2: Interactive Sessions

Slide 17

Slide 17 text

Node/JS Discussion

Slide 18

Slide 18 text

Node/JS Discussion

Slide 19

Slide 19 text

Node/JS Discussion ΈΜͳͰҰॹʹ/PEF+4ͷྑ͍ͱ͜Ζɾѱ͍ͱ͜Ζɾ վળ఺Λॻ͖·͠ΐ͏

Slide 20

Slide 20 text

Code And Learn

Slide 21

Slide 21 text

Code And Learn ΈΜͳͰ/PEFKTʹ13ΛૹͬͯΈΔձ

Slide 22

Slide 22 text

Code And Learn ݁Ռͱͯ͠ਓͷ/PEFίϛολʔΛ࡞Δ͜ͱ͕ग़ དྷ·ͨ͠ʂʂʂ

Slide 23

Slide 23 text

Handson

Slide 24

Slide 24 text

Handson

Slide 25

Slide 25 text

Handson

Slide 26

Slide 26 text

Handson

Slide 27

Slide 27 text

Handson

Slide 28

Slide 28 text

Handson

Slide 29

Slide 29 text

After Party

Slide 30

Slide 30 text

ࠓ೥΋͋Γ·͢ʂʂ Video Jockey!!!

Slide 31

Slide 31 text

ΈΜͳདྷͯͶʂʂʂʂ http://bit.ly/nodefest2018-1 http://bit.ly/nodefest2018-2

Slide 32

Slide 32 text

Node.js v10/v11
 ৘ใ 2018/10/30 @yosuke_furukawa

Slide 33

Slide 33 text

CodeGrid ʹدߘத

Slide 34

Slide 34 text

Node.js v10.0.0 ~ v10.12.0 • HTTP/2 • ES Modules • Error Code ʹΑΔϋϯυϦϯά • fs ʹ promises ͕௥Ճ͞Εͨ • Stream͕վળ͞Εͨ • Worker͕վળ͞Εͨ

Slide 35

Slide 35 text

Node.js v11 • V8 version 7.0ରԠ (wasm վળ) • url module ͕ deprecated ʹͳΓɺ WHATWG URL Λར༻͢ΔΑ͏ʹ಺෦վળ͕ߦΘΕͨ • TextEncoder/TextDecoder͕globalʹͳͬͨ • queueMicrotask API ͕࣮ݧతʹ௥Ճ͞Εͨ

Slide 36

Slide 36 text

Stream/Promiseͷ਌࿨ੑվળ • for await of Ͱ Stream Λஞ࣍ॲཧͰ͖ΔΑ͏ ʹͳͬͨ • Node v10 ͔Β Stream ʹ௥Ճ͞Εͨ finished, pipeline API͕ Promiseͱͷ਌࿨ੑߴ͍

Slide 37

Slide 37 text

for await of ͷվળ const fs = require('fs'); async function print(readable) { readable.setEncoding('utf8'); let data = ''; // for await ۟Ͱiterateͭͭ͠ɺchunkΛऔΓग़͢ for await (const k of readable) { data += k; } console.log(data); } print(fs.createReadStream('file')).catch(console.log);

Slide 38

Slide 38 text

Stream finished API const fs = require('fs'); const { finished } = require('stream'); const rs = fs.createReadStream('./stream.js'); //finished API ͰΤϥʔऴྃɺਖ਼ৗऴྃʹ͔͔ΘΒͣऴྃͨ͠ΒίʔϧόοΫΛݺ΂Δɻ finished(rs, (err) => { if (err) { console.error('Stream failed', err); return; } console.log('Stream is done reading'); }); rs.resume();

Slide 39

Slide 39 text

Stream finished API const fs = require('fs'); const util = require('util'); const stream = require('stream'); // Promisify Λ࢖ͬͯcallbackΛpromiseʹ͢Δ const finished = util.promisify(stream.finished); const rs = fs.createReadStream('./stream.js'); // async await ͕࢖͑Δ async function run() { await finished(rs); console.log('Stream is done reading'); } run().catch((err) => console.error('Stream failed', err)); rs.resume();

Slide 40

Slide 40 text

Stream Pipeline API const fs = require('fs'); const rs = fs.createReadStream('error.txt'); const ws = fs.createWriteStream('output.txt'); rs.pipe(ws).on("error", (e) => { // ͜͜Ͱ౷ҰతʹΤϥʔΛϋϯυϦϯά͍͕ͨ͠ɺ // readstreamͰΤϥʔʹͳΔͱ͜͜ʹདྷͳ͍ɻ // ͜͏΍ͬͯॻ͔ͳͯ͘͸͍͚ͳ͍ // rs.on("error", errorHandler).pipe(ws).on("error", errorHandler) });

Slide 41

Slide 41 text

Stream Pipeline API const { pipeline, Transform } = require('stream'); const rs = fs.createReadStream('./stream.js'); const ts = new Transform({ transform(chunk, encoding, callback) { callback(null, chunk.toString().toUpperCase()) } }); const ws = fs.createWriteStream('./stream_cap.js'); pipeline(rs, ts, ws, (err) => { if (err) { console.error(err); return; } console.log('Stream is done reading'); }); rs.resume();

Slide 42

Slide 42 text

Stream Pipeline API const { pipeline, Transform } = require('stream'); const p = util.promisify(pipeline); const rs = fs.createReadStream('./stream.js'); const ts = new Transform({ transform(chunk, encoding, callback) { callback(null, chunk.toString().toUpperCase()) } }); const ws = fs.createWriteStream('./stream_cap.js'); // promisify ͔ͯ͠Β async-awaitͰ͖Δ async function run() { await p(rs, ts, ws); console.log('Stream is done reading'); } run().catch(console.error); rs.resume();

Slide 43

Slide 43 text

Promise ଆ΋͍͔ͭ͘վળ • Promise͕ෳ਺ճresolve, reject͞Εͨͱ͖ʹ ϋϯυϦϯά͢Δɺ multipleResolves ͕௥Ճ • queueʹ௚઀MicrotaskΛੵΉɺ queueMicrotask API ͕௥Ճ͞Εͨɻ

Slide 44

Slide 44 text

process.on('multipleResolves ') process.on('multipleResolves', (type, promise, reason) => { console.error(type, promise, reason); setImmediate(() => process.exit(1)); }); async function main() { try { return await new Promise((resolve, reject) => { resolve('First call'); resolve('Swallowed resolve'); reject(new Error('Swallowed reject')); }); } catch { throw new Error('Failed'); } }

Slide 45

Slide 45 text

queueMicrotask DataHandler.prototype.load = async function load(key) { const hit = this._cache.get(url); if (hit !== undefined) { queueMicrotask(() => { this.emit('load', hit); }); return; } const data = await fetchData(key); this._cache.set(url, data); this.emit('load', data); };

Slide 46

Slide 46 text

Why Node needs web standard? James Snell @ NodeFest 2016
 Node.js is, and has been, primarily a platform for Web Application Development While Node.js presumes a "small core" philosophy for most things, it includes support for the most basic and critical internet standards

Slide 47

Slide 47 text

No content