Java/Go のOB,OG会で発表した リクルートテクノロジーズの技術動向の話です。
ϦΫϧʔτςΫϊϩδʔζͷٕज़બఆ2018/06/30 @ freee גࣜձࣾ / Java/GoݚमOBձ
View Slide
Twitter: @yosuke_furukawaGithub: yosuke-furukawa
2018/11/23 - 24Node ֶԂࡇ։࠵
JS Quiz
ҎԼͷ݅Λຬͨ͢ a objectΛ࡞ͬͯΈΔvar a = {// ?}if ((a >= 1 && a <= 2) &&(a >= 3 && a <= 4) &&(a >= 5 && a <= 6)) {console.log('pass')}
ճvar a = {i: 1,valueOf() {return this.i++}}if ((a >= 1 && a <= 2) &&(a >= 3 && a <= 4) &&(a >= 5 && a <= 6)) {console.log('pass')}
ϦΫϧʔτςΫϊϩδʔζͷٕज़બఆ
Java Node.js GoϦΫϧʔτςΫϊϩδʔζͰͬͯΔαʔόαΠυݴޠRuby Erlang ClojureKotlin Python
JavaNode.js GoϦΫϧʔτςΫϊϩδʔζͰͬͯΔαʔόαΠυݴޠRubyErlangClojureKotlinPython
ׂͱͨ͘͞Μͷٕज़Λ͍ͬͯΔɻ
ϦΫϧʔτςΫϊϩδʔζͷඪ४తͳߏ• Backend For Frontends#SPXTFS #''.JDSP4FSWJDF.JDSP4FSWJDF.JDSP4FSWJDF
ϦΫϧʔτςΫϊϩδʔζͷඪ४తͳߏ• Backend For Frontends#SPXTFS #''.JDSP4FSWJDF.JDSP4FSWJDF.JDSP4FSWJDF͜ͷαʔό)5.-Λ࡞ͬͨΓɺ"1*Λ·ͱΊͨΓɺηογϣϯཧͨ͠Γ͢Δ
ϦΫϧʔτςΫϊϩδʔζͷඪ४తͳߏ• Backend For Frontends#SPXTFS #''.JDSP4FSWJDF.JDSP4FSWJDF.JDSP4FSWJDFͬͪ͜"1*αʔόɺ%#ͱଓͨ͠ΓɺpMFॻ͖ग़ͨ͠Γɺ֎෦"1*ͱܨ͍ͩΓɻ
ͦΕͧΕ͖ɾෆ͖͕͋Δ• BFF• HTMLΛ࡞ΔखલɺϑϩϯτΤϯυΤϯδχΞ͕৮Γ͍͢γεςϜͰ͋Δඞཁ͕͋Δ• APIΛͨ͘͞Μ͛ΔͷͰɺඇಉظϑϨϯυϦʔͰ͋ͬͯ΄͍͠
ͦΕͧΕ͖ɾෆ͖͕͋Δ• Backend• ϏδωεϩδοΫͱDBΞΫηε͕ଟ͍• τϥϯβ͘γϣφϧͳॲཧͱ͖ͬͪΓͨ͠ྫ֎ϋϯυϦϯά• ʢܕ͕΄͍͠ʣ
ϦΫϧʔτςΫϊϩδʔζͷඪ४తͳߏ• Backend For Frontends#SPXTFS #''.JDSP4FSWJDF.JDSP4FSWJDF.JDSP4FSWJDFͬͪ͜/PEFKTͰॻ͍ͯΔͬͪ͜+BWBPS(PͰॻ͍ͯΔɻ
ϦΫϧʔτςΫϊϩδʔζ• ϑϩϯτΤϯυNode.jsͰॻ͘• Express, webpack, babel, etc etc• όοΫΤϯυGo or JavaͰॻ͘ʢঃʑʹGoΛ૿ͯ͠Δ࠷தʣ• echo, DI container, Πϯϑϥܥπʔϧ etc etc
ଟछଟ༷ͳٕज़Λͬͯͷલʹ͋Δ՝Λղܾ͍ͯ͘͠
GoͰDI container• DI ContainerΛϝϯόʔ͕࡞ͬͯ͘Εͨෳͷ+BWBΤϯδχΞʹ(PΛॻ͔ͤΔͨΊɺςετΛॻ͖͘͢͢ΔͨΊ
PythonͰBig Queryͷςετπʔϧ• bqspecΛϝϯόʔ͕࡞ͬͯ͘Εͨ• yamlͰsqlͷϦΫΤετͱΓͷνΣοΫΛॻ͘͜ͱ͕Ͱ͖Δπʔϧ#JH2VFSZΛॻ͘σʔλΞφϦετͷφϨοδΛςετͱ͍͏ܗͰܗࣜԽ͢ΔͨΊ
Node.jsͰAPI mock/stub• BFFͱόοΫΤϯυͰAPI௨৴Λstub͢ΔϞδϡʔϧΛ࡞ͬͯΔ"1*ͷTUVCʹͳΓɺόοΫΤϯυͷαʔόʹςετΫϥΠΞϯτʹͳΔπʔϧΛ։ൃ
͜͏͍͏ਓΛͬͱ૿͍͖͍ͯͨ͠͠ɺ͜͏͍͏ࣄྫΛͬͱ૿͍ͨ͠
Ͳ͏͍ͯ͠Δ͔
άϧʔϓϚωʔδϟͱͯ͠ҰԠશ෦Ѳ͢ΔΑ͏ʹ͍ͯ͠Δ• Node.js͚ͩ͡Όͳ͘ɺGoɻ• ୈ6ظ Go ݚम(ϥΠτ൛)डߨੜ• ͪͳΈʹୈNظ Java ݚमଔۀੜʂʂ
ݚमͱ͍͏ܗͰجૅྗ্Λఏڙ͠ɺ࣮Ҋ݅ͱ͍͏ܗͰԠ༻ྗ্ͤ͞Δ• ݚमجຊతʹϝϯόʔʹड͚ͤ͞ΔΑ͏ʹ͍ͯ͠Δ• طʹ2໊ଔۀɺ1໊डߨதɺདྷظ͞Βʹ૿͢ɻ• Ҋ݅ͰGoΛ࠾༻͍ͯ͠Δʢ૿ͯ͠Δʣ
ݚमड͚ͯ͠Έͯ• 1ͰJavaݚमड͚ͯͨͱ͖ࢹڱ͔ͬͨɻ• ։ൃܦݧΛੵΜͰ͔Βࠓͳࣲ͓ా͞ΜͷGoݚमΛड͚Δͱ࣭Ͱ͖Δ͜ͱ͕ҧ͏ɻ
ݚमड͚ͯ͠Έͯ
ݚमड͚ͯ͠Έͯ• ܦݧΛੵΜͰ͔Βฉ͚Δ͜ͱ͕૿͑ͯࠓͳָ͓͍͠ɻ• ձࣾʹࣲా͞ΜΛݺΜͰݚमड͚ͤͯ͞Β͓͏ɻ• ͕ࣗ1Ͱड͚ͨྑ͔ͬͨ͜ͱϝϯόʔʹܦݧͯ͠Β͍͍ͨ
ਃ͠༁ఔͷNode.js࠷৽ಈ
Node.js v10.5.0 released• Worker (Thread)͕ೖͬͨ• Node.js ͜Ε·Ͱsingle thread͕ͩͬͨɺMulti Threadϓϩάϥϛϯάग़དྷΔΑ͏ʹ• ࠷ۙNode.jsCPUϔϏʔͳॲཧ͕૿͖͑ͯͨ
Node.js has various use cases
Node.js has various use cases&WFSZUPPMTGSBNFXPSLTIBT$16JOUFOTJWFUBTLT
History of concurrent Node.js/PEFKT#FGPSFW4JOHMF1SPDFTT4JOHMF5ISFBE
History of concurrent Node.js/PEFKT.BTUFS1SPDFTT$IJME1SPDFTT$IJME1SPDFTT$IJME1SPDFTT$IJME1SPDFTT
History of concurrent Node.js/PEFKT.BTUFS1SPDFTT$IJME1SPDFTT$IJME1SPDFTT$IJME1SPDFTT$IJME1SPDFTT.BTUFS1SPDFTTDBOGPSLDIJMEQSPDFTT W
History of concurrent Node.js/PEFKT.BTUFS1SPDFTT8PSLFS8PSLFS8PSLFS8PSLFS8PSLFS8PSLFS
History of concurrent Node.js/PEFKT.BTUFS1SPDFTT8PSLFS8PSLFS8PSLFS8PSLFS8PSLFS8PSLFSϚελʔϓϩηε͔Β8PSLFS5ISFBEΛىಈ͢ΔɺεϨουͳͷͰϓϩηεΑΓىಈܰྔɻ
babel-core using single thread.target files(ES6)transpiledcode (ES5)
babel-core using child_process.BTUFStarget filesSend Filetranspiled
babel-core using Worker/PEFKT.BTUFStarget filestranspiledSend File
ResultpMFOVNCFSTCBCFMDPSFVTJOHTJOHMFUISFBECBCFMDPSFVTJOHDIJMEQSPDFTTCBCFMDPSFVTJOHXPSLFS NT NT NT NT NT NT NT NT NT NT NT NT NT NT NT
Node.js Worker Λͬͯ৽͍͠ϥΠϒϥϦΛ࡞͍ͬͯ͘• SSRͷߴԽ• babel, webpackͷߴԽ etc• ϦΫϧʔτςΫϊϩδʔζͰ৽͍ٕ͠ज़Λݚڀ՝ͱͯ͠৽͍͠औΓΈΛ͍ͯ͘͠ɻ
Thank you!!