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
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
10x Speed With QA Agent Platform - How we scaled adoption from individual effort to organizational capability
lycorptech_jp
PRO
0
130
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
4
350
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
0
390
初めてのDatabricks勉強会
taka_aki
2
230
なぜ人は自分のプロジェクトを 「なんちゃってアジャイル」と 自嘲するのか
kozotaira
0
240
AI時代における最適なQA組織の作り方
ymty
3
350
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
140
Baseline対応のDOMの型定義を作った
uhyo
2
650
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
180
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
340
#エンジニアBooks 30分でわかる 「技術記事を書く技術」 / engineer-books 2026-06-30
jnchito
1
180
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
210
Producing Creativity
orderedlist
PRO
348
40k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
270
Designing for humans not robots
tammielis
254
26k
How to make the Groovebox
asonas
2
2.3k
WCS-LA-2024
lcolladotor
0
670
Between Models and Reality
mayunak
4
360
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
30 Presentation Tips
portentint
PRO
1
340
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 ͍͍ͧ ͋Γ͕ͱ͏͍͟͝·ͨ͠