🛠️ ドキュメントだけ書いて実装が崩れる問題
ステアリングを作成しただけでは実装品質は保証されません。CTS-EC で繰り返し起きた失敗は次の 3 つです。
- tasklist.md が放置される(TodoWrite だけ更新して満足する)
- Phase 完了時の検証をスキップして次フェーズに進み、バグを持ち越す
- 完了ステアリングがアクティブに残り続ける(ACTIVE.md と整合しない)
実装・完了フェーズは「ドキュメントと現実を同期し続ける」運用規律そのものです。本記事ではシリーズ第 4 回として、Phase 0 から /steering-complete までの実装ワークフローを解説します。
🔄 TodoWrite と tasklist.md は「同時更新」が必須
最も重要なルール:タスク完了時は TodoWrite と tasklist.md を同時に Edit する。片方だけの更新は禁止です。
// 1. TodoWrite 更新
TodoWrite([
{"content": "1.1a: OAuth テスト", "status": "completed", ...},
{"content": "1.1b: OAuth 実装", "status": "in_progress", ...},
])
// 2. tasklist.md 更新(必須・同時)
Edit(
file_path: ".steering/20260420-yahoo-oauth/tasklist.md",
old_string: "| 1.1a | OAuth テスト | ❌ |",
new_string: "| 1.1a | OAuth テスト | ✅ |"
)
なぜ両方必要か
| ドキュメント | 役割 | 寿命 |
|---|---|---|
TodoWrite | セッション内の補助メモ、in_progress 可視化 | セッション内のみ |
tasklist.md | 正式ドキュメント、/resume や振り返りの入力 | ステアリング完了まで |
TodoWrite だけ更新すると、セッションが切れた瞬間に進捗が消えます。tasklist.md だけ更新すると、セッション内の in_progress が見えずタスク切替ミスが起こります。
🧩 実装フロー:Phase 0 → Phase N → 完了
実装は以下の順序で進みます。Phase 0 は固定です。
Phase 0: 参照実装レビュー
↓
Phase 1: 実装ループ(タスク単位で tasklist + TodoWrite 同時更新)
↓
Phase 1 検証(/test + /check-test-quality + implementation-validator)
↓
Phase 2: 実装ループ
↓
Phase 2 検証
↓
最終検証 → /steering-complete
Phase 0 の 3 タスクがすべて ✅ になるまで Phase 1 の実装コードを書きません。
🧪 Phase 完了時の 3 種検証ゲート
Phase の最終タスクを ✅ にしたら、次 Phase に進む前に 3 つの検証を必ず回します。
| # | 検証 | サブエージェント/コマンド | 目的 |
|---|---|---|---|
| 1 | テスト実行 | /test(test-runner 経由) | 合格判定 |
| 2 | テスト品質 | /check-test-quality(test-quality-checker 経由) | 型別網羅性・分岐カバレッジ |
| 3 | 実装品質 | implementation-validator | 7 観点 + TDD/DDD 準拠 |
サブエージェント経由にする理由は、 メインエージェントでテスト出力を直接読まないため です。コンテキスト消費を避けつつ、失敗時のみメインに戻します。
実装完全性チェックも必須
検証の一環として、変更ファイルに対し以下の grep を必ず実行します。
Grep "TODO|FIXME|HACK|TBD" 変更対象
Grep "NotImplementedException|NotImplementedError" 変更対象
0 件が Phase 完了条件です。1 件でもあれば修正してから次 Phase へ進みます。「方向性は合っている」で PASS にするのは禁止です。
📥 フェーズ検証記録テーブル
tasklist.md の先頭に以下の表を置き、検証結果を記録します。
| Phase | /test | validator | 完了日 |
|---|---|---|---|
| Phase 0 | - | - | 2026-04-18 |
| Phase 1 | ✅ 全パス | ✅ PASS | 2026-04-20 |
| Phase 2 | ⚠️ 1 件失敗 | ❌ FAIL | - |
/resume 時にこの表を確認し、未実施の検証があれば提案します。
📦 フェーズ完了時のアーカイブで tasklist.md を軽量化
ステアリングが進むと tasklist.md が肥大化し、/resume 時のコンテキスト消費が増えます。Phase 完了時に tasklist-archive.md へ詳細を移動し、tasklist.md には進捗サマリー 1 行だけ残します。
## 進捗サマリー
| Phase | 内容 | 状態 | 完了 |
| ------- | ------------------ | --------- | ------ |
| Phase 1 | OAuth コア実装 | ✅ 完了 | 10/10 |
| Phase 2 | 店舗連携・移行 | 🟡 進行中 | 3/8 |
> 詳細: [tasklist-archive.md](./tasklist-archive.md)
tasklist.md のサイズ目安は 3 KB 以下。超えたら即アーカイブ対象です。
📰 進捗報告は progress-reports/ に月次で
CTS-EC では docs/progress-reports/YYYY-MM-DD.md にステークホルダー向けの進捗報告を 月 2 回ペース で残しています。業務課題・対象件数・完了率を明文化することで、ステアリングの成果がそのまま顧客価値として可視化されます。
progress-reports/
├── 2026-01-26.md
├── 2026-02-06.md
├── 2026-02-18.md
├── 2026-03-13.md
├── 2026-03-20.md
├── 2026-04-03.md
└── 2026-04-15.md
テンプレートは .claude/templates/progress-template.md にあります。
🏁 /steering-complete の 9 ステップ
全タスク ✅ + 最終検証 PASS になったら /steering-complete を実行します。
| Step | 内容 |
|---|---|
| 1 | .steering/ACTIVE.md から対象作業を特定 |
| 2 | tasklist.md 最終確認(未完了なら理由を記録) |
| 3 | 完了条件チェック(テスト合格 / テスト品質 / 受入テスト突合) |
| 4 | git mv .steering/YYYYMMDD-xx/ → .steering/archive/YYYYMMDD-xx/ |
| 5 | roadmap.md 更新(該当フェーズのみ) |
| 6 | roadmap-archive.md へ重要な完了タスクを追記 |
| 7 | chore(steering): complete xxx → archive/ で Git コミット |
| 8 | Serena メモリ保存候補の提示(半自動) |
| 9 | 完了レポート作成 |
受入テスト消化ゲート
Step 3 では requirements.md の AT-*(受入テストシナリオ)と実装テストを突合 します。未消化シナリオがあれば完了を保留します。これがないと「テストは通っているが受入条件を満たさない」状態が放置されます。
🗄️ アーカイブ運用:ARCHIVE.md を更新する
git mv 後、.steering/ARCHIVE.md の該当カテゴリテーブルに行を追記します。
| [20260420-yahoo-oauth](archive/20260420-yahoo-oauth/) | Yahoo OAuth 移行 | !MR123 | 2026-04-30 |
カテゴリ判定は「モール商品登録 / DDD/SOLID / マルチテナンシー / 認証・認可 / EGAZO / AI マッピング SAGA / 基盤」から選びます。既存に合わなければ新カテゴリを作ります。
🧠 Serena メモリへの昇華判断
decision.md や実装から得た学びで プロジェクト全体で再利用可能なもの は Serena メモリに保存します。個別 ADR と違い、パターン・原則・プロセスを残すのが目的です。
| 保存すべき | 保存不要 |
|---|---|
| パターン(双方向参照、Upsert 冪等性) | タスク固有の詳細(API エンドポイント名) |
| 原則(全登録→後で確認) | 一時的な判断(しきい値の具体値) |
| プロセス(データ分析先行) | 個別の ADR そのもの |
| 失敗と対策 | 進捗状況 |
命名規則:
- ドメインパターン →
[ドメイン名]-domain-patterns - トラブルシューティング →
[技術領域]-troubleshooting - アーキテクチャ原則 →
architecture-principles
⚠️ 実装・完了フェーズでやってはいけないこと
- TodoWrite だけ更新して tasklist.md を放置する
- 「後でまとめて更新」(リアルタイム更新が必須)
- Phase 完了時の 3 種検証をスキップして次 Phase へ進む
TODO|FIXME|NotImplementedExceptionが残ったまま Phase 完了にする- 未完了タスクを残して振り返りを書く
- ACTIVE.md から削除せずに次の
/steeringを開始する
📚 シリーズ記事
| # | タイトル | 内容 |
|---|---|---|
| 1 | 概要 | ステアリング駆動開発の全体像 |
| 2 | 壁打ち・規模判定編 | 壁打ちの進め方、ADR の書き方、規模判定の基準 |
| 3 | ステアリング作成編 | M/L 規模のドキュメント作成、TDD タスク分解 |
| 4 | 実装・完了編(本記事) | TodoWrite 連携、進捗管理、アーカイブ運用 |
| 5 | コンテキスト設計編 | AI に渡すコンテキストの最適化、skills 設計 |
| 6 | 品質ゲート編 | doc-reviewer、テスト品質チェック、受入テスト |
| 7 | Claude Code ベストプラクティス | CLAUDE.md 設計、hooks、commands、rules、skills |
| 8 | Agent Teams 編 | agents 定義、チーム構成、マルチエージェント協調 |
| 9 | Remote Control 編 | スマホ・Web から CLI セッションを操る席拘束からの解放 |
🔗 関連記事
- ステアリング作成編 — tasklist.md の書き方と TDD 2 ステップ分解
- 品質ゲート編 — Phase 検証・受入テストの詳細
- Claude Code 7層ハーネスエンジニアリング — 実装時のハーネス設計