コンテンツにスキップ

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

Pants とは

ビルドシステムのPantsで、変更したファイルと、その変更の影響を受けるファイルだけをテストする方法を紹介する。業務では Pants でモノレポを管理しており、CI とローカルで比較対象のコミットを使い分けている。 Pants の特徴は以下。

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

差分テスト

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

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

業務では CI 上とローカルの pre-commit で--changed-since=HEADと使い分けをしている。

--changed-dependees=transitiveを渡すと、変更したファイルを直接・間接に使うターゲットもテスト対象へ追加できる。 全体のテストから差分テストをすることでテスト時間が短くなり、GitHub Actions のキャッシュサイズも小さくなった。 差分テストだけだと不安なので、cron で全体のテストを定期的に実行し、全体が壊れていないかも確認している。

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