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
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven develo...
Search
qsona
September 08, 2021
Technology
6
5.5k
GraphQL を活用したスキーマ駆動開発の実践 / schema-driven development with GraphQL
MIDAS TECH STUDY #2
qsona
September 08, 2021
Tweet
Share
More Decks by qsona
See All by qsona
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
4
510
Backend エンジニア視点からの GraphQL / GraphQL from a perspective of backend engineer
qsona
28
8.7k
3 Practices about Service-to-Service GraphQL Ruby Client
qsona
1
1k
いかにして GraphQL を組織に導入するか (新規開発編) / how we introduce GraphQL on scratch development
qsona
6
4.1k
Well-organized Transaction Script - リファクタリングの妥協的手法 -
qsona
4
1.5k
GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri
qsona
25
14k
最高のマスターデータ管理手法考察 & VSCode Extension を活用した話 / developing masterdata management tool by using vscode extension
qsona
9
6.5k
GraphQL を利用したアーキテクチャの勘所 / Architecture practices with GraphQL
qsona
37
16k
純粋培養GraphQL / Pure GraphQL Architecture
qsona
9
3.1k
Other Decks in Technology
See All in Technology
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
240
Green Tea Garbage Collector の今
zchee
PRO
2
380
“2件同時配達”の開発舞台裏 〜出前館PMが挑んだダブルピック実現に向けた体験設計〜
demaecan
0
180
定期的な価値提供だけじゃない、スクラムが導くチームの共創化 / 20251004 Naoki Takahashi
shift_evolve
PRO
3
220
Geospatialの世界最前線を探る [2025年版]
dayjournal
3
460
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
1.4k
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
130
Optuna DashboardにおけるPLaMo2連携機能の紹介 / PFN LLM セミナー
pfn
PRO
1
810
stupid jj tricks
indirect
0
7.7k
SoccerNet GSRの紹介と技術応用:選手視点映像を提供するサッカー作戦盤ツール
mixi_engineers
PRO
1
160
自作LLM Native GORM Pluginで実現する AI Agentバックテスト基盤構築
po3rin
2
220
Oracle Cloud Infrastructure:2025年9月度サービス・アップデート
oracle4engineer
PRO
0
360
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
950
Git: the NoSQL Database
bkeepers
PRO
431
66k
Speed Design
sergeychernyshev
32
1.1k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Balancing Empowerment & Direction
lara
4
670
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Gamification - CAS2011
davidbonilla
81
5.5k
Designing Experiences People Love
moore
142
24k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.2k
The Invisible Side of Design
smashingmag
301
51k
Transcript
GraphQL Λ׆༻ͨ͠ εΩʔϚۦಈ։ൃͷ࣮ફ @qsona 2021-09-08 MIDAS TECH STUDY #2
whoami • @qsona • Web Engineer at Quipper Ltd •
Microservices / Rails / Node.js / GraphQL
ࠓճͷςʔϚ: ϑϩϯτΤϯυ։ൃޮԽ
։ൃʹ͓͚ΔʮޮԽʯͱ?
Ϧιʔεޮͱϑϩʔޮ • ΞδϟΠϧ։ൃͷจ຺ͰΑ͘ొ͢Δ֓೦ • ʮޮʯ(Efficiency) Λೋͭͷଆ໘͔Βఆ͍ٛͯ͠Δ
Ϧιʔεޮ γεςϜ։ൃͷจ຺ʹ͓͍ͯɺେࡶʹ͍͏ͱ: • ਓతϦιʔεͷྔ (ਓɾ) ʹରͯ͠ɺੜΈग़ͤΔػೳͷྔ • Ϧιʔεޮ͕ѱ͍ྫ • ϑϩϯτΤϯυͷ։ൃ͕։࢝Ͱ͖Δͷɺ
όοΫΤϯυͷ։ൃ͕ऴΘ͔ͬͯΒ => όοΫΤϯυͷ։ൃྃ·ͰɺϑϩϯτΤϯδχΞ͕Ջ͍ͯ͠Δ
ϑϩʔޮ γεςϜ։ൃͷจ຺ʹ͓͍ͯɺେࡶʹ͍͏ͱ: • Ϣʔβʔʹػೳ͕ϦϦʔε͞ΕΔ·Ͱͷɺ࣌ؒͷ͞ • ϦϦʔε͞Εͳ͍ͱՁʹͳΒͳ͍ɻ ՁʹͳΔ·Ͱͷ͕͍ͪ࣌ؒͱޮ͕ѱ͍ɺͱ͍͏ߟ͑ํ • ϑϩʔޮ͕ѱ͍ྫ •
ػೳͷ͏ͪόοΫΤϯυͷ։ൃ͕ͨ͠ɺϑϩϯτΤϯυͷ։ൃ͕·ͩɻ όοΫΤϯυࢹͰϦϦʔεͪͷঢ়ଶ͕͘ଓ͍͍ͯΔ
εΩʔϚۦಈ։ൃͱ ։ൃޮ
લఏɾԾఆ • ࠷ۙͷΞϓϦέʔγϣϯ։ൃ͍͠ શһ͕ͯ͢ͷྖҬΛ͜ͳ͢ͷࠔ • େ͖͘ϑϩϯτΤϯυɾόοΫΤϯυͰ εΩϧηοτ͕͔ΕΔʹ͋Δ • ࠓճ όοΫΤϯυνʔϜ
ͱ ϑϩϯτΤϯυνʔϜ ͕ଘࡏ͢Δঢ়گΛԾఆ͢Δ
ґଘ͕ؔ͋Δ • ґଘؔ ϑϩϯτΤϯυ => όοΫΤϯυ • όοΫΤϯυ͕ఏڙ͢Δ API Λ
ϑϩϯτΤϯυ͕ར༻͢Δ • ૉʹߟ͑ΔͱɺόοΫΤϯυ => ϑϩϯτΤϯυͷॱͰ։ൃ ͢Δ͜ͱʹͳΔ => ޮ͕ѱ͍ (࣍ϖʔδ͔Βઆ໌)
(1) ϑϩʔޮ͕ѱ͍ • όοΫΤϯυͰ࣮͞Εͨػೳ͕ɺ σϓϩΠ͞ΕΔ·Ͱʹ ͕ͪ࣌ؒͰ͖Δ
(2) Ϧιʔεޮ͕ѱ͍ • ϑϩϯτΤϯδχΞ͕࣮ͪͷؒɺՋʹͳͬͯ͠·͏
(2) Ϧιʔεޮ͕ѱ͍ • ෳͷػೳΛॱʹճ͢͜ͱͰվળՄೳ • ͕ɺݱ࣮ʹ͜Μͳʹ៉ྷʹ͍͔ͳ͍ • όοΫΤϯυͷ࣮͕গ͠ͰΕΔͱɺϑϩϯτΤϯυͷՋ͕ൃੜͯ͠͠·͏
ͦ͜Ͱ εΩʔϚۦಈ։ൃ
εΩʔϚۦಈ։ൃ • ͡Ίʹ API ͷεΩʔϚΛఆΊɺ ϑϩϯτΤϯυ - όοΫΤϯυ ؒͰ߹ҙ͢Δ •
ϑϩϯτΤϯυɺόοΫΤϯυͷ API ͷ࣮Λͨͣʹ API εΩʔϚΛར༻࣮ͯ͠։࢝͢Δ • ΫϥΠΞϯτ্Ͱͷ੩తܕɺϞοΫαʔόʔͳͲ͕ಘΒΕɺ ͋Δఔෆ߹ͳ͘։ൃͰ͖Δ
εΩʔϚۦಈ։ൃͱ։ൃޮ • (1) ϑϩʔޮͷد༩ • (2) Ϧιʔεޮͷد༩
(1) ϑϩʔޮͷد༩ • όοΫΤϯυͱϑϩϯτΤϯυ͕ฒྻͰ։ൃͰ͖ΔͷͰɺ ϑϩϯτΤϯυͷͪ࣌ؒΛͳͤ͘Δ
(2) Ϧιʔεޮͷد༩ • όοΫΤϯυͱϑϩϯτΤϯυͷ։ൃͷґଘؔΛͳͤ͘ΔͷͰɺ ͦΕͧΕͷ։ൃͷॱং͕ࣗ༝ʹͳΔ • ݁Ռͱͯ͠ɺϦιʔεޮΛ͍ٻΊΔ͜ͱ͕ՄೳʹͳΔ
ελσΟαϓϦʹ͓͚Δ GraphQLɾεΩʔϚۦಈ։ൃͷ ࣮ફࣄྫ
None
৽ن։ൃϓϩδΣΫτʹ͍ͭͯ • ։ൃ͢Δͷ • iOS / Android / PC Web
Apps • Backend APIs • ίϯςϯπΛཧ͢ΔγεςϜ • ։ൃظؒ: > 1 • ։ൃऀͷਓ: > 10ਓ
৽ن։ൃʹ GraphQL Λશ໘࠾༻ • client => gateway => backends શମͰ
GraphQL Λ࠾༻ • gateway schema stitching Λར༻͍ͯ͠Δ • ͦͷଞར༻ٕज़ • Ruby on Rails • Node.js + TypeScript + Apollo Server + Prisma 2 • React, Apollo Client
εΩʔϚۦಈ։ൃͷԸܙ • ίϛϡχέʔγϣϯͷϩε͕গͳ͘ɺ ҆ఆͯ͠։ൃΛਐΊΒΕͨ • ϦιʔεޮΛٻΊɺ backend / frontend ͦΕͧΕ
~9ϲ݄ؒ ಠཱͯ͠։ൃͨ͠ • ܨ͗͜ΈεϜʔζ • 1िؒͰશ෦ܨ͗͜Έྃͨ͠
εΩʔϚۦಈ։ൃʹ GraphQL Λར༻͢ΔϝϦοτ • εΩʔϚͱ࣮͕ဃ͍͢͠ͱɺܨ͗͜Έ࣌ʹൃ֮͢Δ͕૿͑ɺ࣌ؒ ͕͔͔Δ (=ޮ͕Լ͕Δ) • GraphQL Λར༻͢ΔͱɺαʔόʔɾΫϥΠΞϯτํͰ
εΩʔϚͱ࣮ͷဃ͕ى͖ʹ͍͘ • αʔόʔ: εΩʔϚΛຬͨ͞ͳ͍ϨεϙϯεΛฦͦ͏ͱ͢ΔͱΤϥʔʹͳΔ • ΫϥΠΞϯτ: ੩తܕΛࣗಈੜ͠ɺར༻Ͱ͖Δ
ฐνʔϜʹ͓͚Δ GraphQL εΩʔϚۦಈ։ൃͷϑϩʔ • εΩʔϚ࠷ऴతʹ GraphQL Gateway ʹఆٛ͞ΕΔɻ ͜Ε֤ Backend
Service ʹఆٛ͞Εͨͷ͕ू͞Ε͍ͯΔ • ϑϩϯτΤϯυओಋͰεΩʔϚΛॻ͘ͱ͖ Ұ୴ GraphQL Gateway αʔϏεʹॻ͘ • ϞοΫαʔόʔͱͯ͠ఏڙͰ͖Δ • ࣮࣌ʹɺεΩʔϚఆٛΛ֤όοΫΤϯυαʔϏεʹҠಈ͢Δ • ※ ͜ͷ෦Ͱͪΐͬͱͨ͠Έ͋Γ (ӈͷπΠʔτ)
Q. ୭͕εΩʔϚΛॻ͖͔͘? • A. ͦͷػೳͷಛੑʹΑΔ • ࠷ऴతʹ߹ҙͰ͖ΕΑ͍ɻ୭͕ॻ͍ͯΑ͍ • ϑϩϯτΤϯυΤϯδχΞϓϩμΫτϚωʔδϟʔ͕εΩʔϚΛॻ͚Δͱɺ ϑϩʔޮԽʹͭͳ͕Δ
• ։ൃͷग़ൃͰ͋Δʮཁٻʯʹ͍ۙ • όοΫΤϯυ࣮͕͍͠ػೳɺόοΫΤϯυΤϯδχΞ͕ఆٛͨ͠΄͏͕ྑ͍ • ࣮Ͱ͖ͳ͍εΩʔϚʹҙຯ͕ͳ͍ͨΊ
Q. ୭͕εΩʔϚΛॻ͖͔͘? • εΩʔϚઃܭʹίπ͕͋Γɺ୭͕ॻ͘ʹͯ͠ମಘ͢Δඞཁ͕͋Δ • ը໘༷ͱDBઃܭͷؒʹ͋ΔʮϦιʔεʯΛ͏·͘ଊ͑Δ • GraphQL ͷ߹ͦΕΛ GraphQL
Type ͱͯ͠දݱ͢Δ • ͭ·ΓɺϑϩϯτΤϯυΤϯδχΞͰ͋ΕDBઃܭΛΠϝʔδ͠ɺ όοΫΤϯυΤϯδχΞͰ͋Εը໘࣮ΛΠϝʔδͰ͖Δͱ͏·͘ ͍͖͍͢
·ͱΊ • εΩʔϚۦಈ։ൃΛ࣮ફ͢Δ͜ͱͰɺ Ϧιʔεޮ·ͨϑϩʔޮΛߴΊΔ͜ͱ͕Ͱ͖Δ • GraphQL Λར༻͢Δͱɺͭͳ͗͜Έͷਫ਼ඇৗʹߴ͍ • εΩʔϚ୭͕ॻ͍ͯΑ͍ɻ ରػೳͷಛੑɺνʔϜͷঢ়گͳͲʹΑͬͯม͑ΔͱΑ͍
We're hiring! • GraphQL, Microservices ͪΖΜ ϑϩϯτΤϯυ͔ΒόοΫΤϯυ·Ͱ ͍ٕज़ʹ৮ΕΒΕΔػձ͋Γ • ·ͣΧδϡΞϧ໘ஊ͔Βɺͥͻ͝Ԡื͍ͩ͘͞
😁