#ebisurb
RubyͰ࢝ΊΔGraphQLೖ#23@hatappi
View Slide
Yusaku Hatanaka@hatappiMerpay Inc.Go, Ruby, etc…<>Roppongi.rb organizerRubyKaigi 2019
ಥવͰ͕࣭͢Ͱ͢
GET /users/1 ϦΫΤετ͠·ͨ͠Կ͕ฦ͖ͬͯ·͔͢ʁ
ᶃ ᶄ ᶅ
༗ޮͳJSONΛฦͤΔͳΒOK͔͠͠ϦιʔεʹΑͬͯϑΥʔϚοτ͕ҟͳΔͱɻɻɻΤϥʔ࣌ͷϨεϙϯεϑΥʔϚοτΕ͕ͪ
userͱfriendsΛऔಘ͍ͨ͠GET /users/1GET /users/1/friends
ඞཁͳใΛऔಘ͢ΔͨΊʹԿճ͔ϦΫΤετΛ͢Δ͜ͱ
GraphQL͕׆༂Ͱ͖Δ͔ʁʂ
GraphQL• APIͷͨΊͷΫΤϦݴޠ• ΫΤϦݴޠͷ༷ͱͯ͠ܕఆٛ͞ΕͨεΩʔϚΛఆٛͯ͠ΫΤϦΛ༻͍͍ͯ߹ΘͤΛ͢Δ• FacebookʹΑͬͯ։ൃ͞Εͯ2015ʹOSSͱͯ͠ެ։͞Εͨ• https://graphql.org/
ΫΤϦݴޠ• GraphQLͷAPIϦΫΤετΛ͢ΔͨΊͷݴޠ• σʔλऔಘܥ Query, σʔλΛ࡞ͨ͠Γߋ৽ Mutation, αʔόʔ͔ΒͷΠϕϯτΛड͚औΔ Subscription ͕͋Δ• GraphQL APIͷ༷Λهड़• ֤ϑΟʔϧυʹܕΛએݴ͕ඞཁ• Int, Float, String, Boolean, IDͳͲ͕࠷ॳ͔Βఆٛ͞Ε͍ͯͯࣗͰఆٛ͢Δ͜ͱՄೳεΩʔϚݴޠ
GitHubGraphQL APIhttps://developer.github.com/v4/explorer/ۙʹࢼͤΔ!!※ຊ൪ͷσʔλͳͷͰߋ৽ܥͳͲҙͯ͠͏ʂ
POST /graphql
ϦΫΤετ Ϩεϙϯε
͜͏͍͏ͷ͕΄͍͠!!ʹର͍ͯۙ͠ܗͰฦͯ͘͠ΕΔ
RubyͰGraphQL
graphql-ruby• GraphQLͷύʔαʔͱϥϯλΠϜͷRuby࣮• 201905݄29 v1.9.6 ͕࠷৽• 1.8·ͰಠࣗͷDSL͚ͩͬͨͲ1.8Ҏ߱ΫϥεϕʔεͰεΩʔϚఆٛͰ͖ΔΑ͏ʹͳͬͨ
RubyΒ͘͠GraphQLͷεΩʔϚΛఆٛ͢Δ͜ͱ͕Ͱ͖Δ
Anket + GraphQL
• Slack ্ͰΞϯέʔτΛͱΔͨΊͷαʔϏε• 2018/11ʹ βϦϦʔε• Ξϯέʔτͷ࡞ථ Slack ্͔Βߦ͏• WEB্ͰμογϡϘʔυΛݟΔ͜ͱ͕Ͱ͖ͯRails 5 Ͱ࡞͞Ε͍ͯΔ• Railsͱ͔k8sͱ͔ٕज़తཁૉΛࢼ͢ͱͯ͠ϓϥΠϕʔτͰ࡞
ಋೖͨ݁͠Ռ
GraphiQL͕ศར• GraphQL ʹରͯ͠ΫΤϦΛൃߦ͢ΔͨΊͷπʔϧ• GithubͷAPIίϯιʔϧͰ༻͞Ε͍ͯΔ• ΫΤϦͷൃߦ͚ͩͰͳ͘ΫΤϦิAPIϦϑΝϨϯε͕͑ΔͷͰIDEͱͯ͑͠Δ• graphql-rubyΛRailsͰ͏࣌install͢Δ࣌ʹҰॹʹೖΔ
ςετ
Complexity & Depth ͷ੍ݶ͕͔͚ΒΕΔ• Complexity• 1requestʹର͢ΔComplexityΛ੍ݶ• Depth• queryͷೖΕࢠͷ੍ݶ
Complexityfields͝ͱʹComplexityΛઃఆͰ͖ΔͷͰॏ͍ॲཧͷੜίετΛେ͖Ίʹઃఆ͢ΔͳͲͷઃఆ͕Մೳ
Depth
·ͱΊ• GraphQL, graphql-rubyͷΛ͠·ͨ͠• ୯ҰͷΤϯυϙΠϯτͳͷͰύϑΥʔϚϯεͷܭଌͳͲ͕ඞཁ• Anket ݱঢ়͖ʹ͔͠GraphQL API Λެ։ͯ͠·ͤΜ͕ɺࠓޙ֎͚ʹެ։༧ఆͰ͢ʂʂ• ެ։ͨ͠ΒͥͻͬͯΈ͍ͯͩ͘͞ʂʂ