コンテンツにスキップ

Pants で差分テストをやってみた

Pants とは

業務でビルドシステムのPantsを使ってモノレポを管理している。 Pants の特徴は以下。

  • 明示的な依存関係モデリング。
  • きめの細かい無効化。
  • 共有結果のキャッシュ。
  • 同時実行。
  • リモート実行。
  • 複数のツールと言語用の統一されたインターフェイス。
  • プラグイン API による拡張性とカスタマイズ性。

差分テスト

./pants test :: で全体のテストを実行でき、次のコマンドで差分テストを実行できる。

1
2
3
4
./pants \
  --changed-since=origin/main \
  --changed-dependees=transitive \
  check test

業務では CI 上とローカルの pre-coomit で--changed-since=HEADと使い分けをしている。 --changed-dependees=transitiveのオプションを渡すと依存しているソースを自動で検知してテストしてくれる。 全体のテストから差分テストをすることでテスト時間が短くなり、GitHub Actions のキャッシュサイズも小さくなった。 差分テストだけだと不安なので cron で全体のテストを定期的に実行して全体が壊れていないか確認している。

backend.aiのレポジトリが Pants を使っているので参考になる。