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

RubyではじめるGraphQL

 RubyではじめるGraphQL

#ebisurb

hatappi

May 29, 2019
Tweet

More Decks by hatappi

Other Decks in Technology

Transcript

  1. RubyͰ࢝ΊΔ
    GraphQLೖ໳
    #23
    @hatappi

    View Slide

  2. Yusaku Hatanaka
    @hatappi
    Merpay Inc.
    Go, Ruby, etc…
    <>
    Roppongi.rb organizer
    RubyKaigi 2019

    View Slide

  3. ಥવͰ͕࣭͢໰Ͱ͢

    View Slide

  4. GET /users/1 ϦΫΤετ͠·ͨ͠
    Կ͕ฦ͖ͬͯ·͔͢ʁ

    View Slide

  5. ᶃ ᶄ ᶅ

    View Slide

  6. ᶃ ᶄ ᶅ

    View Slide

  7. ༗ޮͳJSONΛฦͤΔͳΒOK
    ͔͠͠ϦιʔεʹΑͬͯϑΥʔϚοτ͕ҟͳΔͱɻɻɻ
    Τϥʔ࣌ͷϨεϙϯεϑΥʔϚοτ๨Ε͕ͪ

    View Slide

  8. userͱfriendsΛऔಘ͍ͨ͠
    GET /users/1
    GET /users/1/friends

    View Slide

  9. ඞཁͳ৘ใΛऔಘ͢ΔͨΊʹ
    Կճ͔ϦΫΤετΛ͢Δ͜ͱ΋

    View Slide

  10. GraphQL͕
    ׆༂Ͱ͖Δ͔΋ʁʂ

    View Slide

  11. GraphQL
    • APIͷͨΊͷΫΤϦݴޠ
    • ΫΤϦݴޠͷ࢓༷ͱͯ͠ܕఆٛ͞Εͨε
    ΩʔϚΛఆٛͯ͠ΫΤϦΛ༻͍ͯ໰͍߹Θ
    ͤΛ͢Δ
    • FacebookʹΑͬͯ։ൃ͞Εͯ2015೥ʹOSSͱ
    ͯ͠ެ։͞Εͨ
    • https://graphql.org/

    View Slide

  12. ΫΤϦݴޠ
    • GraphQLͷAPI΁ϦΫΤετΛ͢ΔͨΊͷݴޠ
    • σʔλऔಘܥ͸ Query, σʔλΛ࡞੒ͨ͠Γߋ৽͸ Mutation, αʔόʔ͔ΒͷΠϕϯτ
    Λड͚औΔ Subscription ͕͋Δ
    • GraphQL APIͷ࢓༷Λهड़
    • ֤ϑΟʔϧυʹ͸ܕΛએݴ͕ඞཁ
    • Int, Float, String, Boolean, IDͳͲ͕࠷ॳ͔Βఆٛ͞Ε͍ͯͯࣗ෼Ͱఆٛ͢Δ͜
    ͱ΋Մೳ
    εΩʔϚݴޠ

    View Slide

  13. GitHub
    GraphQL API
    https://developer.github.com/v4/explorer/
    ਎ۙʹࢼͤΔ!!
    ※ຊ൪ͷσʔλͳͷͰߋ৽ܥͳͲ͸஫ҙͯ͠࢖͏ʂ

    View Slide

  14. POST /graphql

    View Slide

  15. ϦΫΤετ Ϩεϙϯε

    View Slide

  16. ϦΫΤετ Ϩεϙϯε

    View Slide

  17. ͜͏͍͏ͷ͕΄͍͠!!
    ʹର͍ͯۙ͠ܗͰฦͯ͘͠ΕΔ

    View Slide

  18. RubyͰGraphQL

    View Slide

  19. graphql-ruby
    • GraphQLͷύʔαʔͱϥϯλΠϜͷRuby࣮૷
    • 2019೥05݄29೔ v1.9.6 ͕࠷৽
    • 1.8·ͰಠࣗͷDSL͚ͩͬͨͲ1.8Ҏ߱͸Ϋ
    ϥεϕʔεͰεΩʔϚఆٛͰ͖ΔΑ͏ʹ
    ͳͬͨ

    View Slide

  20. RubyΒ͘͠GraphQLͷεΩʔϚΛ
    ఆٛ͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  21. Anket + GraphQL

    View Slide

  22. • Slack ্ͰΞϯέʔτΛͱΔͨΊͷαʔϏε
    • 2018/11ʹ βϦϦʔε
    • Ξϯέʔτͷ࡞੒΍౤ථ͸ Slack ্͔Βߦ͏
    • WEB্ͰμογϡϘʔυΛݟΔ͜ͱ͕Ͱ͖ͯ
    Rails 5 Ͱ࡞੒͞Ε͍ͯΔ
    • Railsͱ͔k8sͱ͔ٕज़తཁૉΛࢼ͢৔ͱͯ͠ϓϥΠ
    ϕʔτͰ࡞੒

    View Slide

  23. ಋೖͨ݁͠Ռ

    View Slide

  24. GraphiQL͕ศར
    • GraphQL ʹରͯ͠ΫΤϦΛൃߦ͢ΔͨΊͷπʔϧ
    • GithubͷAPIίϯιʔϧͰ΋࢖༻͞Ε͍ͯΔ
    • ΫΤϦͷൃߦ͚ͩͰͳ͘ΫΤϦิ׬΍APIϦϑΝϨϯε͕࢖͑ΔͷͰIDEͱͯ͠΋࢖͑Δ
    • graphql-rubyΛRailsͰ࢖͏࣌͸install͢Δ࣌ʹҰॹʹೖΔ

    View Slide

  25. ςετ

    View Slide

  26. Complexity & Depth ͷ੍ݶ͕͔͚ΒΕΔ
    • Complexity
    • 1requestʹର͢ΔComplexityΛ੍ݶ
    • Depth
    • queryͷೖΕࢠͷ੍ݶ

    View Slide

  27. Complexity
    fields͝ͱʹComplexityΛઃఆͰ͖ΔͷͰॏ
    ͍ॲཧͷੜ੒ίετΛେ͖Ίʹઃఆ͢Δͳ
    Ͳͷઃఆ͕Մೳ

    View Slide

  28. Depth

    View Slide

  29. ·ͱΊ
    • GraphQL, graphql-rubyͷ࿩Λ͠·ͨ͠
    • ୯ҰͷΤϯυϙΠϯτͳͷͰύϑΥʔϚϯεͷܭଌͳͲ͸޻෉͕ඞཁ
    • Anket ͸ݱঢ়಺޲͖ʹ͔͠GraphQL API Λެ։ͯ͠·ͤΜ͕ɺࠓޙ֎޲
    ͚ʹ΋ެ։༧ఆͰ͢ʂʂ
    • ެ։ͨ͠Βͥͻ࢖ͬͯΈ͍ͯͩ͘͞ʂʂ

    View Slide