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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
Omarchy Quattro の日本語設定周り
simosako
2
150
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
160
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
980
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
140
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
330
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
家のリアーキテクト・リファクタリング
suguruooki
0
130
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
120
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
180
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
150
20260912_スクフェス三河
kgnkhkr
0
310
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
280
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
920
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
How to build a perfect <img>
jonoalderson
1
6k
Faster Mobile Websites
deanohume
310
32k
Fireside Chat
paigeccino
43
4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Code Review Best Practice
trishagee
74
20k
We Have a Design System, Now What?
morganepeng
55
8.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
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 ͍͍ͧ ͋Γ͕ͱ͏͍͟͝·ͨ͠