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
GraphQL を完全に理解する
Search
Masayoshi Tokumoto
June 12, 2021
Technology
48
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
70
RxJS と Netflix から学ぶリアクティブプログラミング
sasumasa
0
56
Stimulus × Jest × Direct Upload × Image Fluxで カオスなJS環境と画像アップロード機能を改善しつつユーザーの投稿率を上げた話
sasumasa
1
390
キャパを超えた大型プロジェクトから学んだこと
sasumasa
0
1.5k
RailsエンジニアがStimulus + 生JSだけで約半年のプロジェクトを終えた今思うこと
sasumasa
0
350
IKUSEI on Rails
sasumasa
2
1.9k
文系から半年でRuby(Sinatra, Rails)を学んだら人生変わった@沖縄Ruby会議02
sasumasa
9
19k
Other Decks in Technology
See All in Technology
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
520
SREでアラート疲れを 解決しよう!
kairim0
1
210
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
1
680
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
260
20260930_Gemma4_Hands-on
tsho
0
230
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
220
今こそ知りたいAmplifyGen2
mkdev10
2
150
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
300
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
140
自主式軟體工廠
philipz
0
230
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
433
67k
For a Future-Friendly Web
brad_frost
183
10k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Practical Orchestrator
shlominoach
192
12k
Are puppies a ranking factor?
jonoalderson
2
4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
710
From π to Pie charts
rasagy
1
390
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Become a Pro
speakerdeck
PRO
31
6.3k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
What's in a price? How to price your products and services
michaelherold
247
13k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
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 ͍͍ͧ ͋Γ͕ͱ͏͍͟͝·ͨ͠