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
リクルートテクノロジーズの技術動向
Search
Yosuke Furukawa
PRO
June 30, 2018
Programming
3.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リクルートテクノロジーズの技術動向
Java/Go のOB,OG会で発表した リクルートテクノロジーズの技術動向の話です。
Yosuke Furukawa
PRO
June 30, 2018
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
Webの地図
yosuke_furukawa
PRO
6
5.2k
XHTMLが残したもの
yosuke_furukawa
PRO
2
950
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
450
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
320
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.4k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.9k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
380
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.2k
Other Decks in Programming
See All in Programming
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
AI-Powered Domain-Driven Design
ziobrando
0
290
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
AmebaブログはKMPから卒業します
kmars0605
0
220
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
190
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
460
ActionController meets Protocol Buffers
sorah
0
680
R8 の設定見直しでアプリサイズ削減
andpad
0
230
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
200
Domain-Driven Transformation
hschwentner
2
2.3k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
KATA
mclloyd
PRO
35
16k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
Scaling GitHub
holman
464
140k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
610
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Transcript
ϦΫϧʔτςΫϊϩδʔ ζͷٕज़બఆ 2018/06/30 @ freee גࣜձࣾ / Java/GoݚमOBձ
Twitter: @yosuke_furukawa Github: yosuke-furukawa
2018/11/23 - 24 Node ֶԂࡇ։࠵
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 Clojure Kotlin Python
Java Node.js Go ϦΫϧʔτςΫϊϩδʔζͰͬͯΔαʔόα Πυݴޠ Ruby Erlang Clojure Kotlin Python
ׂͱͨ͘͞Μͷٕज़Λͬͯ ͍Δɻ
ϦΫϧʔτςΫϊϩδʔζͷඪ ४తͳߏ • 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 #FGPSFW 4JOHMF1SPDFTT 4JOHMF5ISFBE
History of concurrent Node.js /PEFKT .BTUFS1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT
$IJME 1SPDFTT $IJME 1SPDFTT
History of concurrent Node.js /PEFKT .BTUFS1SPDFTT $IJME 1SPDFTT $IJME 1SPDFTT
$IJME 1SPDFTT $IJME 1SPDFTT .BTUFS1SPDFTT DBOGPSLDIJMEQSPDFTT W
History of concurrent Node.js /PEFKT .BTUFS1SPDFTT 8PSLFS 8PSLFS 8PSLFS 8PSLFS
8PSLFS 8PSLFS
History of concurrent Node.js /PEFKT .BTUFS1SPDFTT 8PSLFS 8PSLFS 8PSLFS 8PSLFS
8PSLFS 8PSLFS Ϛελʔϓϩηε͔Β8PSLFS5ISFBEΛىಈ͢ΔɺεϨου ͳͷͰϓϩηεΑΓىಈܰྔɻ
babel-core using single thread. target files (ES6) transpiled code (ES5)
babel-core using child_process .BTUFS target files Send File transpiled
babel-core using Worker /PEFKT .BTUFS target files transpiled Send File
Result pMF OVNCFST CBCFMDPSF VTJOHTJOHMFUISFBE CBCFMDPSF VTJOHDIJMEQSPDFTT CBCFMDPSF VTJOHXPSLFS
NT NT NT NT NT NT NT NT NT NT NT NT NT NT NT
Node.js Worker Λͬͯ৽͠ ͍ϥΠϒϥϦΛ࡞͍ͬͯ͘ • SSRͷߴԽ • babel, webpackͷߴԽ etc
• ϦΫϧʔτςΫϊϩδʔζͰ৽͍ٕ͠ज़Λݚ ڀ՝ͱͯ͠৽͍͠औΓΈΛ͍ͯ͘͠ɻ
Thank you!!