Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

sanposhiho
November 13, 2021
1.8k

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

Go Conference 2021 Autumn
https://gocon.jp/2021autumn/

sanposhiho

November 13, 2021
Tweet

More Decks by sanposhiho

Transcript

  1. Kensei Nakada @sanposhiho

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


    View Slide

  2. 中田 健誠 / Kyoto Uni (4th year)

    普段はバックエンドエンジニアをしてます


    Twitter: さんぽし (@sanpo_shiho)

    GitHub: @sanposhiho


    自己紹介


    View Slide

  3. golang/mock(GoMock)とは


    View Slide

  4. golang/mock(GoMock)とは

    > GoMock is a mocking framework for the Go programming language.


    Go の公式Orgで開発されている”モックのためのフレームワーク”


    View Slide

  5. GoMockに関する詳しい話

    このトークでは細かい使用方法は

    扱いません。


    詳しくはZennの記事を🙏 → 


    View Slide

  6. Kensei Nakada @sanposhiho

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


    View Slide

  7. GoMock でのモック生成

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


    View Slide

  8. GoMockでのモック生成

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


    View Slide

  9. GoMock でのモック生成

    interfaceを元にモックを生成する

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


    View Slide

  10. GoMock でのモック生成

    interfaceを元にモックを生成する

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

    → mockgenコマンドをどこかに置いておく必要がある


    View Slide

  11. go generateでのGoMock管理

    go generateを用いて、管理されることが多い。


    ↓のように書いておいて で全mockgenを一斉に実行


    View Slide

  12. go generateでのGoMock管理

    この管理方法だといくつかの解決できない問題が存在する


    ● はコマンドが一つ一つ実行される = 時間がかかる…

    ● は常に全てのmockgenを実行する

    ● モックが最新のインターフェースを元に生成されているかわからない


    View Slide

  13. sanposhiho/gomockhandler


    View Slide

  14. gomockhandler

    go generate以外でのGoMockのモック管理を目指したライブラリ


    一つのファイルを通してプロジェクト内の全てのモックの管理を行う。


    View Slide

  15. モックの生成の効率化①

    gomockhandlerではモックを並行に生成している。


    この効率化施策のみで、複数のモックの生成が50~60%早くなる(雑な計測)


    View Slide

  16. モックの生成の効率化②


    更新の必要がないモックの生成を自動でスキップする

    = 不必要なモックの生成は実行されない

    (※ Source modeのみ対応)


    例) 

    interface A, Bのみを更新 → A, Bのためのモックの更新のみが実行される


    View Slide

  17. モックが最新かどうか確認

    モックが最新のインタフェースを元に生成されているかを確認できる

    CIなどで使用することでモックの更新忘れを防ぐことができる


    View Slide

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


    View Slide

  19. go generate管理からの移行の容易性

    go generateでのGoMock管理から簡単に移行できるようにデザイン


    プロジェクト内のgo generateを全て

    mockgen    gomockhandler -config=/path/to/config.json

    に置換するだけでgomockhandlerへの移行が完了する。 


    View Slide

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

    20

    View Slide