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
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
Search
Kazuhito Hokamura
November 19, 2023
Technology
3.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
Kazuhito Hokamura
November 19, 2023
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
TypeScriptとGraphQLで実現する 型安全なAPI実装 / TSKaigi 2024
hokaccha
5
5.2k
GraphQLの負債と向き合うためにやっていること
hokaccha
2
1.7k
ユビーのアーキテクチャに対する取り組み
hokaccha
1
520
RailsエンジニアのためのNext.js入門
hokaccha
7
22k
Cookpad Summer Internship 2021 Web Frontend
hokaccha
0
7.4k
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
hokaccha
3
4.1k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
1.1k
Web Frontend Improvement in Cookpad
hokaccha
1
1.2k
Other Decks in Technology
See All in Technology
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
160
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
260
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
240
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
150
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
260
20260930_Gemma4_Hands-on
tsho
0
210
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
260
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.6k
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
180
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
6
2.1k
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
130
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
Designing for humans not robots
tammielis
254
26k
Navigating Weather and Climate Data
rabernat
0
540
30 Presentation Tips
portentint
PRO
1
410
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Statistics for Hackers
jakevdp
799
230k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
HDC tutorial
michielstock
2
940
Transcript
KotlinͷGraphQLαʔόʔΛNode.jsͰϞδϡϥϞϊϦεԽ͍ͯ͠Δ JSConf JP 2023 @hokaccha
2 About Me Kazuhito Hokamura software engineer @hokaccha @hokaccha
@Ubie,Inc. 3 1. ϢϏʔͷϓϩμΫτʹ͍ͭͯ 2. ϢϏʔͷγεςϜͷݱঢ়ͱ՝ 3. ՝ʹରͯ͠औΓΜͰ͍Δ͜ͱ Table of
Contents
@Ubie,Inc. 4 ࣗͷঢ়Λ͑Δ͚ͩͰɺ ࢀߟප໊ۙ͘ͷҩྍػؔ ʮडͷख͕͔Γʯ͕ௐΒΕΔ ҩྍݱͰ࣮ࡍʹΘΕ͑ΒΕͨAIΛɺੜ׆ऀ͕దͳ ҩྍʹ͔͔Δ҆ͱͯ͠։์͍ͯ͠·͢ (2020य़ʙ) ແྉͰ ୭Ͱ
͍ͭͰ ΄΅શͯͷঢ়Ͱˎ ˎ99% (1.3ສ)ͷঢ়ʹରԠ
@Ubie,Inc. 5 ۀޮԽೝ্ͳͲɺ ױऀ͞ΜͱͷίϛϡχέʔγϣϯઃܭΛ௨͡ɺ ͷ্࣭Λࢧԉ͢Δҩྍػ͚ؔαʔϏε පӃɾΫϦχοΫͦΕͧΕͷχʔζʹ߹ΘͤͨҎԼͷΑ͏ͳ ػೳΛఏڙɾ։ൃ͍ͯ͠·͢ ϢϏʔAI ϢϏʔϦϯΫ ϗʔϜϖʔδAI૬ஊ૭ޱ
etc…
@Ubie,Inc. 6 2. ϢϏʔͷγεςϜͷݱঢ়ͱ՝ 3. ՝ʹରͯ͠औΓΜͰ͍Δ͜ͱ Table of Contents 1.
ϢϏʔͷϓϩμΫτʹ͍ͭͯ
7 γεςϜΞʔΩςΫνϟ
8 • ෳͷݴޠɾϑϨʔϜϫʔΫ͕ཚཱ͍ͯ͠Δ ◦ Kotlin/Spring Boot, Rails, Node.js/NestJS, Go, Python
◦ API GraphQL, gRPC, REST ͕ࠞࡏ • ίʔυϕʔε͕େ͖͘ͳ͖ͬͯͯػೳͷڥք͕ᐆດʹͳΓɺΦʔφʔγοϓ͕ෆ໌ྎʹͳ͍ͬͯΔ ◦ ಛʹϓϩμΫτଆͷαʔϏε͕ංେԽ͍ͯ͠Δ • ݹ͔͘Β͋ΔϨΨγʔͳγεςϜσʔλ͕ΞʔΩςΫνϟతͳΛ࢈ΜͰ͍Δ ◦ ೝෛՙͷ্ঢɺอकίετͷ૿ՃͳͲʹΑΓੜ࢈ੑ͕Լ͍ͯ͠Δ γεςϜ্ͷ՝
9 ҰݴͰ͍͏ͱ ٕज़తෛ࠴͕ ੵΈ্͕͖ͬͯͨʂʂ
@Ubie,Inc. 10 3. ՝ʹରͯ͠औΓΜͰ͍Δ͜ͱ 2. ϢϏʔͷγεςϜͷݱঢ়ͱ՝ Table of Contents 1.
ϢϏʔͷϓϩμΫτʹ͍ͭͯ
11 औΓΜͰ͍Δ͜ͱ • ϦΞʔΩςΫςΟϯάʹΑΔٕज़తෛ࠴ͷղফ ◦ ٕज़ελοΫͷ౷Ұ ◦ ϞδϡϥϞϊϦεԽ • ٕज़తෛ࠴Λίϯτϩʔϧ͢ΔͨΊͷऔΓΈ
◦ ٕज़ઓུɾํͷݴޠԽɾυΩϡϝϯςʔγϣϯ ◦ Design DocʹΑΔઃܭϨϏϡʔͷϓϩηεඋ • ੜ࢈ੑࢦඪͷՄࢹԽͱඪͷઃఆ ◦ Four KeysʹΑΔՄࢹԽ ◦ ੜ࢈ੑվળͷͨΊͷઓུࡦఆ ← ࠓ͜͜ͷ͠
12 ٕज़ελοΫͷ౷Ұ
13 γεςϜΞʔΩςΫνϟ To-Be
14 ٕज़ελοΫͷ౷Ұ • όοΫΤϯυݴޠΛNode.js/Goʹ౷Ұ ◦ ϓϩμΫτଆͷαʔϏεNode.jsɺϓϥοτϑΥʔϜଆGoʹ͢Δ ◦ Node.jsͷਪߏ NestJS, Prisma
͋ͨΓ͕༗ྗ • ϑϩϯτΤϯυNext.jsʹ౷Ұ ◦ ݱঢ়ͱ͋·Γဃͳ͍ͷͰٕज़ελοΫେ෯ͳมߋ༧ఆͳ͠ • APIGraphQLʹ౷Ұ ◦ gRPCͷซ༻Λߟ͍͕͑ͯͨGraphQLʹ౷Ұ͢ΔํͰݕ౼த
15 ϞδϡϥϞϊϦε ʢAI͕ߟ͑ΔϞδϡϥϞϊϦεͷਤʣ
16 ϞδϡϥϞϊϦε #ͱ ϞϊϦεͳΞϓϦέʔγϣϯͷ෦Λػೳ୯ҐͰϞδϡʔϧʹׂͨ͠ΞʔΩςΫνϟ
17 Φʔφʔγοϓ͕େࣄ ʢAI͕ߟ͑ΔΦʔφʔγοϓʣ
18 Why ϞδϡϥϞϊϦε
19 v.s. ϚΠΫϩαʔϏε
20 v.s. ϚΠΫϩαʔϏε • ωοτϫʔΫ௨৴͕ൃੜ͠ͳ͍ͨΊɺ৴པੑύϑΥʔϚϯεͳͲͷͰ༗ར • ಉҰίʔυϕʔεͳͷͰ։ൃڥͷߏஙΠϯςάϨʔγϣϯςετ͕༰қ • ΤϥʔτϥοΩϯάࢹɺτϥϒϧγϡʔςΟϯά͕γϯϓϧʹͳΔ •
ϞδϡʔϧͷڥքͷมߋʹରԠ͍͢͠ ϞδϡϥϞϊϦεͷϝϦοτ
21 v.s. ϚΠΫϩαʔϏε • ػೳ୯ҐͰσϓϩΠεέʔϦϯά͕Ͱ͖ͳ͍ • ϓϩμΫτͷεέʔϧʹͬͯσϓϩΠύΠϓϥΠϯCI͕ංେԽɺෳࡶԽ͢Δ • ϞδϡʔϧͷڥքΛҡ࣋͢ΔͨΊͷίετ͕͔͔Δ ϞδϡϥϞϊϦεͷσϝϦοτ
22 ϢϏʔʹ͓͚ΔϞδϡϥϞϊϦε
23 ٕज़બఆ • NestJS Ͱ GraphQL αʔόʔΛߏங͢Δ • ORM
Prisma • ϑϨʔϜϫʔΫϥΠϒϥϦ͍ͨͬͯී௨ͷߏ
24 ύοέʔδཧ • package.json ͕ϧʔτʹ͋Δ͚ͩͷී௨ͷ Node.js ϓϩδΣΫτ • npm workspace
ͱ Turborepo Λͬͨ multi packages ߏݕ౼ ◦ શͯͷϞδϡʔϧͰಉ͡ϥΠϒϥϦઃఆΛ͏ͷͰ ϝϦοτ͕গͳ͍ ◦ ෳࡶੑͷ૿ՃͳͲͷσϝϦοτ্͕ճΔͱஅͯ͠Ίͨ
25 Database, ORM • DBϞδϡʔϧؒͰڞ༗͢Δ ◦ Ϟδϡʔϧ͝ͱʹDBͷεΩʔϚΛ͚Δʢ༧ఆʣ • ςʔϒϧɾܕͷఆٛϞδϡʔϧ͝ͱʹఆٛ͢Δ •
prisma-import Λͬͯ݁߹͢Δ ◦ github.com/ajmnz/prisma-import • ϞδϡʔϧΛލ͍ͩjoinڐՄ͠ͳ͍ • ϞδϡʔϧΛލ͍ͩτϥϯβΫγϣϯݕ౼த
26 GraphQL • GraphQLͷεΩʔϚؚΊ֤ͯϞδϡʔϧ͕ཧ͢Δ • ΤϯτϦϙΠϯτͰεΩʔϚͱresolverΛ݁߹͢Δ
27 Ϟδϡʔϧؒ௨৴ • exportͨؔ͠Λݺͼग़͚ͩ͢ ◦ TypeScriptͷܕ͕͋ΔͷͰഁյతͳมߋʹΑͬͯյΕΔͱ͍͏͜ͱൃੜ͠ʹ͍ͣ͘ • ֎෦ͷϞδϡʔϧʹެ։͍ͯ͠Δػೳ͔Ͳ͏͔Λ໌ࣔͰ͖ΔΑ͏ʹ͢Δ ◦ modules/module-name
Լͷ index.ts Ͱ export ͨ͠ͷҎ֎֎෦͔Βར༻͠ͳ͍ ◦ eslint ͷ import/no-internal-modules Λ੍ͬͯݶ͢Δ
28 ςετ • NestJSͷDIΛͬͯࣗͷϞδϡʔϧҎ֎Λmock͢Δ • ଞͷϞδϡʔϧͷมߋʹΑͬͯςετ͕յΕͳ͍
29 ·ͱΊ • ϢϏʔϓϩμΫτ৫͕εέʔϧ͖ٕͯͯ͠ज़తෛ࠴Λฦ͍ͯ͠ΔϑΣʔζ • औΓΈͱٕͯ͠ज़ελοΫͷ౷ҰϞδϡϥϞϊϦεԽΛਐΊ͍ͯΔ • ָ͍࣌͠ظͳͷͰڵຯΛ࣋ͬͯ͘Εͨํ͔͚͍ͯͩ͘͞ʂ
30 Ұॹʹͬͯ͘ΕΔํ ੵۃืूதʂ
31 UbieͰੵۃతʹ࠾༻Λߦ͍ͬͯ·͢ɻ͋ͳͨͷԠืΛ͓ ͍ͪͯ͠·͢ɻ ΧδϡΞϧ໘ஊԠืϑΥʔϜ We Are Hiring!