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.2k
golang/mockでのモック生成と管理の "より良い" アプローチ
Go Conference 2021 Autumn
https://gocon.jp/2021autumn/
sanposhiho
November 13, 2021
Tweet
Share
More Decks by sanposhiho
See All by sanposhiho
Understanding the Kubernetes Scheduler: Internals, Roadmap, and Contributions
sanposhiho
1
54
kube-scheduler: from 101 to the frontier
sanposhiho
1
200
A Tale of Two Plugins: Safely Extending the Kubernetes Scheduler with WebAssembly
sanposhiho
0
150
人間によるKubernetesリソース最適化の”諦め” そこに見るリクガメの可能性
sanposhiho
2
2k
Don't try to tame your autoscalers, tame Tortoises!
sanposhiho
0
740
メルカリにおけるZone aware routing
sanposhiho
2
1.2k
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
sanposhiho
1
510
メルカリにおけるプラットフォーム主導のKubernetesリソース最適化とそこに生まれた🐢の可能性
sanposhiho
1
900
MercariにおけるKubernetesのリソース最適化のこれまでとこれから
sanposhiho
8
4.1k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Speed Design
sergeychernyshev
32
1k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Rails Girls Zürich Keynote
gr2m
95
14k
Facilitating Awesome Meetings
lara
54
6.5k
Thoughts on Productivity
jonyablonski
69
4.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
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