Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
Search
Kazuhito Hokamura
November 19, 2023
Technology
0
3.6k
Kotlin製のGraphQLサーバーをNode.jsでモジュラモノリス化している話
Kazuhito Hokamura
November 19, 2023
Tweet
Share
More Decks by Kazuhito Hokamura
See All by Kazuhito Hokamura
TypeScriptとGraphQLで実現する 型安全なAPI実装 / TSKaigi 2024
hokaccha
5
4.7k
GraphQLの負債と向き合うためにやっていること
hokaccha
2
1.5k
ユビーのアーキテクチャに対する取り組み
hokaccha
1
440
RailsエンジニアのためのNext.js入門
hokaccha
7
20k
Cookpad Summer Internship 2021 Web Frontend
hokaccha
0
7.2k
巨大なモノリシック Rails アプリケーションの マイクロサービス化戦略 / 2019 microservices in cookpad
hokaccha
3
3.9k
巨大なRailsアプリケーションを「普通」にするための取り組み
hokaccha
1
1k
Web Frontend Improvement in Cookpad
hokaccha
1
1.1k
cookpad summer internship 2018 - Git
hokaccha
1
9.7k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
10
75k
測りにくい成果を測る — BtoB SaaSにおける効果検証への挑戦 / Shirokane Kougyou vol 20
sansan_randd
1
110
slog.Handlerのよくある実装ミス
sakiengineer
4
480
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
210
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
280
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
280
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
590
2025/09/16 仕様駆動開発とAI-DLCが導くAI駆動開発の新フェーズ
masahiro_okamura
0
140
Wantedlyの開発組織における生成AIの浸透プロジェクトについて
kotominaga
2
120
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.3k
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
65k
いま注目のAIエージェントを作ってみよう
supermarimobros
0
370
Featured
See All Featured
Faster Mobile Websites
deanohume
309
31k
Speed Design
sergeychernyshev
32
1.1k
Music & Morning Musume
bryan
46
6.8k
The Invisible Side of Design
smashingmag
301
51k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
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!