Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The ...
Search
mackee
March 05, 2022
Programming
3.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl
YAPC::Japan::Online 2022 Track B
mackee
March 05, 2022
More Decks by mackee
See All by mackee
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
97
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
970
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
5.8k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
7k
ワンバイナリWebサービスのススメ
mackee
10
8.8k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
660
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.2k
perl for shell, awk and sed programmers
mackee
3
2.8k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1.1k
Other Decks in Programming
See All in Programming
Webフレームワークの ベンチマークについて
yusukebe
0
160
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
Vite+ Unified Toolchain for the Web
naokihaba
0
280
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
20
6.5k
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
180
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
250
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Facilitating Awesome Meetings
lara
57
7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
How GitHub (no longer) Works
holman
316
150k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Accessibility Awareness
sabderemane
1
140
The World Runs on Bad Software
bkeepers
PRO
72
12k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Embracing the Ebb and Flow
colly
88
5.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Transcript
͡Θ͡ΘͱPerl͔ΒGoʹ Ҡߦ͠Α͏ͱ͍ͯ͠Δ ԶͨͪͷϚΠΫϩαʔϏγʔζ YAPC::Japan::Online 2022 2022-03-05 Track B 13:40ʙ14:20 @macopy
a.k.a @mackee_w
͜ͷηογϣϯͷུ֓
1FSMೖֶࣜ͘ΜIUUQTQFSMFOUSBODFDPOOQBTTDPN 3FOÉF'SFODIIUUQTSFOFFGSFODICMPHTQPUDPN
(·ͩ)શ෦ஔ͖͍͑ͯͳ͍
None
Tonamelͷنײ -PCJ5PVSOBNFOU
ޙͷ5POBNFM ։ൃ։࢝ 5POBNFMʹ໊લ͕มߋ 1FSMͷߦߦ ͭͳ͗͜ΈͰएׯ૿Ճ 1FSMͷߦߦ (PϚΠΫϩαʔϏεº (Pͷߦߦ ͏ͪίʔυੜߦ
͜Ε·Ͱ2΄Ͳ͔͚ͯ ͡Θ͡ΘҠߦͭͭ͋͠Δ
ͦͷؒʹػೳ͕૿͑
େձ૿͍͑ͯ͘
͜ͷηογϣϯͰ ٞͷҰൠԽΛ͋͑ͯͤͣ TonamelͰͷࣄྫΛ͠·͢
ୈ1ষ: ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ ୈ2ষ: ॳΊͯͷαʔϏεׂ ୈ3ষ: ϚΠΫϩαʔϏεͨͪͷ࿈ܞํ๏
@macopy • ໘ന๏ਓΧϠοΫ eεϙʔπࣄۀ෦ TonamelαʔόαΠυςοΫϦʔυ • Perlେ͖ Go͖ • GGST༻Ωϟϥ:
ϥϜϨβϧ • ISUCON11 ༏উ ←NEW!
ୈ1ষ ͳͥϚΠΫϩαʔϏεʹ͢Δͷ͔ʁ
Ҡߦલͷߏ(ʙ2020-07) ͜ͷޙʹϚΠΫϩαʔϏεԽʹ߹ΘͤͯECSԽ
՝: PerlͰڊେGraphQLΛ ͘͞ͷՙ͕ॏ͍ • TonamelͰओͳAPIܗࣜͱͯ͠GraphQLΛ ࠾༻͍ͯ͠Δ • ڊେͳϨεϙϯεΛฦ͢ͱ͖ɺGraphQL.pm 0.47(2021-02ϦϦʔε)ҎલͰܕνΣοΫ ͕ϨεϙϯελΠϜͷ΄ͱΜͲΛΊ͍ͯͨ
• GraphQLΛ͍ଓ͚Δʹɺ͜ͷ͋ͨΓʹԿ Β͔ͷվળҊ͕ඞཁͩͬͨ
ݱࡏͷ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 --
͍͔ͭ͘ͷબࢶ • GraphQLΛ࠾༻͢Δ߹ • Perl ͷ··Ͱ GraphQL ΛߴԽ͢Δ • GraphQLΛίετΊʹฦͤΔϥΠϒϥϦ͕͋ΔݴޠʹΓ͑Δ
• ͦΕҎ֎Λ࠾༻͢Δ߹ • PerlͰѻ͑ΔൣғͷAPIతͳͷʹ͢Δ • XslateͰMPAʹΔ
GraphQLҎ֎ͷ՝: εέʔϦϯάੑ • ͕͋ΔτϥϑΟοΫͷରԠ • όοΫΤϯυDB͕Aurora MySQLͳͷͰɺखಈͰεέʔϧΞοϓ/Πϯ ͯ͠ෛՙʹରԠ͍ͯͨ͠ • =>
ӡ༻ͷख͕ؒ͠ΜͲ͍ͷͰɺࣗಈͰਫฏεέʔϧ͢Δσʔλε τΞʹҠߦ͍ͨ͠Ϟνϕʔγϣϯ • ྫ͑DynamoDBͱͳΔ͕ɺPerlͰDynamoDBΛѻ͏ϊϋ͕ͳ͍
ΠϕϯτʹΘΕΔαʔϏεͳͷͰ τϥϑΟοΫͷ͕େ͖͍
GraphQLҎ֎ͷ՝: ੩తܕ͕ͳ͍ݴޠ͕ਏ͍ • τʔφϝϯτදͷߏஙൺֱతෳࡶͳϓϩάϥϛϯάΛཁٻ͞ΕΔํ • εΠευϩʔͷOMW%, μϒϧΤϦϛͷഊऀαΠυͷஔͳͲ • ෳࡶͳϩδοΫΛΉͷʹܕ͕͋Δͱ”҆৺”͢Δ •
ͪΖΜςετඞཁ
ͱ͍͏Θ͚ͰGo͕͍͍ͨ • GraphQL => gqlgenͱ͍͏εΩʔϚϑΝʔετͰ੩తܕνΣοΫΛ ߦ͏ϥΠϒϥϦ • ਫฏεέʔϦϯάՄೳͳDBΛ͍͍ͨ => GoެࣜAWS
SDK͕͋ ΓɺDynamoDBΛѻ͏ͨΊͷϥούʔϥΠϒϥϦ͋Δ • ੩తܕ͕ͪΐ͏Ͳ͍͍ײ͡ʹଘࡏ͢Δ • ͳʹΑΓνʔϜϝϯόʔ͕աڈʹͬͨ͜ͱ͕͋ΔݴޠͰ͋Δ
Ͳ͏GoΛΈࠐΉ͔ʁ • શ෦Goʹ͢Δͱʁ • ࠓ·Ͱೖ͍ͬͯΔDBʹೖ͍ͬͯΔσʔλΛͲ͏͢Δͷ͔ • શ෦GoͰ࣮͠ऴΘΔ·Ͱ৽ن։ൃΛࢭΊΔͷ͔ • => ݁ߏ͍͠
• Ұ෦͚ͩGoʹ͍ͨ͠ • ͕ͩDBΛڞ༗ͨ͘͠ͳ͍ DynamoDBʹ͍ͨ͠
ϚΠΫϩαʔϏεׂ͢Δ
ҰൠతͳϚΠΫϩαʔϏεͷޮೳ • ݸʑͷΞϓϦέʔγϣϯͷΛখ͘͞อͯΔ • ΞδϦςΟ͕ߴ͘ͳΔ • ΞϓϦέʔγϣϯ͝ͱʹదͳΞʔΩςΫνϟΛબΔ • ؔ৺͝ͱʹνʔϜΛׂ͢Δ͜ͱ͕༰қʹͳΔ •
etc…
ϚΠΫϩαʔϏεΛΓ͔ͨͬͨͱ͍͏ΑΓ ͦΕҎ֎ͷྑ͍બࢶ͕ͳ͔ͬͨͷͰͬͨ • ϚΠΫϩαʔϏεΛબ͢Δͷʹ્͢Δཁૉ • νʔϜׂ͢Δ΄Ͳن͕େ͖͘ͳ͍ • ͚Ͳɺݱঢ়ͷΞʔΩςΫνϟͰղܾͰ͖ͳ͍՝͕͋Δ • ࠷ऴతʹϞδϡϥϞϊϦεʹ߹ମ͢ΔՄೳੑ͋Δͱࢥ͍ͬͯΔ
ͦͦϞδϡϥϞϊϦεͩͬͨͷͰ ׂ͔ͬͨ͢͠ • ઌਓ͕TonamelΛϞδϡϥϞ ϊϦεͰ࡞ͬͯ͘Ε͍ͯͨ • ׂ͢ΔͨΊͷػೳͷڥք͕ ͢Ͱʹଘࡏ͍ͯͨ͠
ͰͲ͏͍͔ͬͯ͘
ୈ2ষ ॳΊͯͷαʔϏεׂ
ॳखɺԿΛΓग़͔͢
͡ΊʹΓग़͢ͱྑ͍ͱ͞ΕΔαʔϏεͷ݅ • ͋ΔఔαʔϏε͕ʮڥք͚ͮΒΕͨίϯςΩετʯʹͦͬͯղ͞ Ε͍ͯΔલఏͰҎԼ • ଞͷίϯςΩετ͔Βͷґଘ͕গͳ͍ => ղ͍͢͠ • ϩʔϧόοΫ͕͍͢͠
=> ࡉ͔͘ϦϦʔεͰ͖Δ • ղʹΑΔརӹ͕େ͖͍
༏ઌॱҐ͚ݶ ʮϞϊϦε͔ΒϚΠΫϩαʔϏεʯΛࢀߟʹ
ͳͥτʔφϝϯτද͔ • GraphQLͷϨεϙϯελΠϜΛվળ͔ͨͬͨ͠ͷτʔφϝϯτද • => ղʹΑΔརӹ͕͋Δ • τʔφϝϯτදʹ͍ͭͯ৽ػೳ(μϒϧΤϦϛωʔγϣϯ)ͷ࣮͕༧ఆ͞Ε͍ͯͨ • =>
৽ػೳΛΔҰͱͯ͠ϚΠΫϩαʔϏεͷղ͕ߦ͑Δ • τʔφϝϯτද΄͔ͷαʔϏεʹґଘ͢ΔαʔϏεͳͷͰɺґଘ͞ΕΔଆͰ ͳ͍ • => ղͷ͢͠͞
্ͬͨͰ͜ͷஅͷৼΓฦΓ • ৽ػೳͷҰͱͯ͠ղΛߦ͏ͷ͋·ΓಘࡦͰͳ͍ • ϩʔϧόοΫ͕ͮ͠Β͘ͳΔ • ։ൃνʔϜ֎͔Βͷਐḿͷݟ͕ͨѱ͍ • ໌ࣔతʹػೳͷϚΠΫϩαʔϏεͷ࠶࣮Λ͍ͬͯΔͱ͍͏ ͷΛݴͬͨ΄͏͕ྑ͍
• ϦϦʔε͕ϏοάόϯʹͳΓ͕ͪ(͋Δఔ؇ࡦ͋Δ)
طଘͷϦΫΤετͱ ৽τʔφϝϯτදϦΫΤετͷ ͚ํ
GraphQLΤϯυϙΠϯτΛ͚Δ
ϢʔβʔใϔομʹJWTͰຒΊࠐΉ • ϞϊϦεͰड͚ͨϦΫΤετͷCookie͔ΒϦΫΤετϢʔβʔͷ ηογϣϯใΛऔΓग़͢ • ͜͜·Ͱैདྷ·Ͱ͋Δಈ࡞ • `X-Awesome-Authentication: <JWT>` ͷΑ͏ͳHTTPϔομʹJWTϊ
ܗͰೖΕΔ • ϓϩΩγͰBodyΛ͍ͬͨ͡ΓಡΜͩΓͨ͘͠ͳ͍
͞ΒʹύεΛ͚ͯ Ϣʔβ×େձͷݖݶใ༩
GraphQLͷύεΛେձ͝ͱʹ͚Δ ྫ: େձID=XXXXX ͷ߹ POST /new_awesome/graphql/XXXXX ͜ΕͰBodyΛಡ·ͳͯ͘ τʔφϝϯτදαʔϏε͕ΞΫηεϢʔβͷݖݶΛΕΔ
ͿͬͪΌ͚Δͱ͜Ε͓͢͢ΊͰͳ͍ • GraphQLΤϯυϙΠϯτ͕Ұݸʹ·ͱ·Δͷ͕͍͍ͱ͜ΖͷҰͭ • ΫϥΠΞϯταΠυෳݸʹ͔ΕΔͷରԠ͍ͯ͠ͳ͍͜ͱ͕ ଟ͍ • ͬͱ΄͔ʹΓํ͕͋ͬͨɺޙड़͢Δେ౷Ұʹ࣋ͪӽ͍ͯ͠Δ • ผղ:
ύʔεޙʹผͷAPIʹେձใ+ݖݶใ͍߹Θͤ + େձ αʔϏεΛઌʹ࡞Δ
ͰͲͷΑ͏ʹ ຊ൪ʹೖΕΔ͔
͓खܰʹαΠυΧʔʹͨ͠
αΠυΧʔʹ͢ΔϝϦοτɾσϝϦοτ • ϝϦοτ • Πϯϑϥ͕ෳࡶʹͳΒͳ͍, Ճ͢Δख͍ؒ҆ • εέʔϧΞτϞϊϦεͱҰॹʹ͢Δ => ෛՙ͕ಡΊͳ͍ͱ͖ʹศར
• σϝϦοτ • ECS Taskͷ10ίϯςφ੍ݶΛ͑Δ͜ͱग़དྷͳ͍ • αʔϏεͷधཁʹ߹ΘͤͯݸผʹεέʔϧΞτ͕ग़དྷͳ͍
ͯ͞ϦϦʔε… ͕ͩ💥Ϗοάόϯ💥Λආ͚͍ͨ
ϕετϓϥΫςΟε: 💥Ϗοάόϯ💥Λආ͚Δ • ͜ͷ߹ͷϏοάόϯͱ • ͍͖ͳΓ৽࣮ͨ͠ϚΠΫϩαʔϏεʹαʔϏεશମΛΓସ͑Δ • ϏοάόϯͷσϝϦοτ • Γ͕͠ࠔʹͳΔ
• ϦϦʔε୯Ґ͕େ͖͘ͳΔ => ݁ՌతʹσϦόϦʔ͕͘ͳΔ
τʔφϝϯτදαʔϏεͰߦͬͨ͜ͱ • Ұ෦ͷϢʔβʹݶఆػೳͱͯ͑͠ΔΑ ͏ʹఏڙ • ϑΟʔυόοΫΛΒ͍͍͢Ϣʔ βʹݶఆͯ͠ఏڙͰ͖Δ • େ͖ͳେձΛආ͚ͯఏڙ͢Δ •
چτʔφϝϯτදػೳฒߦͯ͠ఏڙ ͠ଓ͚Δ • ͕͋Εݹ͍ํΛͬͯΒ͏
β൛தʹߦͬͨ͜ͱ • ຊ൪ͰΤϥʔϩά͕ग़ͨΒ͙͢ʹ͢ • σʔλͿͬյΕܥ͍ʹগͳ͔ͬͨ(͋Δʹ͕͋ͬͨ) • ن͕େ͖ΊͷେձͰΘΕͯͨΒࢹ͍ͯ͠ΔϝτϦοΫΛݟΔ • DynamoDBΛॳΊ͍ͯͬͯͨͷͰෛՙ͕Θ͔Βͳ͔ͬͨͷ ͋Δ
• ༷ʑͯ͠େৎͦ͏ͳͷͰਖ਼ࣜϦϦʔε
͍Ζ͍Ζ͕͋ͬͨͨ͠ʂ
Ͱ͜Ε͚ͩͩͱͨͩͷ PolyglotߏͩΑͶ
ୈ3ষ ϚΠΫϩαʔϏε ͨͪͷ࿈ܞํ๏
τʔφϝϯτදαʔϏεҎ߱ͷ։ൃํ • GoΛؚΊͨpolyglotͰΕΔ͜ͱ͕Θ͔ͬͨͷͰҎԼͷํʹ͢Δ • ৽ػೳͯ͢ϚΠΫϩαʔϏεଆʹ࣮͢Δ • طଘػೳͷվमPerlϞϊϦεͷ࣮͕ۃʹૣ͍߹ͦͪΒ ʹ࣮͢Δɻͦ͏Ͱͳ͍߹ϚΠΫϩαʔϏεଆ
࣍ԿΛΓग़͢ͷ͔
༏ઌॱҐ͚ݶ
༏ઌॱҐ͚ݶ(Update൛)
εϙϯαʔػೳΛ࡞Δ͜ͱʹͳͬͨ
εϙϯαʔػೳͱ • େձϖʔδʹࠂΛࡌͤΒΕΔػೳ • ࠂओ࠵ஂମ͕ืूͯ͠ɺࠂ ओ͕ओ࠵ஂମʹ͓ۚΛ͏͜ͱͰࡌ ͤͯΒ͑Δ
ઃܭํ • εϙϯαʔαʔϏεͱܾࡁαʔϏεͷ2ͭʹׂ͢Δ • εϙϯαʔαʔϏεͷ => େձʹඥͮ͘εϙϯαʔͷཧ • ਃ༰ঝೝϑϩʔɺऔΓԼ͛ͳͲΛ͔ͭ͞ͲΔ •
εϙϯαʔ͕ԿΛͬͯਃ͞ΕΔ͔͋·Γؾʹ͠ͳ͍ • ܾࡁαʔϏε => StripeΛ༻͍ͨ͋Δਓ͔Β͋Δਓͷࢧ͍ͷཧ • Կͷࢧ͍͔ܾࡁαʔϏε͋·Γؾʹ͠ͳ͍
εϙϯαʔػೳͷσʔλͷྲྀΕ
͜͏ݴ͏ਤΛ࠷ॳʹॻ͘ͷ ͓͢͢Ίʂ
Domain Event • ৽τʔφϝϯτදαʔϏε࣮Ҏલ͔Β͋ΔඇಉظδϣϒΛҕৡ͢ΔͨΊ ͷػߏͱͯ͠Domain Eventͱݴ͏֓೦Λ༻ҙͨ͠ • ࣮ৄࡉతʹHTTPͰLambdaΛୟ͘ͱSQSʹΤϯΩϡʔ͞Εͯɺϝο ηʔδΛผͷLambda͕ىಈͯ͠ɺ֤ϚΠΫϩαʔϏεͷhandlerʹϝο ηʔδΛ৴͢Δ
• ϝοηʔδʮ◦◦͕ىͬͨ͜ʂʯͱ͍͏ײ͡Ͱpublish͞Ε͍ͯΔ • ʮ˓˓Λͯ͘͠Εʯͱ͍͏ײ͡Ͱͳ͍
େձ࡞࣌ͷϝοηʔδ৴ εϚʔτΤϯυϙΠϯτɾμϜύΠϓతͳࢥ
εϙϯαʔػೳͷͦͷଞ • σʔλετΞMySQL • τʔφϝϯτදαʔϏε΄ͲͷεέʔϧΞτੑೳ͍Βͳ͍ • ౿ΜͰͯࣾͰൺֱతѻ͑Δਓ͕ଟ͍MySQLΛ͏ • ΞʔΩςΫνϟActive Recordύλʔϯ
• τʔφϝϯτදαʔϏεClean Architecture
͜ΕͳΜͱ͔ϦϦʔεʂ
·ͱΊͱࠓޙͷల
ϚΠΫϩαʔϏεखஈͰ͋ΓతͰͳ͍ • TonamelʹͱͬͯϚΠΫϩαʔϏεҎԼͷ՝Λղܾ͢Δखஈ • ݱࡏͷαʔϏεΛࢭΊͣʹஞ࣍৽ػೳΛՃ͢Δ • ϞϊϦεଆͷ࠾༻ٕज़Ͱग़དྷͳ͔ͬͨ͜ͱΛॊೈʹಋೖ͢Δ • ࣌ظ͕དྷΕશ෦·ͨϞδϡϥϞϊϦε߹ମ͢Δͷݕ౼ •
νʔϜ͕ෳʹͳΔ͙Β͍େ͖͘ͳΔ͔Ͳ͏͔ • ࡞Δͷ͕ਖ਼͍͔͠Θ͔ΒΜॳظϞϊϦεͷ΄͏͕͍Ͱ͢ • ϞϊϦε͔ΒΓग़͢߹ɺਖ਼͘͠ಈ͘ͷ͕ͦ͜ʹ͋Δ͔Β࡞Δͷ͕ૣ͘ͳΔ
ࠓޙͷల • Apollo Federationͷಋೖ • PerlϞϊϦε, τʔφϝϯτද, εϙϯαʔ, ܾࡁͱͯ͢GraphQL ͕͔Ε͍ͯΔͷΛ౷߹͢ΔͨΊͷιϦϡʔγϣϯ
• ϞϊϦεʹ͋Δͯ͢ͷػೳΛϚΠΫϩαʔϏεׂ • ݱࡏҠ২࡞ۀதͷͷ͋Γ
Any Questions?
ࢀߟʹͨ͠ͷ • ʮϞϊϦε͔ΒϚΠΫϩαʔϏεʯSam Newman ஶ, ౡా ߒೋ ༁ • ͜ͷࢿྉΛ࡞Δࡍʹࢀরɻ͖ͬͯͨ͜ͱͷཧ͚આ໌ʹ༻͍
ͨɻ͜ͷຊͰΞϯνύλʔϯͱ͞Ε͍ͯΔ͜ͱɺTonamelͰ(ؾ ͔ͮͣʹ)ߦ͍ͬͯΔɻ
ิҨ ಠཱσϓϩΠՄೳੑ
ϚΠΫϩαʔϏεͰ͜Εͬͱ͍ͨ΄͏͕͍͍ ͧͬͯͭ • ʮϞϊϦε͔ΒϚΠΫϩαʔϏεʯͱ͍͏ຊʹॻ͔Ε͍ͯΔ ຊॻ͔ΒಘΒΕΔͷ͕͚ͭͩͩͱͨ͠Βɺ ͦΕʮϚΠΫϩαʔϏεʹಠཱσϓϩΠՄೳੑ ͷ֓೦Λ࣮֬ʹऔΓೖΕΑ͏ʯͱ͍͏͜ͱͩɻ
ಠཱσϓϩΠՄೳੑ 🤔
ಠཱσϓϩΠՄೳੑͱ • ʮ͋ΔϚΠΫϩαʔϏεʹର͢ΔมߋΛɺଞͷαʔϏεʹӨڹΛ༩͑ Δ͜ͱͳ͘ຊ൪ڥͰϓϩΠͰ͖Δͱݴ͏ߟ͑ํͩɻʯ • by ʮϞϊϦε͔ΒϚΠΫϩαʔϏεʯ • αʔϏεAΛมߋͨ͠ͱ͖ʹɺҰॹʹαʔϏεBมߋ͠ͳ͍ͱ͍͚ ͳ͍ʂͱ͍͏ͷಠཱ͍ͯ͠ͳ͍
• => ϚΠΫϩαʔϏεͰͳ͘”ࢄϞϊϦε”ͱ͍͏͜ͱʹ
ಠཱσϓϩΠՄೳੑͷద༻ • TonamelͰͦ͜·ͰશͳಠཱੑΛ୲อͰ͖͍ͯͳ͍ • τʔφϝϯτදαʔϏεPerlϞϊϦεͷαΠυΧʔલఏͷ࡞Γ • εϙϯαʔαʔϏεͱܾࡁαʔϏε΄ͱΜͲͷ௨৴͕Eventܦ༝ • ඇಉظΠϕϯτରԠ͢Δϋϯυϥʔ͕࣮͞Εͯͳ͚Εແࢹ͢ Δ͚ͩͳͷͰಠཱσϓϩΠՄೳੑ͕͋Δ
ಠཱσϓϩΠՄೳੑΛୡ͢ΔͨΊͷઓུ • αʔϏεؒͷґଘؔΛDAG(༗ඇ८ճάϥϑ)Ͱఆٛ • αʔϏεؒAPIʹඇޓ͕ൃੜ͢Δ߹ • ґଘ͞ΕΔଆޙํޓੑΛߟྀ͢Δ • deprecatedͳkeyΛҠߦظؒαϙʔτ͢ΔͳͲ •
ґଘ͢ΔଆޓੑΛߟྀͤͣ͏
αʔϏεؒґଘؔͷDAG
“جຊతʹ” ಉ࣌ʹߋ৽͕ඞཁͰ͋ͬͯ ґଘ͞ΕΔଆ͔ΒσϓϩΠ͢ΕOK σϓϩΠ͚Ε͍͍͚ΕͲݕূͳͲͷؔͰػೳ୯ҐͰσϓϩΠ͕ͪ͠
TonamelͷσϓϩΠϑϩʔ • લఏ: αʔόɾϑϩϯτΤϯυɾΠϯϑϥͯ͢ҰͭͷϨϙδτϦ (monorepo)Ͱཧ͍ͯ͠Δ • ϦϙδτϦ͕ࢄͯ͠ͳ͍ͷͰɺmasterϒϥϯνͰϩʔΧϧڥΛ ཱͯͨΒͦͷ··ຊ൪ՔಇͷαʔϏεͱΠίʔϧͷͷ͕ಘΒΕΔ • ͦΕͧΕͷαʔϏεಠཱͨ͠ECSαʔϏεσϓϩΠ͞ΕΔ
• σϓϩΠπʔϧkayac/ecspresso
monorepoͳͷͰ શ෦ͷαʔϏεΛͲʔΜͱΔͧʂ
ຖճશ෦ͷαʔϏεΛ σϓϩΠ͍ͯ͠Δͱ͍ʂ
ࢄϞϊϦεσϓϩΠ͕͘ͳΔ • σϓϩΠ͢Δͱ͖ʹͯ͢ͷαʔϏεΛ͋Δॱ൪ʹԊͬͯσϓϩΠ͠ ͳ͍ͱ͍͚ͳ͍ͱͳΔͱɺσϓϩΠʹඇৗʹ͕͔͔࣌ؒΔ • ϩʔϦϯάσϓϩΠͷ߹ Blue/Greenͷ߹ૣ͍͔ • σϓϩΠ͕͘ͳΔͱϩʔϧόοΫ͘ͳΔ͜ͱ͕ଟ͍͠ɺԿΑΓ ػೳͷσϦόϦʔʹ͕͔͔࣌ؒΓɺϦϦʔεϏοάόϯ͡Όͳ͍ͱ
͍ͬͨͳ͍Έ͍ͨʹͳͬͯྑ͘ͳ͍
େମͰಠཱσϓϩΠՄೳͳͷͰ ߋ৽͞ΕͨαʔϏε͚ͩͰϓϩΠͯ͠ ͋ͱσϓϩΠεΩοϓ͢Ε͍͍ͷ Ͱʁ
σϓϩΠεΩοϓઓུ • ECSʹ͏ίϯςφΠϝʔδͷߋ৽ΛɺʮαʔϏε͕ґଘ͢Δ repositoryͷಛఆͷσΟϨΫτϦ͕ߋ৽͞Ε͍ͯͨΒʯʹ͢Δ • ٖࣅతʹpolyrepoతͳcommit hashΛಘͯλάʹ͏ • ຊ൪ڥͱσϓϩΠ༧ఆͷcommit hashؒͰECS
Task Definitionͷࠩ ͕͋ΕσϓϩΠ͢Δ • ecspresso diff ΛͬͯdiffΛ֬ೝ
σϓϩΠͷ༷ࢠ