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
golang/mockでのモック生成と管理の "より良い" アプローチ
Search
sanposhiho
November 13, 2021
2
2.1k
golang/mockでのモック生成と管理の "より良い" アプローチ
Go Conference 2021 Autumn
https://gocon.jp/2021autumn/
sanposhiho
November 13, 2021
Tweet
Share
More Decks by sanposhiho
See All by sanposhiho
kube-scheduler: from 101 to the frontier
sanposhiho
1
130
A Tale of Two Plugins: Safely Extending the Kubernetes Scheduler with WebAssembly
sanposhiho
0
110
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
1.9k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
660
メルカリにおけるZone aware routing
sanposhiho
2
1k
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
450
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
810
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
8
3.9k
The Kubernetes resource management and the behind systems in Mercari
sanposhiho
0
310
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Documentation Writing (for coders)
carmenintech
67
4.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Visualization
eitanlees
146
15k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Transcript
Kensei Nakada @sanposhiho golang/mockでのモック生成と管理の "より 良い" アプローチ
中田 健誠 / Kyoto Uni (4th year) 普段はバックエンドエンジニアをしてます Twitter:
さんぽし (@sanpo_shiho) GitHub: @sanposhiho 自己紹介
golang/mock(GoMock)とは
golang/mock(GoMock)とは > GoMock is a mocking framework for the Go
programming language. Go の公式Orgで開発されている”モックのためのフレームワーク”
GoMockに関する詳しい話 このトークでは細かい使用方法は 扱いません。 詳しくはZennの記事を🙏 →
Kensei Nakada @sanposhiho golang/mockでのモック生成と管理の "より 良い" アプローチ
GoMock でのモック生成 mockgenコマンドを使用してinterfaceを元にモックを生成する
GoMockでのモック生成 mockgenコマンドを使用してinterfaceを元にモックを生成する
GoMock でのモック生成 interfaceを元にモックを生成する → interfaceが更新されるとモックを再生成(更新)する必要がある
GoMock でのモック生成 interfaceを元にモックを生成する → interfaceが更新されるとモックを再生成(更新)する必要がある → mockgenコマンドをどこかに置いておく必要がある
go generateでのGoMock管理 go generateを用いて、管理されることが多い。 ↓のように書いておいて で全mockgenを一斉に実行
go generateでのGoMock管理 この管理方法だといくつかの解決できない問題が存在する • はコマンドが一つ一つ実行される = 時間がかかる… • は常に全てのmockgenを実行する
• モックが最新のインターフェースを元に生成されているかわからない
sanposhiho/gomockhandler
gomockhandler go generate以外でのGoMockのモック管理を目指したライブラリ 一つのファイルを通してプロジェクト内の全てのモックの管理を行う。
モックの生成の効率化① gomockhandlerではモックを並行に生成している。 この効率化施策のみで、複数のモックの生成が50~60%早くなる(雑な計測)
モックの生成の効率化② 更新の必要がないモックの生成を自動でスキップする = 不必要なモックの生成は実行されない (※ Source modeのみ対応) 例)
interface A, Bのみを更新 → A, Bのためのモックの更新のみが実行される
モックが最新かどうか確認 モックが最新のインタフェースを元に生成されているかを確認できる CIなどで使用することでモックの更新忘れを防ぐことができる
「使ってみたいけど、移行めんどくさそう」🤔
go generate管理からの移行の容易性 go generateでのGoMock管理から簡単に移行できるようにデザイン プロジェクト内のgo generateを全て mockgen gomockhandler
-config=/path/to/config.json に置換するだけでgomockhandlerへの移行が完了する。
ご静聴ありがとうございました 20