Claude Codeの/loopでテストコード量産を安全に回す方法
はじめに
テストコードの追加は、Claude Codeに任せやすい作業のひとつです。
既存のテスト規約を読み、似たパターンを増やし、境界値や異常系を補う作業は、AIエージェントと相性がよい場面があります。
一方で、テストコードの「量産」は危険でもあります。
意味の薄いテスト、壊れやすいモック、実装詳細に依存したアサーション、似たようなケースの重複が増えると、保守コストだけが上がります。
この記事では、Claude Codeの /loop を使ってテストコードを増やすときに、量ではなくレビュー可能な品質を保つ方法を整理します。
テスト量産で先に決めるべきこと
/loop でテストを増やす前に、次の3つを決めます。
- 対象範囲
- 増やしたいテストの種類
- 採用しないテストの条件
たとえば、次のように指定します。
/loop 20m Add tests for src/billing.
Rules:
- Add at most 3 meaningful test cases per iteration.
- Prefer behavior-based tests over implementation-detail tests.
- Run the related test command after edits.
- Do not change production code unless a test exposes a real bug and asks for confirmation.
- Stop when no high-value missing cases remain.「たくさん追加して」ではなく、「1回のループで最大3件」と制限するのがポイントです。
テストは量が増えるほどレビューが難しくなるため、小さなバッチで増やします。
量産すべきテストと、増やしてはいけないテスト
AIにテスト追加を任せると、書きやすいテストから増えがちです。
しかし、レビューアーが見たいのは、行数ではなくリスクを下げるテストです。
| 増やす価値が高いテスト | 増やすべきでないテスト |
|---|---|
| 境界値 | 実装の private 関数だけを固定するテスト |
| 異常系 | 同じ正常系を名前だけ変えたテスト |
| 権限や入力検証 | モックの呼び出し回数だけを確認するテスト |
| 回帰バグの再現 | スナップショットだけが増えるテスト |
| 外部I/Oの失敗時 | 仕様を説明しない巨大なfixture依存テスト |
/loop に任せるなら、増やしてよいテストだけでなく、増やしてはいけないテストも明記します。
テスト追加用コマンドを作る
チーム運用では、テスト追加のルールをコマンド化しておくと安定します。
---
description: Add focused tests for a target area
argument-hint: [target path or feature]
---
Add tests for: $ARGUMENTS
Rules:
- Inspect existing tests near the target first.
- Follow existing naming, fixture, and assertion style.
- Add a small batch only: up to 3 test cases.
- Prefer behavior and contract tests.
- Avoid tests that only mirror implementation details.
- Run the narrowest relevant test command.
- Report added cases, verification result, and remaining gaps.このコマンドは、テストの「生成」ではなく、テスト追加のレビュー基準を固定するためにあります。
CLAUDE.mdにテスト方針を書く
テスト量産を安定させるには、プロジェクトの CLAUDE.md にテスト方針を書いておきます。
## Testing Policy
- Prefer behavior-based tests that describe user-visible or API-visible outcomes.
- Keep tests deterministic; avoid real network, clock, and filesystem dependencies unless explicitly required.
- Reuse existing fixture patterns.
- Do not add broad snapshots unless the reviewed area already uses snapshot testing.
- When changing behavior, add tests for normal, boundary, and failure cases.この方針がないと、AIは近くのテストを真似るだけになります。
近くのテストが良いとは限らないため、チームとしての判断基準を先に与えます。
ループごとの成果物を固定する
テスト追加の /loop では、毎回の成果物を次の形式にします。
## Added Tests
- Case:
- Risk covered:
- File:
## Verification
- Command:
- Result:
## Remaining Gaps
- High-value cases not yet covered:
- Cases intentionally skipped:
## Review Notes
- Possible brittleness:
- Production code changes:レビューアーにとって重要なのは、「何件増えたか」ではありません。
どのリスクを減らしたかが分かることです。
/loopでテストを増やす実務フロー
実務では、次の順番で回すと安全です。
- 対象ディレクトリとテスト方針を指定する
- 既存テストを読ませる
- 1回のループで少数のテストだけ追加する
- 狭いテストコマンドを実行する
- 追加したテストの価値を報告させる
- 重複や壊れやすさを人間がレビューする
- 必要なら次のループを続ける
特に、5番目の「価値の報告」が重要です。
テストの価値を説明できないケースは、量産しても保守負債になりやすいからです。
レビューで見るべき観点
AIが追加したテストコードをレビューするときは、次を確認します。
- 仕様ではなく実装詳細を固定していないか
- 既存テストと重複していないか
- fixtureが過剰に大きくなっていないか
- モックが実際の契約から離れていないか
- テスト名から意図が読めるか
- 失敗したときに原因が分かるアサーションになっているか
- テスト実行時間が不必要に伸びていないか
/loop で増えたテストは、AIが書いたから危険なのではありません。
短時間で増えるため、人間が意図を確認しないまま残りやすいことが危険です。
PRコメントに変換する例
@Reviewer: テストケースは増えていますが、現在の追加分は内部メソッドの呼び出し順序を固定しているため、仕様変更がなくてもリファクタで壊れやすく見えます。
この機能で保証したいのは請求金額の丸め結果なので、外部から見える戻り値ベースのテストに寄せたほうが保守しやすそうです。このように、テストの数ではなく、テストが固定している責務をレビューします。
まとめ
/loop を使うと、テストコードは簡単に増やせます。
しかし、価値の低いテストを大量に増やすと、品質ではなく保守コストが上がります。
- 1回のループで追加するテスト数を制限する
- 増やしてよいテストと避けるべきテストを明記する
CLAUDE.mdにチームのテスト方針を書く- 毎回、どのリスクを減らしたか報告させる
- 人間はテストの数ではなく、固定している仕様をレビューする
テストコード量産で目指すべきなのは、カバレッジの見た目を増やすことではありません。
変更時に壊れてほしい場所で、正しく壊れるテストを増やすことです。