🤖

Claude Codeを使った仕様駆動開発が可能なcc-sddをFlutterで試した

に公開

はじめに

Claude Code や Cursor などの AI コーディングエージェントを使っていると、こんな経験はありませんか?

  • 「この機能実装して」と雑に投げたら、既存のコード規約を無視した実装が返ってきた
  • レビューで「設計が違う」と指摘されて、ほぼ全面書き直しになった
  • 実装後に「なぜこの設計にしたのか」が分からず、後から困った

こういった課題を解決できると噂の、SDD(Spec-Driven Development:仕様駆動開発) という手法を弊社のFlutterプロジェクトで試してみました。

まず、SDD とは何か

SDD は、AI に実装させる前に「AI が実行可能なレベルの仕様書」を作成し、それをベースに開発を進める手法です。

SDDのアプローチについて

SDD のアプローチ

仕様書を作成

仕様書をレビュー(ここで認識を合わせる)

AI が仕様書に従って実装

実装レビュー(手戻りが少ない)

cc-sdd とは

今回使用した cc-sdd は、Claude Code や Cursor で SDDを実践するためのツールです。

cc-sddは、Kiroという仕様駆動開発ツールの考え方を採用しており、Claude
CodeやCursorといったコーディングエージェント向けにカスタマイズされています。

コマンドを実行すると以下のような仕様書が自動生成されます。

  • Steering: プロジェクトのアーキテクチャや規約
  • requirements.md: 要求定義(何を作るか)
  • design.md: 詳細設計(どう作るか)
  • tasks.md: 実装タスクの分解

実際に試してみた

Flutterアプリで「ユーザーのアクセス状態をローカルにキャッシュする機能」を SDD で開発してみました。

使ったコマンド

# 1. プロジェクト情報を学習(これは一度だけ実行すればOK,必要に応じて更新)
/kiro:steering

# 2. 機能の仕様を初期化
/kiro:spec-init "ユーザーのアクセス状態をローカルキャッシュする機能"

# 3. 要求定義を作成
/kiro:spec-requirements cached-access-status

# 4. 詳細設計を作成
/kiro:spec-design cached-access-status -y

# 5. タスク分解
/kiro:spec-tasks cached-access-status -y

# 6. 実装
/kiro:spec-impl cached-access-status 1.1,1.2

design.mdの作り込みが重要

SDD を最低限活用するためには、以下が重要だと考えています。

Plan Mode でのdesign.mdの作り込み

Steering を設定した後、Plan Mode を使って requirements.mddesign.md をしっかり作り込むことが重要です。
特にdesign.mdを細かく作り込むのが大事って思います。

Plan Modeでは

  • 生成された仕様書を確認し、必要に応じて編集
  • 既存コードへの具体的な参照パス(ファイル名や関数名)を追記
  • プロジェクト固有の制約や注意点を明記

これらのステップを踏むことで、AI の実装精度が向上したなーって思ってます。
もちろん、プロジェクト固有のアーキテクチャパターンや規約を Steeringにしっかり書いておくことも大事ですが、design.mdの作り込みが最も効果的でした。

良かった点

1. 実装後の手戻りが減った

従来は実装後のレビューで指摘があり手戻りが発生することが時々ありましたが、SDDでは仕様の段階で認識を合わせられて、それらのドキュメントがSSOTになるので、実装後の大幅修正が以前より少なくなりました。

2. チーム開発での並列実装がしやすい

タスクが明確に分解されるため、複数人で並列して実装を進めやすくなりました。
全員が同じ requirement.mddesign.md を見ているので、認識のズレが起きにくいです。

3. ドキュメントが自動的に残る

実装後に「ドキュメント書かなきゃ...」となることがなく、仕様書がそのままドキュメントとして機能します。

4. 設計についてチーム全体で議論できる

仕様レビューの段階で、チーム全体で設計について議論する機会が生まれました。
コードレビューで揉めるより、仕様レビューで揉む方が建設的だと感じました。

大変な点

1. 仕様書が長大になる

想像以上に仕様書のボリュームが大きくなります。
小規模な機能でも、生成される仕様書全体を読むのに時間がかかりました。

対策としては以下のようなことをすればいいと思ってます

  • 最初から機能を小さく分割する
  • 必要な項目だけに絞る(全セクションを埋める必要はない)
  • レビューは重要な判断箇所に絞る

2. 既存コードとの統合が難しい(コードベースが大きければ特に)

大きめなプロジェクトだと、AI がすべてのコンテキストを把握しきれず、既存コードとの整合性が取れないことがあります。

対策(2ステップアプローチ)

  1. Steering の充実化: 既存のアーキテクチャパターンや参考実装の場所を詳しく書く
  2. Plan Mode での作り込み: 生成された design.md を Plan Mode で編集し、既存コードへの具体的な参照を追記する

3. 小規模タスクには不向き

「ボタンの色を変える」「テキスト修正」といった小規模タスクに SDD を使うのは不向きだなーってお思います。

4. 組織、チーム全体のプロセス変更が必要

SDD は単にツールを導入すれば済む話ではなく、「仕様を先に決める」という文化を組織、チーム全体で共有する必要があります。
エンジニアだけで完結しないため、他の業種の方(例: QA) も巻き込む必要があったりもします。
もちろん、共有できるというのはメリットとも言えますが。

SDD が向いているケース・向いていないケース

実際に使ってみて、以下のように整理できました。

向いている 向いていない
中〜大規模の機能追加 UI の微調整
チーム開発での並列実装 1 ファイルだけの修正
API 連携・データモデル・ビジネスロジック 探索的な開発(仕様が固まっていない)
要件が明確で安定している領域 プロトタイピング・PoC

実践のコツ

1. 最小限の仕様から始める

全セクションを完璧に埋める必要はありません。最低限必要なのは以下です。

  • Intent(背景): なぜ作るのか
  • 振る舞い仕様: 何を作るのか
  • 受け入れ条件: どうなれば完了か

2. レビューコマンドで仕様の品質を担保する

cc-sddには設計品質をレビューするコマンド(/kiro:validate-design)が用意されています。

レビューの流れ

  1. design.mdを作成後、/kiro:validate-design <feature-name> を実行
  2. AIが設計をレビューし、GO/NO-GO判定を出してくれる
  3. NO-GOの場合は指摘事項を修正し、GOが出るまで繰り返す
  4. GOが出た後、人間がさらに細かい部分をレビューして最終調整

この2段階レビュー(AIレビュー → 人間レビュー)により、仕様の品質を高められます。

3. DevOps 基盤が整っていることが前提

SDD は「高速な検証と改善のサイクル」を前提としています。以下が整っていないと効果が半減するので、そこが整ってない場合は、まずは整えましょう。

  • CI/CD パイプライン
  • 自動テスト環境
  • コードレビュープロセス

まとめ

SDD を実際に試してみて、適切な場面で使えば強力な武器になると感じました。

ただし、万能ではありません。小規模タスクには不向きですし、チーム、組織全体のプロセス変更も必要です。

個人的には、design.mdをとにかく作り込むことが最も効果的だったので、まずはこれを意識してやってみると良いかもしれません。

参考リンク

Discussion