Gitの変更から関連テストと手動確認箇所を1コマンドで洗い出すPowerShellツールを作った
Gitで変更を入れたあと、「どのテストを確認すればいいか」を毎回探すのは、思った以上に手間がかかります。
変更したファイル、既存のテスト、設定ファイル、手動で確認すべき画面を、diffとリポジトリの構成から整理する作業です。しかも、テストが見つかったからといって、その変更が十分に検証されているとは限りません。
作ったもの
この作業を機械的に整理する小さなPowerShellツール regression-impact-verifier を作りました。
GitHub: iwadjp/regression-impact-verifier
何をするツールか
- Gitの変更ファイルを取得する
- 既存testのファイル名や内容から、deterministicに関連候補を探す
- 設定変更など、手動smoke確認を検討すべき箇所を整理する
- 判定理由とevidenceを、毎回同じ形式で出力する
LLMによる推測は使わず、Git metadata、ファイル名、testのパスと内容、package.json のscript名だけを読みます。testそのものは自動実行しません。
classification
RELATED_TEST_FOUND— 関連しそうな既存testのfilename/content relationが見つかったNO_RELATED_TEST_FOUND— source-likeな変更に対してdeterministicな関連が見つからなかったMANUAL_SMOKE_RECOMMENDED— 設定など、人間による確認を推奨する変更UNKNOWN— 推測を避けて判定しなかった変更
RELATED_TEST_FOUNDの意味
ここは重要です。RELATED_TEST_FOUND は、関連しそうな既存testが見つかったという意味だけです。
RELATED_TEST_FOUND ≠ covered / safe / regression-protected
実際にそのtestが変更箇所を検証しているか、testが十分か、runtimeで安全かは、このツールからは分かりません。coverage測定やtest adequacyの保証ではなく、レビュー前の候補整理です。
実repoでのdogfood
現在の開発repoで、sourceとtestを同時に変更したcommit、source中心のcommit、docs-only、metadata中心、複数module変更の実commitを確認しました。working treeと変更なしのケースも含めています。
評価は GOOD 4 / MIXED 3 / BAD 0 でした。related test候補を探す手作業は減りましたが、候補が広すぎる場合や、semanticなcoverage判断は人間に残ります。
dogfoodで見つかったbug
- 内部worktreeのtestを重複して拾っていた
test/fixturesのJSON/HTMLをtestと誤認していた- clean stateで件数がnullになる可能性があった
- GitのCRLF warningを失敗として扱う可能性があった
- suggested npm commandを自動実行し得る設計だった
これらはdogfood中に修正しました。現在のツールはsuggested commandを表示するだけで、自動実行しません。
使い方
リポジトリのルートで実行します。
.\verify-regression-impact.ps1
.\verify-regression-impact.ps1 -BaseRef HEAD~1
通常はworking treeの変更を確認し、-BaseRef を指定すると BaseRef..HEAD の変更を確認します。
Limitations
- coverageは測定しない
- test adequacyを保証しない
- runtime behaviorやproduct riskを推測しない
- false negativeや、広すぎるrelated candidatesが残ることがある
- dynamicなimportや実行経路を完全には追跡しない
Privacy / Safety
- Git状態を変更しないread-only tool
- testを自動実行しない
- test生成やLLM推論を行わない
- source code全体をreportへコピーしない
- private-dataの内容をtest discoveryで読まない
GitHub
ソースコードとREADMEはGitHubで公開しています。
https://github.com/iwadjp/regression-impact-verifier
変更影響の最終判断や、実際のregression testの実行は、引き続き人間のレビューで行います。