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

monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / fast...

Avatar for convto convto
October 06, 2025

monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos

Go Bash #2 で喋った内容です
https://layerx.connpass.com/event/367057/

Avatar for convto

convto

October 06, 2025
Tweet

More Decks by convto

Other Decks in Programming

Transcript

  1. 自己紹介 © LayerX Inc. convto (よみは「こんぶと」です) LayerX (2023-03 -) バクラク事業部アカウント基盤開発部

    ID チーム 2023-03 ~ 2023-09 まで申請/経費精算などのプロダクト担当 2023-09 くらいからID基盤の開発に関わっています 2
  2. どうやって差分テストをやるか B'' を変更したら A / B / A' / D'

    / B'' だけテスト実行されたい © LayerX Inc. 14
  3. パッケージ単位の差分解決ができている https://pkg.go.dev/golang.org/x/tools/go/packages にドキュメントあるので気になる方はぜひ! © LayerX Inc. パッケージ単位の import graph を構築

    x/tools/go/packages を利用して import 関係を読み込み、木に整形 変更パッケージからから到達可能なパッケージをリスト テスト実行 16
  4. 処理の流れざっくり © LayerX Inc. 変更の特定 GitHub CLI を使って PR で変更されたファイルを取得

    影響分析 静的解析を使ってパッケージ単位の依存グラフを作成 影響を受けるパッケージを特定 選択的テスト実行 変更によって影響を受けるパッケージのテストのみを実行 18
  5. 関数単位の依存解決 © LayerX Inc. パッケージとしては依存してても、実際の変更箇所の処理には依存していないケースは 多々ある 関数呼び出しの call graph みたいなのを作って依存解決すれば優勝できそう

    テストも実際の関数呼び出しをしてるので、テスト関数自体もそのグラフに繋がってる かを見れば テスト実行の必要性がマークできる 29
  6. 関数単位の依存解決 今の状態 © LayerX Inc. PoC はできて、動くものが作れることはわかった x/tools/x/packages は AST

    も要求できるので、それを受け取る ガバっと見て関数呼び出しの依存解決する が、課題も見えてきている 素朴な解析、探索だとパフォーマンスの問題がありそう Go 本体がどうやって依存解決してるかなど参考にしたい PoC は関数だけだったが type / interface / const / var など公開されてる識別子も検証必要 30