Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL を完全に理解する

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

GraphQL を完全に理解する

Avatar for Masayoshi Tokumoto

Masayoshi Tokumoto

June 12, 2021
Tweet

More Decks by Masayoshi Tokumoto

Other Decks in Technology

Transcript

  1. ಈػ • લ৬Ͱ GraphQL ࢖ͬͯศརͩͬͨ • ݱࡏͷҊ݅Ͱ GraphQL Λ࢖͍ͬͯΔ •

    @saboyutaka ͞Μͷ GraphQL ͷهࣄΛݟͯԿ΋Θ͔͍ͬͯͳ͔ͬͨ͜ͱ͕ Θ͔ͬͨ • ൓লͱͱ΋ʹ GraphQL ʹ͍ͭͯͷ஌ࣝΛ͜͜Ͱ੔ཧ͢Δ
  2. ͬ͘͟Γ͍͏ͱ • GraphQL ࣗମ͸ specʢ࢓༷ʣ • QLʢQuery LanguageʣͳͷͰ໰͍߹Θͤݴޠ • GraphQL

    Client ͱ GraphQL Server ؒͷϓϩτίϧ • Client ଆ΋ؚΊͯσβΠϯ͞Ε͍ͯΔ WebAPI ͷ࢓༷
  3. “Graph”QL ͳཧ༝ • ࠷ۙͷΞϓϦͷσʔλ͕ϊʔυͱΤοδͷάϥϑͰදݱͰ͖Δ͜ͱΛ׆༻ • GraphQL ͸ΫΤϦ݁ՌπϦʔΛੜ੒͢ΔͨΊͷ໰͍߹Θͤݴޠ • GraphQL ͷπϦʔߏ଄͸ΫϥΠΞϯταΠυͷΩϟογϡʹ͏͚ͬͯͭ

    • Same Path, Same Object • Same Object ID, Same Object • Apollo Client ͸ Cache ͞Ε͍ͯΔσʔλͷ f ield ͕ߋ৽͞ΕͨΒ Cache ΋ߋ৽ͯ͘͠ΕΔ
  4. GraphQL ͷ࿩Ͱग़ͯ͘Δ༻ޠ • GraphQL Clientʢࡶʹ͍͏ͱ Query Λൃߦ͢Δ΋ͷʣ • GraphQL ServerʢGraphQL

    Λ࣮૷ͨ͠αʔόʔʣ • ResolverʢQuery ͰٻΊΒΕͨσʔλΛฦͨ͢Ίͷ΋ͷʣ • DataSourceʢσʔλΛอ͍࣋ͯ͠Δαʔόʔ΍ΞϓϦέʔγϣϯʣ
  5. GraphQL ͷಈ࡞ݪཧ • Scheme Ͱσʔλ΍ΦϒδΣΫτͷϦϨʔγϣϯΛ͋Β͔͡Ίએݴ͢Δ • એݴ͞ΕͨScheme͸άϥϑߏ଄ʹͳΔ 
 • ΫϥΠΞϯτ͸

    Query Λར༻͠σʔλͷऔಘΛߦ͏ • Query ͸͋ΔϊʔυΛϧʔτͱͨ͠໦ߏ଄ΛऔΓग़͢ૢ࡞ 
 • ύʔε͞Εͯߏங͞Εͨ໦ͷϊʔυΛͲ͏ղܾ͢Δ͔Λهड़ͨؔ͠਺ ʢResolverʣ্͕Ґ͔Βஈ֊తʹݺͼग़͞Εղܾ͍ͯ͘͠ • ྫ 
 • Resolver ͸ DataSource Ϋϥεͷؔ਺Λݺͼग़͢ɻDataSource ͸ HTTP Ϧ ΫΤετΛૹΔ΋ͷ΍DB ΁ SQL Λൃߦ͢Δ΋ͷɺϑΝΠϧΛಡΈࠐΈͳ ͲΛهड़ͨ͠Ϋϥεɻ 
 • શͯͷϊʔυͷresolve͕ऴΘΔͱɺϨεϙϯεΛฦ͢
  6. ࡢࠓͷ Web ։ൃͷτϨϯυ ϑϩϯτΤϯυ • ϚϧνϓϥοτϑΥʔϜԽ • ϦονϑϩϯτΤϯυԽ • ϑϩϯτΤϯυͷΞϓϦέʔγϣϯಛੑ

    • ੡඼ͷϥΠϑαΠΫϧ͕୹͘ɺAPI ʹର͢Δཁٻ͸ৗʹมԽ͢Δ αʔόʔαΠυ • ϚΠΫϩαʔϏεԽ • αʔόʔαΠυओମͷ API ઃܭ
  7. BFF

  8. ʲ༨ஊʳϞόΠϧϑΝʔετͱΠϯλʔωοτͷϑϩϯςΟΞ • GraphQL ͸ Facebook ൃͷ WebAPI ࢓༷ • 2015೥ʹOSSԽ

    • എܠʹ͸ϞόΠϧΫϥΠΞϯτͷٸ૿΍ɺωοτϫʔΫτϥϑΟοΫͷ૿େɺΞϓϦͷWebView͔ΒωΠςΟ ϒԽ͕͋ͬͨ • Facebook ͷΑ͏ͳੈքతͳ IT اۀ͸Ϗδωεͷ֦େͷͨΊʹɺະͩΠϯλʔωοτʹ߃ৗతʹ઀ଓ͢Δ͜ͱ ͕Ͱ͖ͳ͍ੈքͷ໿൒਺ʢ30ԯʣ΁ΠϯλʔωοτΛීٴͤ͞ΔϓϩδΣΫτΛܾߦ͍ͯ͠Δ • ΞϑϦΧΛऔΓғΉւఈέʔϒϧʮ2AfricaʯʢFacebook ͳͲʣ • 12,000 ΋ͷਓ޻Ӵ੕Λ૊Έ߹ΘͤͯӴ੕ϒϩʔυόϯυΛఏڙ͢ΔϓϩδΣΫτʮStarlinkʯʢSpaceXʣ • ↑ͷϓϩδΣΫτ͕͋Δ͜ͱ΋ߟ͑ΔͱϞόΠϧΫϥΠΞϯτͷϦιʔε(CPU, ϝϞϦ, ωοτϫʔΫ, όος Ϧʔ)Λ࠷খԽ͍ͨ͠ͱࢥ͏ͷ͸ࣗવ͔
  9. ϑϩϯτΤϯυͷϝϦοτʢͷҰ෦ʣ • ϢʔεέʔεͷมߋʹॊೈʹରԠͰ͖ΔΑ͏ʹͳΔ • Schema ʹΑΔࣗݾจॻԽʢ্࣮࣭ͷ API υΩϡϝϯτʣ • ΦʔόʔϑΣονɾΞϯμʔϑΣον͠ͳ͘ͳΔ

    • GraphQL ͷΈͳΒͣͦͷपΓͷΤίγεςϜͷԸܙΛड͚Δ͜ͱ͕Ͱ͖Δ • ϑϩϯτΤϯυͷঢ়ଶ؅ཧͷϕετϓϥΫςΟεͱͯ͠ͷ Apollo Client
  10. όοΫΤϯυͷϝϦοτʢͷҰ෦ʣ • ΫϥΠΞϯτ౎߹Ͱͷ API ͷ࢓༷΍ΞʔΩςΫνϟͷมߋΛݮΒ͢͜ͱ͕ग़ དྷΔ • ΞϓϦέʔγϣϯɾσʔλετΞͷมߋ͕༰қʹͳΔ • ஈ֊తͳେن໛ΞʔΩςΫνϟมߋʹ΋ར༻Ͱ͖Δ

    • ΫϥΠΞϯτͷ؀ڥ࢓༷΁ͷߟྀΛݮΒ͢͜ͱ͕ग़དྷΔ • MicroservicesΛ࠾༻ͨ͠৔߹ͷ API ࢓༷ͷ౷ҰԽΛਤΔίετΛݮΒ͢ࣄ͕ ग़དྷΔ