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

Mercari Summer Internship 2021 Final Presentation

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Mercari Summer Internship 2021 Final Presentation

Avatar for Yoshiki Nagasaki

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