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
Mercari Summer Internship 2021 Final Presentation
Search
Yoshiki Nagasaki
December 01, 2021
Programming
3.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mercari Summer Internship 2021 Final Presentation
Yoshiki Nagasaki
December 01, 2021
Other Decks in Programming
See All in Programming
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
0
250
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
150
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
420
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
4.1k
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.2k
自作OSでスライド発表する
uyuki234
1
3.9k
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
340
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
330
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
180
5分で問診!Composer セキュリティ健康診断
codmoninc
0
500
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Site-Speed That Sticks
csswizardry
13
1.3k
Abbi's Birthday
coloredviolet
3
8.7k
The Curse of the Amulet
leimatthew05
2
13k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
So, you think you're a good person
axbom
PRO
2
2.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
KATA
mclloyd
PRO
35
15k
Designing for Performance
lara
611
70k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
For a Future-Friendly Web
brad_frost
183
10k
Transcript
Yoshiki Nagasaki (champon) Summer Internship 2021 Results Presentation
@champon (ちゃんぽん) / Backend Engineer Internship PICTURE Picture which can
be identified your face is preferable 顔がわかる写真が好ましいです • Full Name : 長崎好輝 (Yoshiki Nagasaki) • GitHub : champon1020 • Twitter : champon1020 • Joining Time : 2021/08/01 • Career : M1 student (summer internship at Merpay) • Hobby : Anime, Comic, Programming • Strong : Go, Computer Vision • Weak : Careless mistakes • Message : Nice to meet you!
やったこと
やったこと 1. batchのsubcommand化 2. Outbox Patternの実装とテスト 3. Launchableからsubsetを取得するworkflow作成
batchのsubcommand化
batchのsubcommand化とは batch: 定期実行されるプログラム subcommand: あるコマンド下でさらに処理を分岐するコマンド (ex. git push,
git pull)
batchのsubcommand化 背景 • defpayのビルド時間を短縮したい • batchに共通化できそうな部分がたくさんあった 処理を共通化してソースコードを減らそう!
batchのsubcommand化 主に共通化できるコード • serviceやclientの初期化 ◦ cmd/batch/main.goにて共通化 • 環境変数 ◦
configに新たな環境変数として登録
batchのsubcommand化 進捗 計8個のbatchをsubcommand化した scheduled-repayment-v2 scheduled-repayment-result-checker payable-easypay debt-sync
reconcile-easypay-reviews overdue-easypay create-easypay-user-contract-record-v2 force-michael-sync (Released) (In Review) (Released) (Released) (Verified) (Verified) (Verified) (Approved)
batchのsubcommand化 学び • メルペイ(defpay)でのリリースフローを体験できた ◦ cronjobの更新 ◦ spinnakerを使ったリリース
• Goの使用に関して新たに学ぶことができた ◦ path.Joinとfilepath.Join ▪ WindowsではURLは”\”が必要なのでfilepath.Joinで はなくpath.Join ◦ io.NopCloser ▪ io.Readerを引数に取ることでio.ReaderCloserを返し てくれる Engineer Go
Outbox Patternの実装とテスト
Outbox Patternとは Outbox Pattern: マイクロサービス間の通信においてイベントが送信成功するまでリトライを継続して一 貫性を担保 サービスA サービスB 送信失敗 例
一貫性がサービスA内で完結してしまう
Outbox Patternとは Outbox Pattern: マイクロサービス間の通信においてイベントが送信成功するまでリトライを継続して一 貫性を担保 サービスA サービスB 成功するまでリトライ
例 一貫性をマイクロサービス間で担保
Outbox Patternとは publishworkerの概要図 Task Pub/Sub Spanner publishworker Retry until succeed
(check if error is retriable) Poll INSERT Send Task
Outbox Patternの実装とテスト TestNewWorker:workerの初期化 • Optionがちゃんと渡されているか確認 TestWorker_Start:workerをスタートする(taskをpollする状態に遷移する) •
既にworkerがRunningしている場合は何もしない • taskがあればpublishを開始 TestWorker_publish :taskをPubSubにpublishする • retriableか否かを判定できているか確認 進捗 計3つの単体テストを実装した (Merged) (In Review) (Merged)
Outbox Patternの実装とテスト 難しかったところ・工夫点 • gRPCのInterceptorを咬ますとDB Setupの時に”READY”状態で止まる ◦ Spanner Clientを2つ用意してDB名を共有
• CIがたまにDatabase not foundエラーを吐く ◦ 全テストでインスタンスは共通 ◦ TestMainでインスタンス内の全DBを消去している ◦ ➡ 必要無くなったデータベースをインメモリで保持
Outbox Patternの実装とテスト 学び • コードを読む力が付いた ◦ ライブラリやdefpayのコードを見ながら試行錯誤した
• spanner emulatorを触った ◦ 存在自体も初めて知った • for文の中でdeferしない ◦ forから抜けるまでdeferが積まれていく Spanner Engineer Go
Launchableからsubsetを取得するworkflow作 成
Launchableとは 背景 • Mercari / Merpayではシナリオテストにより実際にテスト環境にデプロイし た状態でAPIテストを行っている • 全テストを実行すると時間がかかるのでPRのdiffに影響のあるテストのみ
を実行したい Launchableを使う! ✓ 機械学習によりdiffに対応するテストファイルを学習 ✓ CLIベースで接続できるのでGitHub Actionsと連携可能 🚀
Launchable使用の流れ Defapy Repo Scenario Test Repo 🚀 Launchable Run Test
XML Diff All Tests Test Subset Test Report ① ② ③
Launchableのworkflow作成 現状 • とりあえずLaunchableにデータを送りまくってる状態 • シナリオテストは定期実行されている 今回やりたいこと subsetを取得してPRにコメントとして残す
• ちゃんと学習できているか確認 • QAにおいてどのようなテストを実行すれば良いかの参考になる
PRへのコメント 2回目以降のRunではコメントを 更新する PRへコメント
PRへのコメント Subset List merpay-scenario-testsの リポジトリへ飛べる
PRへのコメント Invalid Subset 試運用段階なのでfailさせ ずにリストに残してる
workflowの流れ defpayとscenario-testのコードを Launchableに登録 Launchableからsubsetを取得 subsetをmarkdownのテーブルに変換 PRにコメント
Launchableのworkflow作成 学び • 業務でのGitHub Actionsのworkflow作成を体験できた • 何のために使用するのかを意識して作成する
◦ QAの人が見て分かりやすいPRコメントを残す ▪ 何のシナリオテストなのか? ➡ Titleを表示 ▪ 実際のテストはどのような流れなのか? ➡ リンクを表示 Engineer CI
Thank you for your attention!