name: code-tdd
description: >-
精緻化されたタスク仕様(task__.md)に基づき、TDD でコードを実装する時に使用する。
RED → GREEN → REFACTOR のサイクルで実装し、タスクの検証ゲートを満たす。coder サブエージェントが使用する。
user-invocable: false
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, TodoWrite]
TDD 実装ワークフロー
coder サブエージェントが従う実装ワークフローと TDD 方法論を定義する。
スコープ内に留まり、レビューは別エージェント(reviewer)が担う。
準備
実装対象のタスク ID(task_<phase_num>_<task_num> 形式)とフィーチャー名を確認する。
未指定の場合は呼び出し元へ確認する。
次に、対象の .artifacts/features/<feature>/phases/<phase>/task_<phase_num>_<task_num>.md を読み込む。
存在しない場合は停止し、先に refiner でタスクを精緻化するよう呼び出し元へ伝える。
フェーズ 1: タスクの把握
task_<phase_num>_<task_num>.mdの<action>/<files>/<verify>/<done>と受け入れ基準を把握する。- 必要に応じて
.artifacts/features/<feature>/specification.mdの関連箇所、.artifacts/project_architecture.mdを参照する。 - 対象ファイル周辺の既存コードを読み、命名規約・パターン・既存テストを把握する。
.artifacts/research/*.mdが存在し関連する場合は読み込み、実装へ反映する。
フェーズ 2: TDD で実装
task_<phase_num>_<task_num>.md のスコープ内で、次の RED → GREEN → REFACTOR サイクルに従って実装する。
スコープ外の変更や機能追加はしない。
Step 1: RED — 失敗するテストを書く
期待する振る舞いを記述したテストを書き、意図した理由で失敗することを確認する。 RED が確認されるまでプロダクションコードには触れない。
Step 2: GREEN — 最小限の実装を書く
失敗しているテストをパスさせるために必要な実装だけを行う。再実行して GREEN を確認する。
Step 3: REFACTOR — コードを改善する
重複を除去し、命名を改善し、最適化する。すべてのテストが GREEN のまま維持されること。
Step 4: カバレッジ確認
カバレッジレポートを実行し、最低目標(80%)を達成していることを確認する。
フェーズ 3: 検証
task_<phase_num>_<task_num>.md の <verify> に指定された手段を実行し、満たされるまで修正する。
加えて、対象言語のスキル(base-python など)が定めるテストと lint の検証ゲートを実行し、違反を 0 件にする。
- テストランナー・カバレッジ・lint の具体的なコマンドは言語スキルを参照する。 ワークフローとしてのスコープは「ゲートを実行し満たすこと」であり、言語固有のコマンドは持たない。
- lint は編集ごとのフックでは実行されない(フックは format のみ)。このゲートで必ず lint を通すこと。
フェーズ 4: 完了の扱い
<verify> が満たされた時点で本スキル(TDD 実装方法論)の責務は完了とする。
成果物の永続化(サマリー追記・state.db 記録)・Git コミット・呼び出し元への報告は本スキルでは行わない。
これらは呼び出し元である coder エージェント定義の「完了時の必須ステップ」が担う。
カバーすべきエッジケース
- Null / 未入力 の入力
- 空 の配列や文字列
- 無効な型: 期待する型や形式外の値
- 境界値(最小 / 最大)
- エラーパス(ネットワーク障害・外部サービスエラー)
- 並行操作(該当する場合のレースコンディション)
- 振る舞いをテストする: 実装の詳細(内部状態)ではなく、外から観察できる振る舞いを検証する。
- テスト間を独立に保つ: 共有可変状態を持ち込まず、各テストが単独で実行できるようにする。
- 意味のあるアサーションを書く: 検証対象の振る舞いを明確に表現するアサーションを用いる。
- 外部依存を分離する: データベース・API・サービスはモックまたはフィクスチャで切り離す。
- 言語スキルと組み合わせる: テストコマンド・構造・スタイルを言語に合わせるため、
base-pythonなどの 言語スキルと併用する。