Slide 1

Slide 1 text

ϦΫϧʔτςΫϊϩδʔ ζͷٕज़બఆ 2018/06/30 @ freee גࣜձࣾ / Java/GoݚमOBձ

Slide 2

Slide 2 text

Twitter: @yosuke_furukawa Github: yosuke-furukawa

Slide 3

Slide 3 text

2018/11/23 - 24 Node ֶԂࡇ։࠵

Slide 4

Slide 4 text

JS Quiz

Slide 5

Slide 5 text

ҎԼͷ৚݅Λຬͨ͢ a objectΛ ࡞ͬͯΈΔ var a = { // ? } if ( (a >= 1 && a <= 2) && (a >= 3 && a <= 4) && (a >= 5 && a <= 6) ) { console.log('pass') }

Slide 6

Slide 6 text

ճ౴ var a = { i: 1, valueOf() { return this.i++ } } if ( (a >= 1 && a <= 2) && (a >= 3 && a <= 4) && (a >= 5 && a <= 6) ) { console.log('pass') }

Slide 7

Slide 7 text

ϦΫϧʔτςΫϊϩδʔζͷ ٕज़બఆ

Slide 8

Slide 8 text

Java Node.js Go ϦΫϧʔτςΫϊϩδʔζͰ࢖ͬͯΔαʔόα Πυݴޠ Ruby Erlang Clojure Kotlin Python

Slide 9

Slide 9 text

Java Node.js Go ϦΫϧʔτςΫϊϩδʔζͰ࢖ͬͯΔαʔόα Πυݴޠ Ruby Erlang Clojure Kotlin Python

Slide 10

Slide 10 text

ׂͱͨ͘͞Μͷٕज़Λ࢖ͬͯ ͍Δɻ

Slide 11

Slide 11 text

ϦΫϧʔτςΫϊϩδʔζͷඪ ४తͳߏ੒ • Backend For Frontends #SPXTFS #'' .JDSP4FSWJDF .JDSP4FSWJDF .JDSP4FSWJDF

Slide 12

Slide 12 text

ϦΫϧʔτςΫϊϩδʔζͷඪ ४తͳߏ੒ • Backend For Frontends #SPXTFS #'' .JDSP4FSWJDF .JDSP4FSWJDF .JDSP4FSWJDF ͜ͷαʔό͸)5.-Λ࡞ͬ ͨΓɺ"1*Λ·ͱΊͨΓɺηο γϣϯ؅ཧͨ͠Γ͢Δ

Slide 13

Slide 13 text

ϦΫϧʔτςΫϊϩδʔζͷඪ ४తͳߏ੒ • Backend For Frontends #SPXTFS #'' .JDSP4FSWJDF .JDSP4FSWJDF .JDSP4FSWJDF ͬͪ͜͸"1*αʔόɺ%#ͱ ઀ଓͨ͠ΓɺpMFॻ͖ग़ͨ͠ Γɺ֎෦"1*ͱܨ͍ͩΓɻ

Slide 14

Slide 14 text

ͦΕͧΕ޲͖ɾෆ޲͖͕͋Δ • BFF • HTMLΛ࡞ΔखલɺϑϩϯτΤϯυΤϯδχ Ξ͕৮Γ΍͍͢γεςϜͰ͋Δඞཁ͕͋Δ • APIΛͨ͘͞Μ౤͛ΔͷͰɺඇಉظϑϨϯυ ϦʔͰ͋ͬͯ΄͍͠

Slide 15

Slide 15 text

ͦΕͧΕ޲͖ɾෆ޲͖͕͋Δ • Backend • ϏδωεϩδοΫͱDBΞΫηε͕ଟ͍ • τϥϯβ͘γϣφϧͳॲཧͱ͖ͬͪΓͨ͠ ྫ֎ϋϯυϦϯά • ʢܕ͕΄͍͠ʣ

Slide 16

Slide 16 text

ϦΫϧʔτςΫϊϩδʔζͷඪ ४తͳߏ੒ • Backend For Frontends #SPXTFS #'' .JDSP4FSWJDF .JDSP4FSWJDF .JDSP4FSWJDF ͬͪ͜͸/PEFKTͰॻ͍ͯΔ ͬͪ͜͸+BWBPS(PͰॻ͍ ͯΔɻ

Slide 17

Slide 17 text

ϦΫϧʔτςΫϊϩδʔζ • ϑϩϯτΤϯυ͸Node.jsͰॻ͘ • Express, webpack, babel, etc etc • όοΫΤϯυ͸Go or JavaͰॻ͘ʢঃʑʹGo Λ૿΍ͯ͠Δ࠷தʣ • echo, DI container, Πϯϑϥܥπʔϧ etc etc

Slide 18

Slide 18 text

ଟछଟ༷ͳٕज़Λ࢖ͬͯ໨ͷ લʹ͋Δ՝୊Λղܾ͍ͯ͘͠

Slide 19

Slide 19 text

GoͰDI container • DI ContainerΛϝϯόʔ͕࡞ͬͯ͘Εͨ ෳ਺ͷ+BWBΤϯδχΞʹ(PΛॻ͔ͤΔͨΊɺςετ Λॻ͖΍͘͢͢ΔͨΊ

Slide 20

Slide 20 text

PythonͰBig Queryͷςετ πʔϧ • bqspecΛϝϯόʔ͕࡞ͬͯ͘Εͨ • yamlͰsqlͷϦΫΤετͱ໭Γ஋ͷνΣοΫΛ ॻ͘͜ͱ͕Ͱ͖Δπʔϧ #JH2VFSZΛॻ͘σʔλΞφϦετͷφϨοδΛς ετͱ͍͏ܗͰܗࣜԽ͢ΔͨΊ

Slide 21

Slide 21 text

Node.jsͰAPI mock/stub • BFFͱόοΫΤϯυͰAPI௨৴Λstub͢ΔϞ δϡʔϧΛ࡞ͬͯΔ "1*ͷTUVCʹ΋ͳΓɺόοΫΤϯυͷαʔόʹ͸ς ετΫϥΠΞϯτʹ΋ͳΔπʔϧΛ։ൃ

Slide 22

Slide 22 text

͜͏͍͏ਓΛ΋ͬͱ૿΍ͯ͠ ͍͖͍ͨ͠ɺ͜͏͍͏ࣄྫΛ ΋ͬͱ૿΍͍ͨ͠

Slide 23

Slide 23 text

๻͸Ͳ͏͍ͯ͠Δ͔

Slide 24

Slide 24 text

άϧʔϓϚωʔδϟͱͯ͠ҰԠ શ෦೺Ѳ͢ΔΑ͏ʹ͍ͯ͠Δ • Node.js͚ͩ͡Όͳ͘ɺGo΋ɻ • ୈ6ظ Go ݚम(ϥΠτ൛)डߨੜ • ͪͳΈʹୈNظ Java ݚमଔۀੜʂʂ

Slide 25

Slide 25 text

ݚमͱ͍͏ܗͰجૅྗ޲্Λఏڙ͠ɺ ࣮Ҋ݅ͱ͍͏ܗͰԠ༻ྗ޲্ͤ͞Δ • ݚम͸جຊతʹϝϯόʔʹ͸ड͚ͤ͞ΔΑ͏ ʹ͍ͯ͠Δ • طʹ2໊ଔۀɺ1໊डߨதɺདྷظ͸͞Βʹ૿ ΍͢ɻ • Ҋ݅Ͱ΋GoΛ࠾༻͍ͯ͠Δʢ૿΍ͯ͠Δʣ

Slide 26

Slide 26 text

ݚमड͚௚ͯ͠Έͯ • 1೥໨ͰJavaݚमड͚ͯͨͱ͖͸ࢹ໺΋ڱ͔ͬ ͨɻ • ։ൃܦݧΛੵΜͰ͔Βࠓͳࣲ͓ా͞ΜͷGoݚ मΛड͚Δͱ࣭໰Ͱ͖Δ͜ͱ͕ҧ͏ɻ

Slide 27

Slide 27 text

ݚमड͚௚ͯ͠Έͯ

Slide 28

Slide 28 text

ݚमड͚௚ͯ͠Έͯ • ܦݧΛੵΜͰ͔Βฉ͚Δ͜ͱ͕૿͑ͯࠓͳ͓ ָ͍͠ɻ • ձࣾʹࣲా͞ΜΛݺΜͰݚमड͚ͤͯ͞΋Β ͓͏ɻ • ࣗ෼͕1೥໨Ͱड͚ͨྑ͔ͬͨ͜ͱ͸ϝϯόʔ ʹ΋ܦݧͯ͠΋Β͍͍ͨ

Slide 29

Slide 29 text

ਃ͠༁ఔ౓ͷ Node.js࠷৽ಈ޲

Slide 30

Slide 30 text

Node.js v10.5.0 released • Worker (Thread)͕ೖͬͨ • Node.js ͸͜Ε·Ͱsingle thread͕ͩͬͨɺ Multi Threadϓϩάϥϛϯά΋ग़དྷΔΑ͏ʹ • ࠷ۙ͸Node.js΋CPUϔϏʔͳॲཧ͕૿͖͑ͯ ͨ

Slide 31

Slide 31 text

Node.js has various use cases

Slide 32

Slide 32 text

Node.js has various use cases &WFSZUPPMTGSBNFXPSLTIBT$16JOUFOTJWFUBTLT

Slide 33

Slide 33 text

History of concurrent Node.js /PEFKT #FGPSFW 4JOHMF1SPDFTT 4JOHMF5ISFBE

Slide 34

Slide 34 text

History of concurrent Node.js /PEFKT .BTUFS1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT

Slide 35

Slide 35 text

History of concurrent Node.js /PEFKT .BTUFS1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT .BTUFS1SPDFTT DBOGPSLDIJMEQSPDFTT W

Slide 36

Slide 36 text

History of concurrent Node.js /PEFKT .BTUFS1SPDFTT 8PSLFS 8PSLFS 8PSLFS 8PSLFS 8PSLFS 8PSLFS

Slide 37

Slide 37 text

History of concurrent Node.js /PEFKT .BTUFS1SPDFTT 8PSLFS 8PSLFS 8PSLFS 8PSLFS 8PSLFS 8PSLFS Ϛελʔϓϩηε͔Β8PSLFS5ISFBEΛىಈ͢ΔɺεϨου ͳͷͰϓϩηεΑΓ͸ىಈ͸ܰྔɻ

Slide 38

Slide 38 text

babel-core using single thread. target files (ES6) transpiled code (ES5)

Slide 39

Slide 39 text

babel-core using child_process .BTUFS target files Send File transpiled

Slide 40

Slide 40 text

babel-core using Worker /PEFKT .BTUFS target files transpiled Send File

Slide 41

Slide 41 text

Result pMF OVNCFST CBCFMDPSF VTJOHTJOHMFUISFBE CBCFMDPSF VTJOHDIJMEQSPDFTT CBCFMDPSF VTJOHXPSLFS NT NT NT NT NT NT NT NT NT NT NT NT NT NT NT

Slide 42

Slide 42 text

Node.js Worker Λ࢖ͬͯ৽͠ ͍ϥΠϒϥϦΛ࡞͍ͬͯ͘ • SSRͷߴ଎Խ • babel, webpackͷߴ଎Խ etc • ϦΫϧʔτςΫϊϩδʔζͰ͸৽͍ٕ͠ज़Λݚ ڀ՝୊ͱͯ͠৽͍͠औΓ૊ΈΛ͍ͯ͘͠ɻ

Slide 43

Slide 43 text

Thank you!!