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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
570
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
270
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
230
dRuby over BLE
makicamel
2
320
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
230
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
500
Agentic UI
manfredsteyer
PRO
0
110
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
17
6.1k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.2k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
110
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
160
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
WENDY [Excerpt]
tessaabrams
11
38k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
600
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
240
Believing is Seeing
oripsolob
1
140
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
4 Signs Your Business is Dying
shpigford
187
22k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
New Earth Scene 8
popppiees
3
2.3k
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!