MIDAS TECH STUDY #2
GraphQL Λ׆༻ͨ͠εΩʔϚۦಈ։ൃͷ࣮ફ@qsona2021-09-08 MIDAS TECH STUDY #2
View Slide
whoami• @qsona• Web Engineer at Quipper Ltd• Microservices / Rails / Node.js / GraphQL
ࠓճͷςʔϚ:ϑϩϯτΤϯυ։ൃޮԽ
։ൃʹ͓͚ΔʮޮԽʯͱ?
Ϧιʔεޮͱϑϩʔޮ• ΞδϟΠϧ։ൃͷจ຺ͰΑ͘ొ͢Δ֓೦• ʮޮʯ(Efficiency) Λೋͭͷଆ໘͔Βఆ͍ٛͯ͠Δ
ϦιʔεޮγεςϜ։ൃͷจ຺ʹ͓͍ͯɺେࡶʹ͍͏ͱ:• ਓతϦιʔεͷྔ (ਓɾ) ʹରͯ͠ɺੜΈग़ͤΔػೳͷྔ• Ϧιʔεޮ͕ѱ͍ྫ• ϑϩϯτΤϯυͷ։ൃ͕։࢝Ͱ͖Δͷɺ όοΫΤϯυͷ։ൃ͕ऴΘ͔ͬͯΒ => όοΫΤϯυͷ։ൃྃ·ͰɺϑϩϯτΤϯδχΞ͕Ջ͍ͯ͠Δ
ϑϩʔޮγεςϜ։ൃͷจ຺ʹ͓͍ͯɺେࡶʹ͍͏ͱ:• Ϣʔβʔʹػೳ͕ϦϦʔε͞ΕΔ·Ͱͷɺ࣌ؒͷ͞• ϦϦʔε͞Εͳ͍ͱՁʹͳΒͳ͍ɻ ՁʹͳΔ·Ͱͷ͕͍ͪ࣌ؒͱޮ͕ѱ͍ɺͱ͍͏ߟ͑ํ• ϑϩʔޮ͕ѱ͍ྫ• ػೳͷ͏ͪόοΫΤϯυͷ։ൃ͕ͨ͠ɺϑϩϯτΤϯυͷ։ൃ͕·ͩɻ όοΫΤϯυࢹͰϦϦʔεͪͷঢ়ଶ͕͘ଓ͍͍ͯΔ
εΩʔϚۦಈ։ൃͱ։ൃޮ
લఏɾԾఆ• ࠷ۙͷΞϓϦέʔγϣϯ։ൃ͍͠ શһ͕ͯ͢ͷྖҬΛ͜ͳ͢ͷࠔ• େ͖͘ϑϩϯτΤϯυɾόοΫΤϯυͰ εΩϧηοτ͕͔ΕΔʹ͋Δ• ࠓճ όοΫΤϯυνʔϜ ͱ ϑϩϯτΤϯυνʔϜ ͕ଘࡏ͢Δঢ়گΛԾఆ͢Δ
ґଘ͕ؔ͋Δ• ґଘؔ ϑϩϯτΤϯυ => όοΫΤϯυ• όοΫΤϯυ͕ఏڙ͢Δ API Λ ϑϩϯτΤϯυ͕ར༻͢Δ• ૉʹߟ͑ΔͱɺόοΫΤϯυ => ϑϩϯτΤϯυͷॱͰ։ൃ͢Δ͜ͱʹͳΔ => ޮ͕ѱ͍ (࣍ϖʔδ͔Βઆ໌)
(1) ϑϩʔޮ͕ѱ͍• όοΫΤϯυͰ࣮͞Εͨػೳ͕ɺσϓϩΠ͞ΕΔ·Ͱʹ ͕ͪ࣌ؒͰ͖Δ
(2) Ϧιʔεޮ͕ѱ͍• ϑϩϯτΤϯδχΞ͕࣮ͪͷؒɺՋʹͳͬͯ͠·͏
(2) Ϧιʔεޮ͕ѱ͍• ෳͷػೳΛॱʹճ͢͜ͱͰվળՄೳ• ͕ɺݱ࣮ʹ͜Μͳʹ៉ྷʹ͍͔ͳ͍• όοΫΤϯυͷ࣮͕গ͠ͰΕΔͱɺϑϩϯτΤϯυͷՋ͕ൃੜͯ͠͠·͏
ͦ͜ͰεΩʔϚۦಈ։ൃ
εΩʔϚۦಈ։ൃ• ͡Ίʹ API ͷεΩʔϚΛఆΊɺ ϑϩϯτΤϯυ - όοΫΤϯυ ؒͰ߹ҙ͢Δ• ϑϩϯτΤϯυɺόοΫΤϯυͷ API ͷ࣮Λͨͣʹ API εΩʔϚΛར༻࣮ͯ͠։࢝͢Δ• ΫϥΠΞϯτ্Ͱͷ੩తܕɺϞοΫαʔόʔͳͲ͕ಘΒΕɺ ͋Δఔෆ߹ͳ͘։ൃͰ͖Δ
εΩʔϚۦಈ։ൃͱ։ൃޮ• (1) ϑϩʔޮͷد༩• (2) Ϧιʔεޮͷد༩
(1) ϑϩʔޮͷد༩• όοΫΤϯυͱϑϩϯτΤϯυ͕ฒྻͰ։ൃͰ͖ΔͷͰɺ ϑϩϯτΤϯυͷͪ࣌ؒΛͳͤ͘Δ
(2) Ϧιʔεޮͷد༩• όοΫΤϯυͱϑϩϯτΤϯυͷ։ൃͷґଘؔΛͳͤ͘ΔͷͰɺ ͦΕͧΕͷ։ൃͷॱং͕ࣗ༝ʹͳΔ• ݁Ռͱͯ͠ɺϦιʔεޮΛ͍ٻΊΔ͜ͱ͕ՄೳʹͳΔ
ελσΟαϓϦʹ͓͚ΔGraphQLɾεΩʔϚۦಈ։ൃͷ࣮ફࣄྫ
৽ن։ൃϓϩδΣΫτʹ͍ͭͯ• ։ൃ͢Δͷ• iOS / Android / PC Web Apps• Backend APIs• ίϯςϯπΛཧ͢ΔγεςϜ• ։ൃظؒ: > 1• ։ൃऀͷਓ: > 10ਓ
৽ن։ൃʹ GraphQL Λશ໘࠾༻• client => gateway => backends શମͰ GraphQL Λ࠾༻• gateway schema stitching Λར༻͍ͯ͠Δ• ͦͷଞར༻ٕज़• Ruby on Rails• Node.js + TypeScript + Apollo Server +Prisma 2• React, Apollo Client
εΩʔϚۦಈ։ൃͷԸܙ• ίϛϡχέʔγϣϯͷϩε͕গͳ͘ɺ ҆ఆͯ͠։ൃΛਐΊΒΕͨ• ϦιʔεޮΛٻΊɺ backend / frontend ͦΕͧΕ ~9ϲ݄ؒ ಠཱͯ͠։ൃͨ͠• ܨ͗͜ΈεϜʔζ• 1िؒͰશ෦ܨ͗͜Έྃͨ͠
εΩʔϚۦಈ։ൃʹGraphQL Λར༻͢ΔϝϦοτ• εΩʔϚͱ࣮͕ဃ͍͢͠ͱɺܨ͗͜Έ࣌ʹൃ֮͢Δ͕૿͑ɺ͕͔͔࣌ؒΔ (=ޮ͕Լ͕Δ)• GraphQL Λར༻͢ΔͱɺαʔόʔɾΫϥΠΞϯτํͰ εΩʔϚͱ࣮ͷဃ͕ى͖ʹ͍͘• αʔόʔ: εΩʔϚΛຬͨ͞ͳ͍ϨεϙϯεΛฦͦ͏ͱ͢ΔͱΤϥʔʹͳΔ• ΫϥΠΞϯτ: ੩తܕΛࣗಈੜ͠ɺར༻Ͱ͖Δ
ฐνʔϜʹ͓͚ΔGraphQL εΩʔϚۦಈ։ൃͷϑϩʔ• εΩʔϚ࠷ऴతʹ GraphQL Gateway ʹఆٛ͞ΕΔɻ ͜Ε֤ Backend Service ʹఆٛ͞Εͨͷ͕ू͞Ε͍ͯΔ• ϑϩϯτΤϯυओಋͰεΩʔϚΛॻ͘ͱ͖ Ұ୴ GraphQL Gateway αʔϏεʹॻ͘• ϞοΫαʔόʔͱͯ͠ఏڙͰ͖Δ• ࣮࣌ʹɺεΩʔϚఆٛΛ֤όοΫΤϯυαʔϏεʹҠಈ͢Δ• ※ ͜ͷ෦Ͱͪΐͬͱͨ͠Έ͋Γ (ӈͷπΠʔτ)
Q. ୭͕εΩʔϚΛॻ͖͔͘?• A. ͦͷػೳͷಛੑʹΑΔ• ࠷ऴతʹ߹ҙͰ͖ΕΑ͍ɻ୭͕ॻ͍ͯΑ͍• ϑϩϯτΤϯυΤϯδχΞϓϩμΫτϚωʔδϟʔ͕εΩʔϚΛॻ͚Δͱɺ ϑϩʔޮԽʹͭͳ͕Δ• ։ൃͷग़ൃͰ͋Δʮཁٻʯʹ͍ۙ• όοΫΤϯυ࣮͕͍͠ػೳɺόοΫΤϯυΤϯδχΞ͕ఆٛͨ͠΄͏͕ྑ͍• ࣮Ͱ͖ͳ͍εΩʔϚʹҙຯ͕ͳ͍ͨΊ
Q. ୭͕εΩʔϚΛॻ͖͔͘?• εΩʔϚઃܭʹίπ͕͋Γɺ୭͕ॻ͘ʹͯ͠ମಘ͢Δඞཁ͕͋Δ• ը໘༷ͱDBઃܭͷؒʹ͋ΔʮϦιʔεʯΛ͏·͘ଊ͑Δ• GraphQL ͷ߹ͦΕΛ GraphQL Type ͱͯ͠දݱ͢Δ• ͭ·ΓɺϑϩϯτΤϯυΤϯδχΞͰ͋ΕDBઃܭΛΠϝʔδ͠ɺ όοΫΤϯυΤϯδχΞͰ͋Εը໘࣮ΛΠϝʔδͰ͖Δͱ͏·͍͖͍͘͢
·ͱΊ• εΩʔϚۦಈ։ൃΛ࣮ફ͢Δ͜ͱͰɺ Ϧιʔεޮ·ͨϑϩʔޮΛߴΊΔ͜ͱ͕Ͱ͖Δ• GraphQL Λར༻͢Δͱɺͭͳ͗͜Έͷਫ਼ඇৗʹߴ͍• εΩʔϚ୭͕ॻ͍ͯΑ͍ɻ ରػೳͷಛੑɺνʔϜͷঢ়گͳͲʹΑͬͯม͑ΔͱΑ͍
We're hiring!• GraphQL, Microservices ͪΖΜ ϑϩϯτΤϯυ͔ΒόοΫΤϯυ·Ͱ ͍ٕज़ʹ৮ΕΒΕΔػձ͋Γ• ·ͣΧδϡΞϧ໘ஊ͔Βɺͥͻ͝Ԡื͍ͩ͘͞ 😁