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
1.9k
golang/mockでのモック生成と管理の "より良い" アプローチ
Go Conference 2021 Autumn
https://gocon.jp/2021autumn/
sanposhiho
November 13, 2021
Tweet
Share
More Decks by sanposhiho
See All by sanposhiho
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
1.6k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
510
メルカリにおけるZone aware routing
sanposhiho
1
360
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
300
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
630
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
7
3.5k
The Kubernetes resource management and the behind systems in Mercari
sanposhiho
0
290
Goにおけるアクターモデルの実現に 向けたライブラリの設計と実装
sanposhiho
5
2k
Pod Topology Spreadの超最前線 MinDomains、NodeInclusionPoliciesについて
sanposhiho
1
1.2k
Featured
See All Featured
Web development in the modern age
philhawksworth
201
10k
Fontdeck: Realign not Redesign
paulrobertlloyd
75
4.8k
A designer walks into a library…
pauljervisheath
199
23k
Docker and Python
trallard
33
2.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
23
1.9k
Building Effective Engineering Teams - LeadDev
addyosmani
25
1.8k
A Philosophy of Restraint
colly
195
15k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Why Our Code Smells
bkeepers
PRO
330
56k
Imperfection Machines: The Place of Print at Facebook
scottboms
257
12k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
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