Slide 1

Slide 1 text

Kensei Nakada @sanposhiho
 golang/mockでのモック生成と管理の "より 良い" アプローチ


Slide 2

Slide 2 text

中田 健誠 / Kyoto Uni (4th year)
 普段はバックエンドエンジニアをしてます
 
 Twitter: さんぽし (@sanpo_shiho)
 GitHub: @sanposhiho
 
 自己紹介


Slide 3

Slide 3 text

golang/mock(GoMock)とは


Slide 4

Slide 4 text

golang/mock(GoMock)とは
 > GoMock is a mocking framework for the Go programming language.
 
 Go の公式Orgで開発されている”モックのためのフレームワーク”


Slide 5

Slide 5 text

GoMockに関する詳しい話
 このトークでは細かい使用方法は
 扱いません。
 
 詳しくはZennの記事を🙏 → 


Slide 6

Slide 6 text

Kensei Nakada @sanposhiho
 golang/mockでのモック生成と管理の "より 良い" アプローチ


Slide 7

Slide 7 text

GoMock でのモック生成
 mockgenコマンドを使用してinterfaceを元にモックを生成する


Slide 8

Slide 8 text

GoMockでのモック生成
 mockgenコマンドを使用してinterfaceを元にモックを生成する
 


Slide 9

Slide 9 text

GoMock でのモック生成
 interfaceを元にモックを生成する
 → interfaceが更新されるとモックを再生成(更新)する必要がある


Slide 10

Slide 10 text

GoMock でのモック生成
 interfaceを元にモックを生成する
 → interfaceが更新されるとモックを再生成(更新)する必要がある
 → mockgenコマンドをどこかに置いておく必要がある


Slide 11

Slide 11 text

go generateでのGoMock管理
 go generateを用いて、管理されることが多い。
 
 ↓のように書いておいて で全mockgenを一斉に実行
 


Slide 12

Slide 12 text

go generateでのGoMock管理
 この管理方法だといくつかの解決できない問題が存在する
 
 ● はコマンドが一つ一つ実行される = 時間がかかる…
 ● は常に全てのmockgenを実行する
 ● モックが最新のインターフェースを元に生成されているかわからない


Slide 13

Slide 13 text

sanposhiho/gomockhandler


Slide 14

Slide 14 text

gomockhandler
 go generate以外でのGoMockのモック管理を目指したライブラリ
 
 一つのファイルを通してプロジェクト内の全てのモックの管理を行う。


Slide 15

Slide 15 text

モックの生成の効率化①
 gomockhandlerではモックを並行に生成している。
 
 この効率化施策のみで、複数のモックの生成が50~60%早くなる(雑な計測)


Slide 16

Slide 16 text

モックの生成の効率化②
 
 更新の必要がないモックの生成を自動でスキップする
 = 不必要なモックの生成は実行されない
 (※ Source modeのみ対応)
 
 例) 
 interface A, Bのみを更新 → A, Bのためのモックの更新のみが実行される


Slide 17

Slide 17 text

モックが最新かどうか確認
 モックが最新のインタフェースを元に生成されているかを確認できる
 CIなどで使用することでモックの更新忘れを防ぐことができる


Slide 18

Slide 18 text

「使ってみたいけど、移行めんどくさそう」🤔


Slide 19

Slide 19 text

go generate管理からの移行の容易性
 go generateでのGoMock管理から簡単に移行できるようにデザイン
 
 プロジェクト内のgo generateを全て
 mockgen    gomockhandler -config=/path/to/config.json
 に置換するだけでgomockhandlerへの移行が完了する。 


Slide 20

Slide 20 text

ご静聴ありがとうございました 
 20