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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
160
FDEが実現するAI駆動経営の現在地
gonta
2
280
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
Building a Meta Ray-Ban display app
akkeylab
0
110
プロポーザルを書いてもらう
pvcresin
0
460
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
170
What's New in Android 2026
veronikapj
0
260
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
150
テーブルをDELETEした
yuzneri
0
140
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.8k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
It's Worth the Effort
3n
188
29k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Are puppies a ranking factor?
jonoalderson
1
3.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
Code Review Best Practice
trishagee
74
20k
Navigating Weather and Climate Data
rabernat
0
470
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Designing for humans not robots
tammielis
254
26k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
4 Signs Your Business is Dying
shpigford
187
22k
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!