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
20260801_スクフェス大阪
kgnkhkr
1
860
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
410
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
260
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
1.6k
歴史から理解するクラウドインフラのしくみ
kizawa2020
1
200
「待ち時間」の消滅と「自我消耗」の加速:生成AI時代のエンジニアを救うメンタル・リソース管理
poropinai1966
0
400
ガバメントクラウドでのランサムウェア対策
techniczna
1
590
システム監視を 「システムを監視するだけ」で 終わらせないために
seiud
0
160
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
120
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
2.1k
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
280
信頼できるテスティングAIをどう育てるか?
odan611
0
180
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Statistics for Hackers
jakevdp
799
230k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
380
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
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 ͍͍ͧ ͋Γ͕ͱ͏͍͟͝·ͨ͠