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 を完全に理解する
Search
Masayoshi Tokumoto
June 12, 2021
Technology
47
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GraphQL を完全に理解する
Masayoshi Tokumoto
June 12, 2021
More Decks by Masayoshi Tokumoto
See All by Masayoshi Tokumoto
プロダクト・人・チームをいい感じにするためのシステム思考
sasumasa
0
66
RxJS と Netflix から学ぶリアクティブプログラミング
sasumasa
0
51
Stimulus × Jest × Direct Upload × Image Fluxで カオスなJS環境と画像アップロード機能を改善しつつユーザーの投稿率を上げた話
sasumasa
1
390
キャパを超えた大型プロジェクトから学んだこと
sasumasa
0
1.5k
RailsエンジニアがStimulus + 生JSだけで約半年のプロジェクトを終えた今思うこと
sasumasa
0
340
IKUSEI on Rails
sasumasa
2
1.9k
文系から半年でRuby(Sinatra, Rails)を学んだら人生変わった@沖縄Ruby会議02
sasumasa
9
19k
Other Decks in Technology
See All in Technology
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
170
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
250
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
200
初めてのDatabricks勉強会
taka_aki
2
230
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
130
RAGの精度向上とエージェント活用
kintotechdev
2
120
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
180
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
250
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
220
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
0
380
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
380
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
0
120
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
210
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
180
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Building an army of robots
kneath
306
46k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
Discover your Explorer Soul
emna__ayadi
2
1.2k
The browser strikes back
jonoalderson
0
1.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
Transcript
GraphQLΛશʹཧղ͢Δ @sasumasax
None
࣍ 1. GraphQL ͱͳʹ͔ 2. GraphQL ͕ग़͖ͯͨഎܠ 3. GraphQL ͕༩͑ΔΠϯύΫτ
4. GraphQL Λ͍ͭ࠾༻͢Δ͔
ಈػ • લ৬Ͱ GraphQL ͬͯศརͩͬͨ • ݱࡏͷҊ݅Ͱ GraphQL Λ͍ͬͯΔ •
@saboyutaka ͞Μͷ GraphQL ͷهࣄΛݟͯԿΘ͔͍ͬͯͳ͔ͬͨ͜ͱ͕ Θ͔ͬͨ • লͱͱʹ GraphQL ʹ͍ͭͯͷࣝΛ͜͜Ͱཧ͢Δ
ҙ ※͋͘·Ͱݱ࣌ͰͷࣝɾܦݧͰͷײɾ·ͱΊͰ͢ɻ
GraphQL ͱͳʹ͔
ͬ͘͟Γ͍͏ͱ • GraphQL ࣗମ specʢ༷ʣ • QLʢQuery LanguageʣͳͷͰ͍߹Θͤݴޠ • GraphQL
Client ͱ GraphQL Server ؒͷϓϩτίϧ • Client ଆؚΊͯσβΠϯ͞Ε͍ͯΔ WebAPI ͷ༷
ͲΜͳײ͡ͷͷ͔ ↑Λ࣮ݱ͢ΔͨΊͷ༷
“Graph”QL ͳཧ༝ https://www.apollographql.com/blog/graphql/basics/the-concepts-of-graphql/
“Graph”QL ͳཧ༝ • ࠷ۙͷΞϓϦͷσʔλ͕ϊʔυͱΤοδͷάϥϑͰදݱͰ͖Δ͜ͱΛ׆༻ • GraphQL ΫΤϦ݁ՌπϦʔΛੜ͢ΔͨΊͷ͍߹Θͤݴޠ • GraphQL ͷπϦʔߏΫϥΠΞϯταΠυͷΩϟογϡʹ͏͚ͬͯͭ
• Same Path, Same Object • Same Object ID, Same Object • Apollo Client Cache ͞Ε͍ͯΔσʔλͷ f ield ͕ߋ৽͞ΕͨΒ Cache ߋ৽ͯ͘͠ΕΔ
GraphQL ͷͰग़ͯ͘Δ༻ޠ • GraphQL Clientʢࡶʹ͍͏ͱ Query Λൃߦ͢Δͷʣ • GraphQL ServerʢGraphQL
Λ࣮ͨ͠αʔόʔʣ • ResolverʢQuery ͰٻΊΒΕͨσʔλΛฦͨ͢Ίͷͷʣ • DataSourceʢσʔλΛอ͍࣋ͯ͠ΔαʔόʔΞϓϦέʔγϣϯʣ
GraphQL ͷಈ࡞ݪཧ • Scheme ͰσʔλΦϒδΣΫτͷϦϨʔγϣϯΛ͋Β͔͡Ίએݴ͢Δ • એݴ͞ΕͨSchemeάϥϑߏʹͳΔ • ΫϥΠΞϯτ
Query Λར༻͠σʔλͷऔಘΛߦ͏ • Query ͋ΔϊʔυΛϧʔτͱͨ͠ߏΛऔΓग़͢ૢ࡞ • ύʔε͞Εͯߏங͞ΕͨͷϊʔυΛͲ͏ղܾ͢Δ͔Λهड़ͨؔ͠ ʢResolverʣ্͕Ґ͔Βஈ֊తʹݺͼग़͞Εղܾ͍ͯ͘͠ • ྫ • Resolver DataSource ΫϥεͷؔΛݺͼग़͢ɻDataSource HTTP Ϧ ΫΤετΛૹΔͷDB SQL Λൃߦ͢ΔͷɺϑΝΠϧΛಡΈࠐΈͳ ͲΛهड़ͨ͠Ϋϥεɻ • શͯͷϊʔυͷresolve͕ऴΘΔͱɺϨεϙϯεΛฦ͢
GraphQL ͕ग़͖ͯͨഎܠ
ࡢࠓͷ Web ։ൃͷτϨϯυ ϑϩϯτΤϯυ • ϚϧνϓϥοτϑΥʔϜԽ • ϦονϑϩϯτΤϯυԽ • ϑϩϯτΤϯυͷΞϓϦέʔγϣϯಛੑ
• ͷϥΠϑαΠΫϧ͕͘ɺAPI ʹର͢ΔཁٻৗʹมԽ͢Δ αʔόʔαΠυ • ϚΠΫϩαʔϏεԽ • αʔόʔαΠυओମͷ API ઃܭ
͜͏ͳΔ
BFF
ݸผ BFF ͷ՝ • BFFؒͰࣅͨΑ͏ͳॏෳ࣮ʹͳͬͯ͠·͏ • ϦιʔεαʔόʔͷΞΫηεͷଟॏԽղܾ͞Ε͍ͯͳ͍ • ΫϥΠΞϯτ͝ͱʹ࡞ΔͷͰΫϥΠΞϯτ͕͋Δఔେ͖͘ͳΔ·Ͱಋೖ ͞ΕͣΒ͍
• ͦΕ·ͰΫϥΠΞϯτόοΫΤϯυ߹Ͱ࡞ΒΕͨ API ͰΓ͘Γ͢ Δඞཁ͕͋Δ
Universal BFF ͱͯ͠ GraphQL Λ࠾༻͢Δ API Gateway Pattern ͷԸܙΛड͚Δ
ʲ༨ஊʳϞόΠϧϑΝʔετͱΠϯλʔωοτͷϑϩϯςΟΞ • GraphQL Facebook ൃͷ WebAPI ༷ • 2015ʹOSSԽ
• എܠʹϞόΠϧΫϥΠΞϯτͷٸ૿ɺωοτϫʔΫτϥϑΟοΫͷ૿େɺΞϓϦͷWebView͔ΒωΠςΟ ϒԽ͕͋ͬͨ • Facebook ͷΑ͏ͳੈքతͳ IT اۀϏδωεͷ֦େͷͨΊʹɺະͩΠϯλʔωοτʹ߃ৗతʹଓ͢Δ͜ͱ ͕Ͱ͖ͳ͍ੈքͷʢ30ԯʣΠϯλʔωοτΛීٴͤ͞ΔϓϩδΣΫτΛܾߦ͍ͯ͠Δ • ΞϑϦΧΛऔΓғΉւఈέʔϒϧʮ2AfricaʯʢFacebook ͳͲʣ • 12,000 ͷਓӴΛΈ߹ΘͤͯӴϒϩʔυόϯυΛఏڙ͢ΔϓϩδΣΫτʮStarlinkʯʢSpaceXʣ • ↑ͷϓϩδΣΫτ͕͋Δ͜ͱߟ͑ΔͱϞόΠϧΫϥΠΞϯτͷϦιʔε(CPU, ϝϞϦ, ωοτϫʔΫ, όος Ϧʔ)Λ࠷খԽ͍ͨ͠ͱࢥ͏ͷࣗવ͔
GraphQL ΛೖΕΔͱԿ͕خ͍͔͠
ϑϩϯτΤϯυͷϝϦοτʢͷҰ෦ʣ • ϢʔεέʔεͷมߋʹॊೈʹରԠͰ͖ΔΑ͏ʹͳΔ • Schema ʹΑΔࣗݾจॻԽʢ্࣮࣭ͷ API υΩϡϝϯτʣ • ΦʔόʔϑΣονɾΞϯμʔϑΣον͠ͳ͘ͳΔ
• GraphQL ͷΈͳΒͣͦͷपΓͷΤίγεςϜͷԸܙΛड͚Δ͜ͱ͕Ͱ͖Δ • ϑϩϯτΤϯυͷঢ়ଶཧͷϕετϓϥΫςΟεͱͯ͠ͷ Apollo Client
όοΫΤϯυͷϝϦοτʢͷҰ෦ʣ • ΫϥΠΞϯτ߹Ͱͷ API ͷ༷ΞʔΩςΫνϟͷมߋΛݮΒ͢͜ͱ͕ग़ དྷΔ • ΞϓϦέʔγϣϯɾσʔλετΞͷมߋ͕༰қʹͳΔ • ஈ֊తͳେنΞʔΩςΫνϟมߋʹར༻Ͱ͖Δ
• ΫϥΠΞϯτͷڥ༷ͷߟྀΛݮΒ͢͜ͱ͕ग़དྷΔ • MicroservicesΛ࠾༻ͨ͠߹ͷ API ༷ͷ౷ҰԽΛਤΔίετΛݮΒ͢ࣄ͕ ग़དྷΔ
ผͷ؍ͰͷϝϦοτ
ผͷ؍ͰͷϝϦοτ ރΕٕͨज़Λʮઓུతʹʯ͍ͬͯΔͷ͔ɺ ރΕٕͨज़͔͑͠ͳ͍ͷ͔େ͖ͳࠩ
GraphQL Λ͍ͭ࠾༻͖͔͢
͜Μͳ࣌ʹ࠾༻͢Δͷ͕ྑͦ͞͏ʢΒ͍͠ʣ • ϑϩϯτΤϯυ͕ෳͷσʔλιʔεʹΞΫηε͍ͯ͠Δ • ϑϩϯτΤϯυͰෳͷϓϥοτϑΥʔϜͷΞϓϦέʔγϣϯ͕ଘࡏ͢Δ • αʔόʔαΠυ͕ Microservices Ͱ࣮͞Ε͍ͯΔ •
طଘͷΞϓϦέʔγϣϯΛมߋͳ͠ʹϞμϯͳϑϩϯτΤϯυΛ࣮͍ͨ͠ • ϑϩϯτΤϯυͰ GraphQL Λར༻࣮͍ͯͨ͠͠
ͬͱ·ͱΊΔͱ • มԽɾਐԽ͠ଓ͚ΔΞϓϦέʔγϣϯ • ෳࡶੑͷߴ͍ΞϓϦέʔγϣϯ
ݸਓతʹ ϑϩϯτΤϯυʢϞϊϦε͡Όͳ͍ʣલఏͷϓϩδΣΫτͰɺదͳֶश ίετΛ͑Δঢ়گͰ͋Ε GraphQL ࠾༻ͯ͠ΈͨΒ͍͍Μ͡Όͳ͍͔ͳͱ ࢥ͍ͬͯΔ ʢౖΒΕΔ͔ͳʣ
GraphQL ͍ΖΜͳܗͰಋೖͰ͖Δ
Ruby Ͱ͜Μͳͷ͕͋Δ https://graphql-ruby.org
·ͱΊ
GraphQL ͍͍ͧ ͋Γ͕ͱ͏͍͟͝·ͨ͠