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 あるいは React における自律的なデータ取得について
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yosuke Kurami
September 10, 2024
Programming
6k
18
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GraphQL あるいは React における自律的なデータ取得について
Yosuke Kurami
September 10, 2024
More Decks by Yosuke Kurami
See All by Yosuke Kurami
TypeScript LSP の今までとこれから
quramy
1
2.2k
フロントエンドテストの育て方
quramy
12
3.9k
App Router 悲喜交々
quramy
8
770
上手に付き合うコンポーネントテスト
quramy
6
2.4k
Patched fetch did not work
quramy
6
820
Next.js App Router
quramy
15
4k
Fragment Composition of GraphQL
quramy
17
4.9k
reg-viz VRT tools
quramy
4
1.8k
NoInfer
quramy
0
410
Other Decks in Programming
See All in Programming
Simple Storage Service(S3) is not simple
iwatsukayura
0
230
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
510
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Domain-Driven Transformation
hschwentner
2
2.3k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
470
カツオ、ご期待ください
suneo3476
0
160
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
140
Jetpack Compose Mechanisms
skydoves
2
650
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
260
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
340
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
250
Visualization
eitanlees
153
17k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
260
Accessibility Awareness
sabderemane
1
240
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
450
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
A Soul's Torment
seathinner
8
3.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
Become a Pro
speakerdeck
PRO
31
6.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Transcript
GraphQL ͋Δ͍ React ʹ͓͚Δ ࣗతͳσʔλऔಘʹ͍ͭͯ @Quramy 2024.9.10
About me - id: @Quramy (GitHub, X) - ৬छ: Web
ϑϩϯτΤϯυΤϯδχΞ - Quramy ͱ Query ͷؔ - GraphQL ͷܦݧ: ຊ൪ͰܞΘΔΑ͏ʹͳͬͯ5 ~ 6 - Ұ࣌ظ GraphQL Server Side Λ͍ͬͯͨ͜ͱ͋Γ·͕͢ɺ جຊ React ʹΑΔΫϥΠΞϯταΠυͷ։ൃ͕ϝΠϯ - झຯͰ ts-graphql-plugin ͱ͍͏πʔϧΛϝϯς͍ͯ͠·͢ (ͬͪ͜ 7͘Β͍) https://github.com/Quramy/ts-graphql-plugin
ࠓ͢͜ͱ - ϑϩϯτΤϯυʹͱͬͯɺͳͥ GarphQL ͕͋Γ͕͍ͨͷ͔ - React Server Components ͱ
GraphQL ͷؔʹ͍ͭͯ
σʔλϑΣονͷ՝
Data fetch on "Leaf" 1PTU$PNQPOFOUͷσʔλղܾ͕ऴΘΔ·Ͱ"VUIPS$PNQPOFOUʹඞཁ ͳσʔλͷϦΫΤετ͕ߦΘΕͳ͍ʢ͍ΘΏΔΥʔλʔϑΥʔϧʣ ˠύϑΥʔϚϯε͕ѱ͍
Data fetch on "Root" ίϯϙʔωϯτʹඞཁͳσʔλͷཧओମ͕ 3PPUͱͳΔ ࣗతͰͳ͍ σʔλදࣔ༰ͷมߋͷͨͼʹίϯϙʔωϯτ πϦʔશମʹվम͕ٴͿ
ˠอकੑ͕͍
σʔλϑΣονʹ͓͚Δ՝ 3PPUͰσʔλϑΣον -FBGͰσʔλϑΣον 1FSGPSNBODF ✅ 🤮 %FWFMPQFS&YQFSJFODF 🤮 ✅
GraphQL ʹΑΔղ
σʔλϑΣονʹ͓͚Δ՝ GraphQL / Relay ͜ΕΛղফ͢ΔͨΊʹچ Facebook ࣾʹΑͬͯ࡞ΒΕͨ ※ ҎԼ React
Europe 2015 ʹ͓͚ΔͦΕͧΕͷհಈը • Lee Byron ࢯͷ GraphQL հಈը: https://www.youtube.com/watch?v=WQLzZf34FJ8 • Joe Savona ࢯͷ Relay հಈը: https://www.youtube.com/watch?v=IrgHurBjQbg 3PPUͰσʔλϑΣον -FBGͰσʔλϑΣον 1FSGPSNBODF ✅ 🤮 %FWFMPQFS&YQFSJFODF 🤮 ✅
GraphQL ͷֶ - Client / Server ͱʹ Leaf ʹॲཧΛهड़͢Δ ݴ͍͑Δͱɺ֤Ϟδϡʔϧ͕ࣗత.
Fat Controller Fat Component ͕ੜ·Εʹ͍͘ - Client: Leaf Ͱએݴ(fragment), Root(Query) ·ͱΊ্͛Δ͚ͩ - Server: ϑΟʔϧυϦκϧόʮ͕ࣗࣗԿΛฦ͔͢ʯ͚ͩΛҙࣝ͢Ε Α͍ - Leaf <-> Root ͷΓͱΓϑϨʔϜϫʔΫʹͤΔ
Data fetch w/ GraphQL $PNQPOFOU͕ࣗʹඞཁͳσʔλΛ3FTPMWFSʹཁٻ͍ͯ͠Δ ௨৴Λ·ͱΊ্͛Δɾ͢ΔͷϑϨʔϜϫʔΫ͕ͬͯ͘ΕΔ
GraphQL ସͱͯ͠ͷ React Server Components
React Server Components (RSC) ͕ղܾ͍ͨ͠ - 2020ͷ RSC ൃද࣌ʹʮReact ʹ͓͚Δ
Data Fetch ͷෛΛɺGraphQL / Relay Λར༻ͤͣʹղফ͢Δखஈʯͱհ͞Ε͍ͯΔ - https://www.youtube.com/watch?v=TQQPAU21ZUw
RSC ͱ - ʮαʔόʔͰͷΈಈ࡞͢Δʯ React ίϯϙʔωϯτ(Server Component; SC) ͕ര -
ैདྷͷ Server Side Rendering ϒϥβͰಈ࡞͢Δ React ίϯϙʔ ωϯτΛʮαʔόʔͰಈ࡞͍ͤͯ͞Δʯ͚ͩ - Server Ͱ͔͠Ͱ͖ͳ͍͜ͱɺ͢ͳΘͪ σʔλղܾඇಉظIO Λ࣮ߦͰ͖ Δ - SC Ͱ "Leaf data fetch" ͕ Performance ্ͷτϨʔυΦϑͰͳ͘ ͳΔ
Data fetch on "Client" Leaf 1PTU$PNQPOFOUͷσʔλղܾ͕ऴΘΔ·Ͱ"VUIPS$PNQPOFOUʹඞཁ ͳσʔλͷϦΫΤετ͕ߦΘΕͳ͍ʢ͍ΘΏΔΥʔλʔϑΥʔϧʣ ˠύϑΥʔϚϯε͕ѱ͍ ͜ͷΥʔλʔϑΥʔϧ͕ͱͳΔͷɺ $PNQPOFOU
$MJFOU 4FSWFSͷ௨৴͕Π ϯλʔωοτ ߴԆ/8 ΛލΔͨΊ
Data fetch on "Server" Leaf $PNQPOFOU͕4FSWFS4JEF σʔλιʔεͷۙ͘ Ͱಈ࡞͢ΔͷͰ͋ ΕɺΥʔλʔϑΥʔϧͷԆେ͖ͳͰͳ͍ 4FSWFSଆͰඳըࡁΈͷ༰
FH1PTU $PNQPOFOU Λ࣮%0.ʹөͤ͞Δͷ 3FBDU͕ͬͯ͘ΕΔ
Server Component = Fragment Container + Resolver ~ Async Server
Component GraphQL Resolver ͕ Type Data Λฦ͢ΘΓʹɺServer Component ͕ ʮData + ඳը͞Εͨ UI ͷஅยʯΛฦ͢ GraphQL RSC
(SBQI2-3FTPMWFS ্ 4FSWFS$PNQPOFOU Լ ͕ࣗඞཁͱ͢ΔσʔλΛࣗͰղܾ͍ͯ͠Δ ࣗతͰ͋Δ
͜ͷߏͰ։ൃ͢ΔͨΊʹඞ ཁͳ͜ͱ - RSC ʹରԠ͍ͯ͠ΔϝλϑϨʔϜϫʔΫ: Next.js, Redwood, waku, etc... -
GraphQL Resolver ։ൃͷݟ - e.g. N + 1 ͷରԠύλʔϯ, Lazy Loading - GraphQL Sever Side ܦݧऀ͢ΜͳΓ RSC Λ࢝ΊΒΕΔͱࢥ͏
GraphQL ͱͷซ༻
[IMO] RSC + GraphQL Γͨ͘ ͳ͍ - ಉ͜͡ͱΛ࣮ݱ͢Δํ๏͕ࠞࡏ͍ͯ͠Δ͜ͱʹର͢Δسආײ - RSC
ͱ GraphQL ʹॏෳ͍ͯ͠Δཁૉ͕ଟ͍ ղܾ͠Α͏ͱ͕ͨ͠ʮΠϯλʔωοτӽ͠ͷޮతͳσʔλϑΣονʯͳͷͰવ - σʔλऔಘํ๏: Fragment colocation v.s. Fetching data on Leaf - Client Side Cache: Apollo Relay ͷ Store v.s. Next.js ͷ Cache (Router Cache) - Streaming: @defer Directive v.s. React Streaming SSR - RSC ͷཪʹ GraphQL Λஔ͍ͯࢫຯ͕ͳ͍ - RSC ΛΘͣʹɺGraphQL + Relay(or Apollo Client) ͳ SPA ߏͷํ͕·ͩγϯϓϧ
GraphQL or RSC (࠶ܝ) Πϯλʔωοτ ߴԆ/8 Λލ͍ͩ௨৴ʹରͯ͠ɺ ύϑΥʔϚϯεͱࣗੑΛཱ྆͢ΔͨΊ
RSC with GraphQL ...? Ԇ/8ͳαʔόʔڥͰ (SBQI2-Λͬͯࢫຯ͕ͳ͍
ͱݴ͏ͷͷ - ࠞͥΔͳͱݴ͍ͭͭʮݱߦࢿ࢈ͱͯ͠ͷ GraphQL αʔόʔ + ৽نͷϑϩϯτΤ ϯυʹ RSCʯͷંΓ߹͍ɺϢʔβʔϥϯυʹͱͬͯࠓޙͷ՝ -
GraphQL Λ RSC ্Ͱಈ͔͚ͩ͢ͳΒผʹ؆୯. ͪΌΜͱΔͷ͕͍ͣ͠ - e.g. Fragment colocation ͢Δɾ͠ͳ͍ΛϧʔϧܾΊ͢Δ - Relay RSC ౷߹ΛҰஅ೦͍ͯ͠Δ ※ fragment ͷ݁Ռ͕ RSC ϖΠϩʔυͱͳΔΑ͏ͳṖσΟϨΫςΟϒͳͲࢼߦࡨޡ͍ͯͨ͠෩Ͱ͋Δ͕ɺ ͍ͭͷ·ʹ͔ϨϙδτϦ͔Βআ͞Ε͍ͯͨ - Apollo ͷ https://github.com/apollographql/apollo-client-nextjs ৄࡉෆ໌ ※ ಈ࡞͢Δ͕ɺʮΞϓϦέʔγϣϯΛͲ͏࡞Δ͖͔ʯͱ͍͏ࢥ͕Θ͔Βͳ͍
͓ΘΓʹ
·ͱΊ̍ - GraphQL (+ Relay) ͱ React Server Component ɺΠϯλʔωοτӽ
͠ͷσʔλϑΣονʹ·ͭΘΔ (e.g. ΥʔλʔϑΥʔϧ) Λղܾ͢ Δ (ղܾํ๏͕ҟͳΔ͚ͩ) - ͲͪΒͰσʔλϑΣονΛޮΑࣗ͘తʹߦ͏ΞϓϦέʔγϣϯ͕ ࡞Մೳ - [IMO]ʮಉ͡՝ʹର͢Δํ๏ҧ͍ʯͰ͋ΔͨΊࠞͥΔϝϦοτ͕ͳ͍ɻ গͳ͘ͱɺॳखͰ GraphQL ͱ RSC ΛࠞͥΔબԿ͔͕͓͔͍͠
·ͱΊ̎ - ৽نʹ GraphQL Λ࠾༻͠Α͏ͱ͍ͯ͠Δਓ: ·ͣ RSC ͱ͍͏બࢶ͕͋Δ͜ͱΛͬͯ΄͍͠ - ͜Ε͔Β
RSC Λ͓͏ͱ͍ͯ͠Δਓ: Server Component ։ൃͱ GraphQL Resolver ։ൃྨࣅ͕ଟ͍ͷ ͰɺGraphQL ΤίγεςϜ͕ഓ͖ͬͯͨϊϋΛٵऩͯ͠ཉ͍͠
ࢀߟࢿྉ - GraphQL ͷ Fragment Colocation ʹ͍ͭͯͷ֓ཁ: https://speakerdeck.com/quramy/fragment-composition-of-graphql - RSC
(ಛʹ Next.js ʹ͓͚Δ) σʔλϑΣονͷ͋Γํ: https://zenn.dev/akfm/books/nextjs-basic-principle/viewer/part_1 - GraphQL ͱ RSC ͷྨࣅؔʹ͍ͭͯ (ίʔυྫؚΉ): https://quramy.medium.com/react-server-components-ͱ-graphql-ͷΞ φϩδʔ-89b3f5f41a01
Thank you !