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

Mercari Summer Internship 2021 Final Presentation

Mercari Summer Internship 2021 Final Presentation

Yoshiki Nagasaki

December 01, 2021
Tweet

Other Decks in Programming

Transcript

  1. @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!
  2. 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)

  3. batchのsubcommand化
 学び
 • メルペイ(defpay)でのリリースフローを体験できた 
 ◦ cronjobの更新
 ◦ spinnakerを使ったリリース 


    
 • Goの使用に関して新たに学ぶことができた 
 ◦ path.Joinとfilepath.Join 
 ▪ WindowsではURLは”\”が必要なのでfilepath.Joinで はなくpath.Join
 ◦ io.NopCloser
 ▪ io.Readerを引数に取ることでio.ReaderCloserを返し てくれる
 Engineer Go
  4. 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)
  5. Outbox Patternの実装とテスト
 難しかったところ・工夫点
 • gRPCのInterceptorを咬ますとDB Setupの時に”READY”状態で止まる 
 ◦ Spanner Clientを2つ用意してDB名を共有

    
 
 • CIがたまにDatabase not foundエラーを吐く 
 ◦ 全テストでインスタンスは共通 
 ◦ TestMainでインスタンス内の全DBを消去している 
 ◦ ➡ 必要無くなったデータベースをインメモリで保持 

  6. Outbox Patternの実装とテスト
 学び
 • コードを読む力が付いた 
 ◦ ライブラリやdefpayのコードを見ながら試行錯誤した 
 


    • spanner emulatorを触った 
 ◦ 存在自体も初めて知った 
 
 • for文の中でdeferしない 
 ◦ forから抜けるまでdeferが積まれていく 
 Spanner Engineer Go
  7. Launchableとは
 背景
 • Mercari / Merpayではシナリオテストにより実際にテスト環境にデプロイし た状態でAPIテストを行っている 
 • 全テストを実行すると時間がかかるのでPRのdiffに影響のあるテストのみ

    を実行したい
 Launchableを使う!
 
 ✓ 機械学習によりdiffに対応するテストファイルを学習 
 ✓ CLIベースで接続できるのでGitHub Actionsと連携可能 
 🚀
  8. Launchable使用の流れ
 Defapy Repo Scenario Test Repo 🚀 Launchable
 Run Test

    XML Diff
 All Tests
 Test Subset
 Test Report
 ①
 ②
 ③

  9. Launchableのworkflow作成
 学び
 • 業務でのGitHub Actionsのworkflow作成を体験できた 
 
 • 何のために使用するのかを意識して作成する 


    ◦ QAの人が見て分かりやすいPRコメントを残す 
 ▪ 何のシナリオテストなのか? ➡ Titleを表示 
 ▪ 実際のテストはどのような流れなのか? ➡ リンクを表示 
 Engineer CI