mcpField
T
tdd-workflow

tdd-workflow

github.com/travisjneumanテスト・品質106137 回インストール今日更新
リポジトリ

tdd-workflow について

テストを明示的に求められた開発タスク向けに、RED-GREEN-REFACTOR に沿ったテスト駆動開発を案内するスキルです。テスト設計、分類、カバレッジの指針も含みます。

主な機能

  1. 01RED-GREEN-REFACTOR サイクル
  2. 02失敗するテストを先に書く指針
  3. 03AAA テスト構造
  4. 04単体・統合・エンドツーエンドテストの指針
  5. 05境界条件とカバレッジの指針

活用シーン

  1. 01依頼に応じて機能のテストを作成
  2. 02適切な単体テストや統合テストの選択
  3. 03境界値やエラー条件の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/travisjneuman/.claude --skill tdd-workflow

インストール後、Claude Code で/tdd-workflowを入力して読み込まれたか確認します。

詳細

テスト駆動開発(TDD)ワークフロー

ユーザーが明示的にテストを求めた場合にのみ、このスキルを使用してください。それ以外の場合は、差分と変更が加わるコードを確認して検証してください。

テストを設計と実装の指針とする、規律ある開発アプローチです。

TDD のマントラ

「失敗するテストなしに、コードを1行も書いてはいけません。」

RED-GREEN-REFACTOR サイクル

RED フェーズ:失敗するテストを書く

目標:実装の前に、期待される動作を定義します。

ルール:

  1. 失敗する最小のテストを書く
  2. テストは正しい理由で失敗しなければならない
  3. テストで意図を明確に表現する
  4. まだ実装を書かない

例:

// RED: Test the behavior we want
describe("Calculator", () => {
  it("should add two numbers", () => {
    const calc = new Calculator();
    expect(calc.add(2, 3)).toBe(5);
  });
});

// Run: npm test
// Result: FAIL - Calculator is not defined
// This is RED ✓

チェックリスト:

  • テストが書かれている
  • 実行するとテストが失敗する
  • 失敗メッセージが明確である
  • テスト名で期待される動作が説明されている

GREEN フェーズ:テストを通す

目標:テストを通すための最小限のコードを書きます。

ルール:

  1. 動作する最もシンプルな方法を選ぶ
  2. 余分な機能を追加しない
  3. 最適化しない
  4. テストを通すことだけに集中する

例:

// GREEN: Minimum implementation to pass
class Calculator {
  add(a: number, b: number): number {
    return a + b; // Simplest thing that works
  }
}

// Run: npm test
// Result: PASS
// This is GREEN ✓

チェックリスト:

  • テストが成功する
  • 余分なコードを追加していない
  • 実装が最小限である

REFACTOR フェーズ:コードを改善する

目標:テストが成功する状態を保ちながら、コードを整理します。

ルール:

  1. テストが成功している場合にのみリファクタリングする
  2. 変更のたびにテストを実行する
  3. 動作ではなく設計を改善する
  4. 小さく段階的に変更する

リファクタリングの例:

  • メソッドを抽出する
  • 分かりやすい名前に変更する
  • 重複を削除する
  • パフォーマンスを改善する
  • 型やドキュメントを追加する

チェックリスト:

  • テストが引き続き成功する
  • コードがより読みやすくなっている
  • 動作に変更がない
  • 次の RED に進む準備ができている

実践での TDD

新機能の開始
1. Write high-level acceptance test (may not run yet)
2. Write first unit test (RED)
3. Implement minimum code (GREEN)
4. Refactor if needed (REFACTOR)
5. Repeat 2-4 until feature complete
6. Verify acceptance test passes
テストの構成(AAA パターン)
it("should [behavior] when [condition]", () => {
  // Arrange - Set up test data and dependencies
  const user = createTestUser({ role: "admin" });
  const service = new UserService();

  // Act - Execute the code under test
  const result = service.getPermissions(user);

  // Assert - Verify expected outcomes
  expect(result).toContain("delete");
  expect(result).toContain("edit");
});
テストの命名規則
[Unit]_[Scenario]_[ExpectedResult]

例:

  • add_withPositiveNumbers_returnsSum
  • login_withInvalidPassword_throwsAuthError
  • getUser_whenNotFound_returnsNull

テストのカテゴリ

単体テスト
  • 単一の関数/クラスを分離してテストする
  • すべての依存関係をモックする
  • 高速(テストあたり <10ms)
  • 開発中は常に実行する
統合テスト
  • 複数のコンポーネントを組み合わせてテストする
  • 実際のデータベースを使用する(テスト用インスタンス)
  • 低速だが、より現実に近い
  • コミット前に実行する
エンドツーエンドテスト
  • UI を通してシステム全体をテストする
  • 最も低速だが、最も現実に近い
  • CI/CD パイプラインで実行する
  • 重要なユーザーパスを網羅する

TDD のベストプラクティス

DO:
  • 最もシンプルなケースから始める
  • 一度に1つのテストを書く
  • テストを独立させる
  • 実装ではなく動作をテストする
  • 説明的なテスト名を使う
  • テストが成功するたびにコミットする
DON'T:
  • テストより先にコードを書く
  • プライベートメソッドを直接テストする
  • フレームワークのコードをテストする
  • 実装に過度に適合したテストを書く
  • リファクタリングのフェーズを省略する

テストするエッジケース

必ずテストしてください:

  • 空の入力(null、undefined、[]、{}、'')
  • 境界値(0、-1、MAX_INT、最小/最大の日付)
  • エラー条件(ネットワーク障害、無効な入力)
  • 権限の境界
  • 同時アクセス
  • Unicode/特殊文字

テストカバレッジのガイドライン

指標最低値目標
ステートメント70%85%
分岐70%80%
関数80%90%
行70%85%

カバレッジは指標であり、目標ではありません。カバレッジが100%でも、バグがないとは限りません。


クイックリファレンス

RED    → Write failing test (define behavior)
GREEN  → Minimum code to pass (make it work)
REFACTOR → Clean up (make it right)
COMMIT → Save progress (make it permanent)

よくある TDD の間違い

間違い問題解決策
実装をテストするテストが壊れやすい動作/結果をテストする
テストが大きすぎるデバッグが難しい小さく、焦点を絞ったテストにする
状態を共有するテストが不安定になる各テストを分離する
テストが遅いテストが省略される外部依存関係をモックする
明白なコードをテストする時間を浪費するロジックに集中する

コメント