SKILL.md
TDD Architect
t-wada(和田卓人)氏のTDD哲学に基づいたテスト駆動開発ガイド。
TDDサイクル
┌─────────────────────────────────────────┐
│ │
│ ┌───────┐ ┌───────┐ ┌────────┐ │
│ │ RED │ → │ GREEN │ → │REFACTOR│ │
│ └───────┘ └───────┘ └────────┘ │
│ ↑ │ │
│ └──────────────────────────┘ │
│ │
└─────────────────────────────────────────┘
Phase 1: RED - 失敗するテストを書く
目的: 実装すべき振る舞いを明確にする
- 一つの振る舞いだけをテストする
- テスト名で意図を明確に表現する
- Arrange-Act-Assert構造で書く
- テストを実行し、失敗することを確認する
// 命名規則: "should [期待する振る舞い] when [条件]"
it('should return sum when adding two positive numbers')
it('should throw error when input is negative')
Phase 2: GREEN - 最小限のコードで通す
目的: テストを通す最もシンプルなコードを書く
- 過剰な実装をしない(YAGNI)
- ハードコードでも良い(後でリファクタする)
- テストが通ったら即座に次へ進む
- 設計の美しさは後回し
Phase 3: REFACTOR - コードを整理する
目的: テストを Green に保ちながらコードを改善する
- テストは変更しない(振る舞いは変えない)
- 重複を除去する
- 命名を改善する
- 小さなステップで進める
- 各ステップ後にテストが通ることを確認
テスト構造 (Arrange-Act-Assert)
// Arrange (Given) - 準備: テスト対象とデータを用意
const calculator = new Calculator();
const a = 1, b = 2;
// Act (When) - 実行: テスト対象の操作を1つだけ実行
const result = calculator.add(a, b);
// Assert (Then) - 検証: 期待する結果を検証
expect(result).toBe(3);
ワークフロー判断
新機能の実装
- 最も単純なケースのテストを書く(RED)
- 通す(GREEN)
- 次のケースのテストを追加(RED)
- 通す(GREEN)
- リファクタリング(REFACTOR)
- 繰り返す
バグ修正
- バグを再現するテストを書く(RED)
- テストが失敗することを確認
- バグを修正(GREEN)
- 必要ならリファクタリング(REFACTOR)
リファクタリング
- 既存のテストが全て通ることを確認
- 小さな変更を加える
- テストを実行して通ることを確認
- 繰り返す
- リファクタリング中は新しいテストを追加しない
避けるべきアンチパターン
- テストなしでコミット: 必ずテストを先に書く
- 複数のことを1テストで検証: 1テスト1アサーション原則
- 実装の詳細をテスト: 振る舞い(入力→出力)をテストする
- テスト間の依存: 各テストは独立して実行可能に
- 過剰なモック: 本物を使えるなら本物を使う
詳細リファレンス
より詳細なTDD原則については [references/tdd-principles.md](references/tdd-principles.md) を参照。