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

じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl

mackee
March 05, 2022

じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl

YAPC::Japan::Online 2022 Track B

mackee

March 05, 2022
Tweet

More Decks by mackee

Other Decks in Programming

Transcript

  1. ͡Θ͡ΘͱPerl͔ΒGoʹ Ҡߦ͠Α͏ͱ͍ͯ͠Δ ԶͨͪͷϚΠΫϩαʔϏγʔζ YAPC::Japan::Online 2022 2022-03-05 Track B 13:40ʙ14:20 @macopy

    a.k.a @mackee_w
  2. ͜ͷηογϣϯͷུ֓

  3. 1FSMೖֶࣜ͘ΜIUUQTQFSMFOUSBODFDPOOQBTTDPN 3FOÉF'SFODIIUUQTSFOFFGSFODICMPHTQPUDPN

  4. (·ͩ)શ෦͸ஔ͖׵͍͑ͯͳ͍

  5. None
  6. Tonamelͷن໛ײ         -PCJ5PVSOBNFOU

    ޙͷ5POBNFM  ։ൃ։࢝ 5POBNFMʹ໊લ͕มߋ 1FSMͷߦ਺ߦ ͭͳ͗͜ΈͰएׯ૿Ճ 1FSMͷߦ਺ߦ (P੡ϚΠΫϩαʔϏεº (Pͷߦ਺ߦ ͏ͪίʔυੜ੒ߦ
  7. ͜Ε·Ͱ2೥΄Ͳ͔͚ͯ ͡Θ͡ΘҠߦͭͭ͋͠Δ

  8. ͦͷؒʹ΋ػೳ͕૿͑

  9. େձ΋૿͍͑ͯ͘

  10. ͜ͷηογϣϯͰ͸ ٞ࿦ͷҰൠԽΛ͋͑ͯͤͣ TonamelͰͷࣄྫΛ࿩͠·͢

  11. ୈ1ষ: ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ ୈ2ষ: ॳΊͯͷαʔϏε෼ׂ ୈ3ষ: ϚΠΫϩαʔϏεͨͪͷ࿈ܞํ๏

  12. @macopy • ໘ന๏ਓΧϠοΫ eεϙʔπࣄۀ෦ TonamelαʔόαΠυςοΫϦʔυ • Perlେ޷͖ Go΋޷͖ • GGST࢖༻Ωϟϥ:

    ϥϜϨβϧ • ISUCON11 ༏উ ←NEW!
  13. ୈ1ষ ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ

  14. Ҡߦલͷߏ੒(ʙ2020-07) ͜ͷ௚ޙʹϚΠΫϩαʔϏεԽʹ߹ΘͤͯECSԽ

  15. ՝୊: PerlͰڊେGraphQLΛ ͞͹͘ͷ͸ՙ͕ॏ͍ • TonamelͰ͸ओͳAPIܗࣜͱͯ͠GraphQLΛ ࠾༻͍ͯ͠Δ • ڊେͳϨεϙϯεΛฦ͢ͱ͖ɺGraphQL.pm 0.47(2021-02ϦϦʔε)ҎલͰ͸ܕνΣοΫ ͕ϨεϙϯελΠϜͷ΄ͱΜͲΛ઎Ί͍ͯͨ

    • GraphQLΛ࢖͍ଓ͚Δʹ͸ɺ͜ͷ͋ͨΓʹԿ Β͔ͷվળҊ͕ඞཁͩͬͨ
  16. ݱࡏͷGraphQL.pm(>=0.47)͸σϑΥϧτͰ ࣮ߦ࣌ܕνΣοΫ͕Φϑʹͳ͍ͬͯΔ ౰࣌໰୊ʹͳ͍ͬͯͨGraphQL QueryͷϕϯνϚʔΫΛ΍ͬͯΈͨ(256ਓγϯάϧΤϦϛωʔγϣϯͷΫΤϦ) $ carton exec perl -Ilib tmp/graphql_benchmark.pl

    bench 47bIg Benchmark: timing 10 iterations of default... default: 4 wallclock secs ( 3.22 usr + 0.08 sys = 3.30 CPU) @ 3.03/s (n=10) Rate default default 3.03/s — `local $ENV{PERL_STRICT} = 1;` ΛίʔυʹೖΕͯܕνΣοΫΛ༗ޮʹͯ͠ΈΔ(౰࣌͸͜ͷঢ়ଶͩͬͨ) $ carton exec perl -Ilib tmp/graphql_benchmark.pl bench 47bIg Benchmark: timing 10 iterations of default… default: 7 wallclock secs ( 6.57 usr + 0.07 sys = 6.64 CPU) @ 1.51/s (n=10) Rate default default 1.51/s --
  17. ͍͔ͭ͘ͷબ୒ࢶ • GraphQLΛ࠾༻͢Δ৔߹ • Perl ͷ··Ͱ GraphQL Λߴ଎Խ͢Δ • GraphQLΛίετ௿ΊʹฦͤΔϥΠϒϥϦ͕͋Δݴޠʹ৐Γ׵͑Δ

    • ͦΕҎ֎Λ࠾༻͢Δ৔߹ • PerlͰѻ͑ΔൣғͷAPIతͳ΋ͷʹ͢Δ • XslateͰMPAʹ໭Δ
  18. GraphQLҎ֎ͷ՝୊: εέʔϦϯάੑ • ೾͕͋ΔτϥϑΟοΫ΁ͷରԠ • όοΫΤϯυDB͕Aurora MySQLͳͷͰɺखಈͰεέʔϧΞοϓ/Πϯ ͯ͠ෛՙʹରԠ͍ͯͨ͠ • =>

    ӡ༻ͷख͕ؒ͠ΜͲ͍ͷͰɺࣗಈͰਫฏεέʔϧ͢Δσʔλε τΞʹҠߦ͍ͨ͠Ϟνϕʔγϣϯ • ྫ͑͹DynamoDBͱͳΔ͕ɺPerlͰDynamoDBΛѻ͏ϊ΢ϋ΢͕ͳ͍
  19. Πϕϯτʹ࢖ΘΕΔαʔϏεͳͷͰ τϥϑΟοΫͷ೾͕େ͖͍

  20. GraphQLҎ֎ͷ՝୊: ੩తܕ͕ͳ͍ݴޠ͕ਏ͍ • τʔφϝϯτදͷߏங͸ൺֱతෳࡶͳϓϩάϥϛϯάΛཁٻ͞ΕΔํ • εΠευϩʔͷOMW%, μϒϧΤϦϛͷഊऀαΠυͷ഑ஔͳͲ • ෳࡶͳϩδοΫΛ૊Ήͷʹܕ͕͋Δͱ”҆৺”͢Δ •

    ΋ͪΖΜςετ΋ඞཁ
  21. ͱ͍͏Θ͚ͰGo͕࢖͍͍ͨ • GraphQL => gqlgenͱ͍͏εΩʔϚϑΝʔετͰ੩తܕνΣοΫΛ ߦ͏ϥΠϒϥϦ • ਫฏεέʔϦϯάՄೳͳDBΛ࢖͍͍ͨ => Go͸ެࣜAWS

    SDK͕͋ ΓɺDynamoDBΛѻ͏ͨΊͷϥούʔϥΠϒϥϦ΋͋Δ • ੩తܕ͕ͪΐ͏Ͳ͍͍ײ͡ʹଘࡏ͢Δ • ͳʹΑΓνʔϜϝϯόʔ͕աڈʹ࢖ͬͨ͜ͱ͕͋ΔݴޠͰ͋Δ
  22. Ͳ͏GoΛ૊ΈࠐΉ͔ʁ • શ෦Goʹ͢Δͱʁ • ࠓ·Ͱೖ͍ͬͯΔDBʹೖ͍ͬͯΔσʔλΛͲ͏͢Δͷ͔ • શ෦GoͰ࣮૷͠ऴΘΔ·Ͱ৽ن։ൃΛࢭΊΔͷ͔ • => ݁ߏ೉͍͠

    • Ұ෦͚ͩGoʹ͍ͨ͠ • ͕ͩDBΛڞ༗͸ͨ͘͠ͳ͍ DynamoDBʹ͍ͨ͠
  23. ϚΠΫϩαʔϏε΁෼ׂ͢Δ

  24. ҰൠతͳϚΠΫϩαʔϏεͷޮೳ • ݸʑͷΞϓϦέʔγϣϯͷ੹຿Λখ͘͞อͯΔ • ΞδϦςΟ͕ߴ͘ͳΔ • ΞϓϦέʔγϣϯ͝ͱʹద੾ͳΞʔΩςΫνϟΛબ΂Δ • ؔ৺͝ͱʹνʔϜΛ෼ׂ͢Δ͜ͱ͕༰қʹͳΔ •

    etc…
  25. ϚΠΫϩαʔϏεΛ΍Γ͔ͨͬͨͱ͍͏ΑΓ ͦΕҎ֎ͷྑ͍બ୒ࢶ͕ͳ͔ͬͨͷͰ΍ͬͨ • ϚΠΫϩαʔϏεΛબ୒͢Δͷʹ્֐͢Δཁૉ • νʔϜ΋෼ׂ͢Δ΄Ͳن໛͕େ͖͘ͳ͍ • ͚Ͳɺݱঢ়ͷΞʔΩςΫνϟͰ͸ղܾͰ͖ͳ͍՝୊͕͋Δ • ࠷ऴతʹ͸ϞδϡϥϞϊϦεʹ߹ମ͢ΔՄೳੑ΋͋Δͱ͸ࢥ͍ͬͯΔ

  26. ͦ΋ͦ΋ϞδϡϥϞϊϦεͩͬͨͷͰ ෼ׂ͠΍͔ͬͨ͢ • ઌਓ͕TonamelΛϞδϡϥϞ ϊϦεͰ࡞ͬͯ͘Ε͍ͯͨ • ෼ׂ͢ΔͨΊͷػೳͷڥք͕ ͢Ͱʹଘࡏ͍ͯͨ͠

  27. Ͱ͸Ͳ͏΍͍͔ͬͯ͘

  28. ୈ2ষ ॳΊͯͷαʔϏε෼ׂ

  29. ॳखɺԿΛ੾Γग़͔͢

  30. ͸͡Ίʹ੾Γग़͢ͱྑ͍ͱ͞ΕΔαʔϏεͷ৚݅ • ͋Δఔ౓αʔϏε͕ʮڥք͚ͮΒΕͨίϯςΩετʯʹͦͬͯ෼ղ͞ Ε͍ͯΔલఏͰҎԼ • ଞͷίϯςΩετ͔Βͷґଘ͕গͳ͍ => ෼ղ͠΍͍͢ • ϩʔϧόοΫ͕͠΍͍͢

    => ࡉ͔͘ϦϦʔεͰ͖Δ • ෼ղʹΑΔརӹ͕େ͖͍
  31. ༏ઌॱҐ෇͚৅ݶ ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯΛࢀߟʹ

  32. ͳͥτʔφϝϯτද͔ • GraphQLͷϨεϙϯελΠϜΛվળ͔ͨͬͨ͠ͷ͸τʔφϝϯτද • => ෼ղʹΑΔརӹ͕͋Δ • τʔφϝϯτදʹ͍ͭͯ৽ػೳ(μϒϧΤϦϛωʔγϣϯ)ͷ࣮૷͕༧ఆ͞Ε͍ͯͨ • =>

    ৽ػೳΛ΍ΔҰ؀ͱͯ͠ϚΠΫϩαʔϏεͷ෼ղ͕ߦ͑Δ • τʔφϝϯτද͸΄͔ͷαʔϏεʹґଘ͢ΔαʔϏεͳͷͰɺґଘ͞ΕΔଆͰ͸ ͳ͍ • => ෼ղͷ͠΍͢͞
  33. ΍্ͬͨͰ͜ͷ൑அͷৼΓฦΓ • ৽ػೳͷҰ؀ͱͯ͠෼ղΛߦ͏ͷ͸͋·ΓಘࡦͰ͸ͳ͍ • ϩʔϧόοΫ͕ͮ͠Β͘ͳΔ • ։ൃνʔϜ֎͔Βͷਐḿͷݟͨ໨͕ѱ͍ • ໌ࣔతʹػೳͷϚΠΫϩαʔϏε΁ͷ࠶࣮૷Λ΍͍ͬͯΔͱ͍͏ ͷΛݴͬͨ΄͏͕ྑ͍

    • ϦϦʔε͕ϏοάόϯʹͳΓ͕ͪ(͋Δఔ౓؇࿨ࡦ͸͋Δ)
  34. طଘͷϦΫΤετͱ ৽τʔφϝϯτදϦΫΤετͷ ෼͚ํ

  35. GraphQLΤϯυϙΠϯτΛ෼͚Δ

  36. Ϣʔβʔ৘ใ͸ϔομʹJWTͰຒΊࠐΉ • ϞϊϦεͰड͚ͨϦΫΤετͷCookie͔ΒϦΫΤετϢʔβʔͷ ηογϣϯ৘ใΛऔΓग़͢ • ͜͜·Ͱ͸ैདྷ·Ͱ͋Δಈ࡞ • `X-Awesome-Authentication: <JWT>` ͷΑ͏ͳHTTPϔομʹJWTϊ

    ܗͰೖΕΔ • ϓϩΩγͰBodyΛ͍ͬͨ͡ΓಡΜͩΓ͸ͨ͘͠ͳ͍
  37. ͞ΒʹύεΛ෼͚ͯ Ϣʔβ×େձͷݖݶ৘ใ΋෇༩

  38. GraphQLͷύεΛେձ͝ͱʹ෼͚Δ ྫ: େձID=XXXXX ͷ৔߹ POST /new_awesome/graphql/XXXXX ͜ΕͰBodyΛಡ·ͳͯ͘΋ τʔφϝϯτදαʔϏε͕ΞΫηεϢʔβͷݖݶΛ஌ΕΔ

  39. ͿͬͪΌ͚Δͱ͜Ε͸͓͢͢ΊͰ͸ͳ͍ • GraphQL͸ΤϯυϙΠϯτ͕Ұݸʹ·ͱ·Δͷ͕͍͍ͱ͜ΖͷҰͭ • ΫϥΠΞϯταΠυ΋ෳ਺ݸʹ෼͔ΕΔͷ͸ରԠ͍ͯ͠ͳ͍͜ͱ͕ ଟ͍ • ΋ͬͱ΄͔ʹ΍Γํ͸͕͋ͬͨɺޙड़͢Δେ౷Ұʹ࣋ͪӽ͍ͯ͠Δ • ผղ:

    ύʔεޙʹผͷAPIʹେձ৘ใ+ݖݶ৘ใ໰͍߹Θͤ + େձ αʔϏεΛઌʹ࡞Δ
  40. Ͱ͸ͲͷΑ͏ʹ ຊ൪ʹೖΕΔ͔

  41. ͓खܰʹαΠυΧʔʹͨ͠

  42. αΠυΧʔʹ͢ΔϝϦοτɾσϝϦοτ • ϝϦοτ • Πϯϑϥ͕ෳࡶʹͳΒͳ͍, ௥Ճ͢Δखؒ΋͍҆ • εέʔϧΞ΢τ΋ϞϊϦεͱҰॹʹ͢Δ => ෛՙ͕ಡΊͳ͍ͱ͖ʹศར

    • σϝϦοτ • ECS Taskͷ10ίϯςφ੍ݶΛ௒͑Δ͜ͱ͸ग़དྷͳ͍ • αʔϏεͷधཁʹ߹ΘͤͯݸผʹεέʔϧΞ΢τ͕ग़དྷͳ͍
  43. ͯ͞ϦϦʔε… ͕ͩ💥Ϗοάόϯ💥Λආ͚͍ͨ

  44. ϕετϓϥΫςΟε: 💥Ϗοάόϯ💥Λආ͚Δ • ͜ͷ৔߹ͷϏοάόϯͱ͸ • ͍͖ͳΓ৽࣮૷ͨ͠ϚΠΫϩαʔϏεʹαʔϏεશମΛ੾Γସ͑Δ • ϏοάόϯͷσϝϦοτ • ੾Γ໭͕͠ࠔ೉ʹͳΔ

    • ϦϦʔε୯Ґ͕େ͖͘ͳΔ => ݁ՌతʹσϦόϦʔ͕஗͘ͳΔ
  45. τʔφϝϯτදαʔϏεͰߦͬͨ͜ͱ • Ұ෦ͷϢʔβʹݶఆػೳͱͯ͠࢖͑ΔΑ ͏ʹఏڙ • ϑΟʔυόοΫΛ΋Β͍΍͍͢Ϣʔ βʹݶఆͯ͠ఏڙͰ͖Δ • େ͖ͳେձΛආ͚ͯఏڙ͢Δ •

    چτʔφϝϯτදػೳ΋ฒߦͯ͠ఏڙ ͠ଓ͚Δ • ໰୊͕͋Ε͹ݹ͍ํΛ࢖ͬͯ΋Β͏
  46. β൛தʹߦͬͨ͜ͱ • ຊ൪ͰΤϥʔϩά͕ग़ͨΒ͙͢ʹ௚͢ • σʔλͿͬյΕܥ͸޾͍ʹ΋গͳ͔ͬͨ(͋Δʹ͸͕͋ͬͨ) • ن໛͕େ͖ΊͷେձͰ࢖ΘΕͯͨΒ؂ࢹ͍ͯ͠ΔϝτϦοΫΛݟΔ • DynamoDBΛॳΊͯ࢖͍ͬͯͨͷͰෛՙ܏޲͕Θ͔Βͳ͔ͬͨͷ΋ ͋Δ

    • ༷ʑ௚ͯ͠େৎ෉ͦ͏ͳͷͰਖ਼ࣜϦϦʔε΁
  47. ͍Ζ͍Ζ͕͋ͬͨ׬੒ͨ͠ʂ

  48. Ͱ΋͜Ε͚ͩͩͱͨͩͷ Polyglotߏ੒ͩΑͶ

  49. ୈ3ষ ϚΠΫϩαʔϏε ͨͪͷ࿈ܞํ๏

  50. τʔφϝϯτදαʔϏεҎ߱ͷ։ൃํ਑ • GoΛؚΊͨpolyglotͰ΍ΕΔ͜ͱ͕Θ͔ͬͨͷͰҎԼͷํ਑ʹ͢Δ • ৽ػೳ͸͢΂ͯϚΠΫϩαʔϏεଆʹ࣮૷͢Δ • طଘػೳͷվम͸PerlϞϊϦε΁ͷ࣮૷͕ۃ୺ʹૣ͍৔߹͸ͦͪΒ ʹ࣮૷͢Δɻͦ͏Ͱͳ͍৔߹͸ϚΠΫϩαʔϏεଆ΁

  51. ࣍͸ԿΛ੾Γग़͢ͷ͔

  52. ༏ઌॱҐ෇͚৅ݶ

  53. ༏ઌॱҐ෇͚৅ݶ(Update൛)

  54. εϙϯαʔػೳΛ࡞Δ͜ͱʹͳͬͨ

  55. εϙϯαʔػೳͱ͸ • େձϖʔδʹ޿ࠂΛࡌͤΒΕΔػೳ • ޿ࠂ࿮͸ओ࠵ஂମ͕ืूͯ͠ɺ޿ࠂ ओ͕ओ࠵ஂମʹ͓ۚΛ෷͏͜ͱͰࡌ ͤͯ΋Β͑Δ

  56. ઃܭํ਑ • εϙϯαʔαʔϏεͱܾࡁαʔϏεͷ2ͭʹ෼ׂ͢Δ • εϙϯαʔαʔϏεͷ੹຿ => େձʹඥͮ͘εϙϯαʔͷ؅ཧ • ਃ੥಺༰΍ঝೝϑϩʔɺऔΓԼ͛ͳͲΛ͔ͭ͞ͲΔ •

    εϙϯαʔ͕ԿΛ൐ͬͯਃ੥͞ΕΔ͔͸͋·Γؾʹ͠ͳ͍ • ܾࡁαʔϏε => StripeΛ༻͍ͨ͋Δਓ͔Β͋Δਓ΁ͷࢧ෷͍ͷ؅ཧ • Կͷࢧ෷͍͔͸ܾࡁαʔϏε͸͋·Γؾʹ͠ͳ͍
  57. εϙϯαʔػೳͷσʔλͷྲྀΕ

  58. ͜͏ݴ͏ਤΛ࠷ॳʹॻ͘ͷ͸ ͓͢͢Ίʂ

  59. Domain Event • ৽τʔφϝϯτදαʔϏε࣮૷Ҏલ͔Β͋ΔඇಉظδϣϒΛҕৡ͢ΔͨΊ ͷػߏͱͯ͠Domain Eventͱݴ͏֓೦Λ༻ҙͨ͠ • ࣮૷ৄࡉతʹ͸HTTPͰLambdaΛୟ͘ͱSQSʹΤϯΩϡʔ͞Εͯɺϝο ηʔδΛผͷLambda͕ىಈͯ͠ɺ֤ϚΠΫϩαʔϏεͷhandlerʹϝο ηʔδΛ഑৴͢Δ

    • ϝοηʔδ͸ʮ◦◦͕ىͬͨ͜ʂʯͱ͍͏ײ͡Ͱpublish͞Ε͍ͯΔ • ʮ˓˓Λͯ͘͠Εʯͱ͍͏ײ͡Ͱ͸ͳ͍
  60. େձ࡞੒࣌ͷϝοηʔδ഑৴ εϚʔτΤϯυϙΠϯτɾμϜύΠϓతͳࢥ૝

  61. εϙϯαʔػೳͷͦͷଞ • σʔλετΞ͸MySQL • τʔφϝϯτදαʔϏε΄ͲͷεέʔϧΞ΢τੑೳ͸͍Βͳ͍ • ৔਺౿ΜͰͯࣾ಺Ͱ΋ൺֱతѻ͑Δਓ͕ଟ͍MySQLΛ࢖͏ • ΞʔΩςΫνϟ͸Active Recordύλʔϯ

    • τʔφϝϯτදαʔϏε͸Clean Architecture
  62. ͜Ε΋ͳΜͱ͔ϦϦʔεʂ

  63. ·ͱΊͱࠓޙͷల๬

  64. ϚΠΫϩαʔϏε͸खஈͰ͋Γ໨తͰ͸ͳ͍ • TonamelʹͱͬͯϚΠΫϩαʔϏε͸ҎԼͷ՝୊Λղܾ͢Δखஈ • ݱࡏͷαʔϏεΛࢭΊͣʹஞ࣍৽ػೳΛ௥Ճ͢Δ • ϞϊϦεଆͷ࠾༻ٕज़Ͱग़དྷͳ͔ͬͨ͜ͱΛॊೈʹಋೖ͢Δ • ࣌ظ͕དྷΕ͹શ෦·ͨϞδϡϥϞϊϦε΁߹ମ͢Δͷ΋ݕ౼ •

    νʔϜ͕ෳ਺ʹͳΔ͙Β͍େ͖͘ͳΔ͔Ͳ͏͔ • ࡞Δ΋ͷ͕ਖ਼͍͔͠Θ͔ΒΜॳظ͸ϞϊϦεͷ΄͏͕଎͍Ͱ͢ • ϞϊϦε͔Β੾Γग़͢৔߹ɺਖ਼͘͠ಈ͘΋ͷ͕ͦ͜ʹ͋Δ͔Β࡞Δͷ͕ૣ͘ͳΔ
  65. ࠓޙͷల๬ • Apollo Federationͷಋೖ • PerlϞϊϦε, τʔφϝϯτද, εϙϯαʔ, ܾࡁͱ͢΂ͯGraphQL ͕෼͔Ε͍ͯΔͷΛ౷߹͢ΔͨΊͷιϦϡʔγϣϯ

    • ϞϊϦεʹ͋Δ͢΂ͯͷػೳΛϚΠΫϩαʔϏε΁෼ׂ • ݱࡏ΋Ҡ২࡞ۀதͷ΋ͷ͋Γ
  66. Any Questions?

  67. ࢀߟʹͨ͠΋ͷ • ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯSam Newman ஶ, ౡా ߒೋ ༁ • ͜ͷࢿྉΛ࡞Δࡍʹࢀরɻ΍͖ͬͯͨ͜ͱͷཧ࿦෇͚΍આ໌ʹ༻͍

    ͨɻ͜ͷຊͰΞϯνύλʔϯͱ͞Ε͍ͯΔ͜ͱ΋ɺTonamelͰ͸(ؾ ͔ͮͣʹ)ߦ͍ͬͯΔɻ
  68. ิҨ ಠཱσϓϩΠՄೳੑ

  69. ϚΠΫϩαʔϏεͰ͜Ε΍ͬͱ͍ͨ΄͏͕͍͍ ͧͬͯ΍ͭ • ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯͱ͍͏ຊʹॻ͔Ε͍ͯΔ ຊॻ͔ΒಘΒΕΔ΋ͷ͕͚ͭͩͩͱͨ͠Βɺ ͦΕ͸ʮϚΠΫϩαʔϏεʹಠཱσϓϩΠՄೳੑ ͷ֓೦Λ࣮֬ʹऔΓೖΕΑ͏ʯͱ͍͏͜ͱͩɻ

  70. ಠཱσϓϩΠՄೳੑ 🤔

  71. ಠཱσϓϩΠՄೳੑͱ͸ • ʮ͋ΔϚΠΫϩαʔϏεʹର͢ΔมߋΛɺଞͷαʔϏεʹӨڹΛ༩͑ Δ͜ͱͳ͘ຊ൪؀ڥͰϓϩΠͰ͖Δͱݴ͏ߟ͑ํͩɻʯ • by ʮϞϊϦε͔ΒϚΠΫϩαʔϏε΁ʯ • αʔϏεAΛมߋͨ͠ͱ͖ʹɺҰॹʹαʔϏεB΋มߋ͠ͳ͍ͱ͍͚ ͳ͍ʂͱ͍͏ͷ͸ಠཱ͍ͯ͠ͳ͍

    • => ϚΠΫϩαʔϏεͰ͸ͳ͘”෼ࢄϞϊϦε”ͱ͍͏͜ͱʹ
  72. ಠཱσϓϩΠՄೳੑͷద༻ • TonamelͰ͸ͦ͜·Ͱ׬શͳಠཱੑΛ୲อͰ͖͍ͯͳ͍ • τʔφϝϯτදαʔϏε͸PerlϞϊϦεͷαΠυΧʔલఏͷ࡞Γ • εϙϯαʔαʔϏεͱܾࡁαʔϏε͸΄ͱΜͲͷ௨৴͕Eventܦ༝ • ඇಉظΠϕϯτ͸ରԠ͢Δϋϯυϥʔ͕࣮૷͞Εͯͳ͚Ε͹ແࢹ͢ Δ͚ͩͳͷͰಠཱσϓϩΠՄೳੑ͕͋Δ

  73. ಠཱσϓϩΠՄೳੑΛୡ੒͢ΔͨΊͷઓུ • αʔϏεؒͷґଘؔ܎ΛDAG(༗޲ඇ८ճάϥϑ)Ͱఆٛ • αʔϏεؒAPIʹඇޓ׵͕ൃੜ͢Δ৔߹ • ґଘ͞ΕΔଆ͸ޙํޓ׵ੑΛߟྀ͢Δ • deprecatedͳkeyΛҠߦظؒ͸αϙʔτ͢ΔͳͲ •

    ґଘ͢Δଆ͸ޓ׵ੑΛߟྀͤͣ࢖͏
  74. αʔϏεؒґଘؔ܎ͷDAG

  75. “جຊతʹ͸” ಉ࣌ʹߋ৽͕ඞཁͰ͋ͬͯ΋ ґଘ͞ΕΔଆ͔ΒσϓϩΠ͢Ε͹OK σϓϩΠ෼͚Ε͹͍͍͚ΕͲݕূͳͲͷؔ܎Ͱػೳ୯ҐͰσϓϩΠ͕ͪ͠

  76. TonamelͷσϓϩΠϑϩʔ • લఏ: αʔόɾϑϩϯτΤϯυɾΠϯϑϥ͢΂ͯҰͭͷϨϙδτϦ (monorepo)Ͱ؅ཧ͍ͯ͠Δ • ϦϙδτϦ͕෼ࢄͯ͠ͳ͍ͷͰɺmasterϒϥϯνͰϩʔΧϧ؀ڥΛ ཱͯͨΒͦͷ··ຊ൪ՔಇͷαʔϏεͱΠίʔϧͷ΋ͷ͕ಘΒΕΔ • ͦΕͧΕͷαʔϏε͸ಠཱͨ͠ECSαʔϏε΁σϓϩΠ͞ΕΔ

    • σϓϩΠπʔϧ͸kayac/ecspresso
  77. monorepoͳͷͰ શ෦ͷαʔϏεΛͲʔΜͱ΍Δͧʂ

  78. ຖճશ෦ͷαʔϏεΛ σϓϩΠ͍ͯ͠Δͱ஗͍ʂ

  79. ෼ࢄϞϊϦε͸σϓϩΠ͕஗͘ͳΔ • σϓϩΠ͢Δͱ͖ʹ͢΂ͯͷαʔϏεΛ͋Δॱ൪ʹԊͬͯσϓϩΠ͠ ͳ͍ͱ͍͚ͳ͍ͱͳΔͱɺσϓϩΠʹඇৗʹ͕͔͔࣌ؒΔ • ϩʔϦϯάσϓϩΠͷ৔߹ Blue/Greenͷ৔߹͸ૣ͍͔΋ • σϓϩΠ͕஗͘ͳΔͱϩʔϧόοΫ΋஗͘ͳΔ͜ͱ͕ଟ͍͠ɺԿΑΓ ػೳͷσϦόϦʔʹ͕͔͔࣌ؒΓɺϦϦʔε΋Ϗοάόϯ͡Όͳ͍ͱ

    ΋͍ͬͨͳ͍Έ͍ͨʹͳͬͯྑ͘ͳ͍
  80. େମͰಠཱσϓϩΠՄೳͳͷͰ ߋ৽͞ΕͨαʔϏε͚ͩͰϓϩΠͯ͠ ͋ͱ͸σϓϩΠεΩοϓ͢Ε͹͍͍ͷ Ͱ͸ʁ

  81. σϓϩΠεΩοϓઓུ • ECSʹ࢖͏ίϯςφΠϝʔδͷߋ৽ΛɺʮαʔϏε͕ґଘ͢Δ repository಺ͷಛఆͷσΟϨΫτϦ͕ߋ৽͞Ε͍ͯͨΒʯʹ͢Δ • ٖࣅతʹpolyrepoతͳcommit hashΛಘͯλάʹ࢖͏ • ຊ൪؀ڥͱσϓϩΠ༧ఆͷcommit hashؒͰECS

    Task Definitionͷࠩ ෼͕͋Ε͹σϓϩΠ͢Δ • ecspresso diff Λ࢖ͬͯdiffΛ֬ೝ
  82. σϓϩΠͷ༷ࢠ