Save 37% off PRO during our Black Friday Sale! »

Goによるスキーマ駆動開発

 Goによるスキーマ駆動開発

5a2478d5008e1c64bca72c650178341e?s=128

atsushi-ishibashi

June 26, 2020
Tweet

Transcript

  1. GoʹΑΔεΩʔϚۦಈ։ൃʢԾʣ Finatext x ΤϒϦʔ ελʔτΞοϓ࠷લઢͷGoࣄྫ

  2. ࣗݾ঺հ - ੴڮ ३ࢤ • αʔόαΠυɺΠϯϑϥΛ୲౰ • ݩʑ͸iOS΍ͬͯͨ • εϚʔτϓϥεͷূ݊γεςϜΛ։ൃɺͦͷଞॾʑ

    • terraform-provider-awsʹ͸ͦͦ͜͜ߩݙ • झຯ͸α΢φ
  3. εΩʔϚۦಈ։ൃͱ͍͑͹ • OpenAPIɺgRPCɺGraphQLͷ3ͭͰΑ͘ޠΒ ΕΔ • ࠓճ͸GraphQLͷ࿩͸ؚ·Ε·ͤΜ • gRPC͸ͪΐͬͱ͚ͩ • OpenAPIΛϝΠϯͰ࿩͠·͢

  4. BaaSͰͷΤϯυϙΠϯτߏ੒ਤ ALB HTTP + JSON NLB gRPC ೝՄαʔϏε ஫จܥ Ձ֨ܥ

    ޱ࠲ܥ ػೳϨΠϠʔͱ͍͏ΑΓ͔͸ υϝΠϯͰ෼͚ͯΔ
  5. gRPC͸ʁ • ಺෦తͳೝՄαʔϏεͰར༻͍ͯ͠Δ • ͜ͷೝՄ͸ϏδωεϩδοΫدΓͷ΋ͷ • ଟ਺ͷαʔό͕ΫϥΠΞϯτͱͯ͠ར༻͢Δ • ΫϥΠΞϯτίʔυੜ੒Ͱ͖Δͷخ͍͠ •

    ϦΫΤετ͝ͱʹೝՄαʔϏεʹ໰͍߹ΘͤΔͷͰߴύϑΥʔϚϯε͸خ͠ ͍ خ͍͜͠ͱ ΊΜͲ͍͘͜͞ͱ • ΞΫηεϩάͷूܭϝτϦΫεͳͲʹϚωʔδυɾαʔϏε࢖͑ͳ͍ • HTTP-JSONͷ৔߹͸ALB-TargetGroupͷ૊Έ߹ΘͤͰHTTP StatusCode ͳͲΛCloudWatchMetricsͰूܭͯ͠Δ • gRPCͩͱinterceptorೖΕͯΞϓϦέʔγϣϯϩάʹग़ͯ͠ؤுͬͨΓɺ Prometheus࢖ͬͨΓʁ • ·ͩ֎ʹग़ͤΔAPIυΩϡϝϯτ͸ੜ੒Ͱ͖ͳ͍ͱࢥ͏
  6. OpenAPIͷ۩ମతͳར༻ํ๏ • ن֨Խ͞ΕͨAPIυΩϡϝϯτ͕࡞ΕΔ • mock΋ੜ੒Ͱ͖ͯϑϩϯτ͕ಉ࣌ਐߦͰ։ൃ ਐΊΕΔ • ίʔυ΋ੜ੒Մೳ

  7. ΤσΟλ Swagger Editor Stoplight Studio • ެࣜ • GUIΤσΟλ •

    ෳ਺ϑΝΠϧฤूՄೳ • previewΆ͍(form)ͷ͔Β௚઀ฤूͰ ͖Δ
  8. APIυΩϡϝϯτੜ੒ Dockerfile ίϯςφ্ཱͪ͛

  9. • ϩʔΧϧͰ΋ཱͯΕΔ͕ɺෳ਺ΤϯυϙΠϯτΛ ݟΔͷ΋େมͳͷͰɺϒϥ΢βͰURL෼͚ͯϗε ςΟϯά͞ΕͯΔͱศརͦ͏ • APIαʔόͱಉ͡gitϨϙδτϦʹswagger-ui༻ͷ DockerfileΛ࣋ͭ • ECSͰϗεςΟϯά •

    AWS CodePipelineͰ։ൃ؀ڥʹϦϦʔε ։ൃ؀ڥʹϦϦʔε
  10. Mockίϯςφͷੜ੒ apisproutͷDockerfile Mock͔ΒͷϨεϙϯε

  11. • ϩʔΧϧͰ΋ཱͯΕΔ͕ʢҎԼུ • APIαʔόͱಉ͡gitϨϙδτϦʹmock༻ ͷDockerfileΛ࣋ͭ • ECSͰϗεςΟϯά • AWS CodePipelineͰ։ൃ؀ڥʹϦϦʔε

    UIͱಉ͘͡։ൃ؀ڥʹϦϦʔε
  12. ίʔυੜ੒ • router͸gorillaͰੜ੒͞ΕΔ • FinatextͰ͸echoΛ࢖ͬͯΔͨΊ modelͷΈநग़

  13. ਖ਼௚͋Μ·Γخ͘͠ͳ͍… • APIͷϦΫΤετʹόϦσʔγϣϯ͍ͨ͠ • ΋ͪΖΜopenapiύοέʔδʹ͸ॻ͚ͳ͍ • ؔ਺࡞ͬͯҾ਺ʁ • ໊લۭؒʹؾΛ͚ͭΔඞཁ͋Γ •

    ผͷstructʹຒΊࠐΉʁ • ྑ͍͚ͲΊΜͲ͍͘͞
  14. ଥڠతίʔυੜ੒ • Swagger UI͔ΒJSONΛCtrl+C • ChimeraCoder/gojsonͰJSON͔ΒgoͷstructΛੜ੒ • ͦΕΛ͋ͬͯ΄͍͠goϑΝΠϧʹషΔʂ

  15. ͦ΋ͦ΋εΩʔϚۦಈͷϞνϕͬͯʁ αʔόˠϑϩϯτͱ͍͏։ൃͷྲྀΕ ↓ ը໘͕ग़དྷ্͕ͬͯ͘ΔͱશํҐ͔ΒϑΟʔυόοΫ͕དྷΔ ↓ ϑϩϯτ͕UI௚͍ͯ͠Δ͏ͪʹαʔό΋৭ʑվम͢Δʢ৔߹ʹΑͬͯ͸ APIมߋ΋… ↓ ϑϩϯτ௥ਵ͢Δ͕ɺUIζϨΔ… ͱϑϩϯτʹγϫدͤߦ͖͕ͪ

    ͳͷͰϑϩϯτͱαʔό͕ಉ࣌ฒߦͰਐΊΕΔΑ͏ʹͱΓ͋͑ͣҰ୴API ࢓༷ΛܾΊΔ͔͠ͳ͍ ͍ͭͰʹن֨Խ͞ΕͨAPIυΩϡϝϯτͱMock͕Ͱ͖Δͷศར
  16. εΩʔϚΛܾΊͨ͘ͳ͍ཧ༝ Userͱ͍͏ߏ଄ମ͕͋Δͱ͢Δɻ ͦΕʹName΍Ageͱ͍ͬͨଐੑΛ௥Ճ͍ͯ͘͠ɻ ຊ౰͸Ͳ͕ͬͪઌʹ͋Δʁʁ

  17. ଐੑ͕ઌͩͱࢥ͏ ଐੑΛ੕ʹྫ͑Δͱɺߏ଄ମʢεΩʔϚʣ͸੕࠲ ։ൃதʹ֤ؔ܎ऀ͕੕ΛͲΜͲΜݟ͚ͭͯ͘Δ ͦͷࡍʹ੕࠲ΛΧνοͱܾΊ͗͢Δͱ৽͘͠੕͕ݟ͔ͭͬͨͱ͖ʹۙ๣ͷ ੕࠲ʹ૊ΈࠐΜͰ͠·͏

  18. εΩʔϚʢԾʣۦಈ։ൃͷεεϝ • ͱΓ͋͑ͣલʹਐΉͨΊʹAPIεΩʔϚʢԾʣ Λ࡞Δ • ৽ن։ൃ࣌͸ޓ׵ੑ͸๨ΕͯΨϯΨϯഁյత มߋ͢΂͠ • ͍ͭͰʹAPIυΩϡϝϯτͱMockͰ͖Δͱศ རͩΑͶ

  19. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠