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
120
A Tale of Two Plugins: Safely Extending the Kubernetes Scheduler with WebAssembly
sanposhiho
0
100
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
1.9k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
650
メルカリにおけるZone aware routing
sanposhiho
2
970
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
440
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
790
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
8
3.9k
The Kubernetes resource management and the behind systems in Mercari
sanposhiho
0
310
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
How to Think Like a Performance Engineer
csswizardry
22
1.2k
A Tale of Four Properties
chriscoyier
157
23k
RailsConf 2023
tenderlove
29
940
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
A Philosophy of Restraint
colly
203
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Docker and Python
trallard
41
3.1k
Producing Creativity
orderedlist
PRO
341
39k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
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