Hacker Newsで「Spec-Driven Development(仕様駆動開発)」と呼ばれるClaude Code活用パターンが注目を集めている。事前にYAML形式で仕様書を書き、それをClaude Codeへの指示として使うことで、大規模なコーディングタスクでも一貫性を保てるというアプローチだ。
Claude Codeに「認証システムを実装して」のような大きなタスクを渡すと、コンテキストが進むにつれて方針がブレたり、前半と後半で設計が食い違ったりすることがある。
これはモデルの問題というより「仕様のあいまいさ」の問題だ。人間のエンジニアでも、要件定義なしに実装すると同じことが起きる。
# spec.yaml
feature: user-authentication
goal: "Email + password認証をJWT使用で実装"
constraints:
- bcryptでパスワードハッシュ化
- JWTトークンの有効期限は24h
- リフレッシュトークンはDBに保存
- レート制限: 5回/分でIPブロック
steps:
- name: "データモデル設計"
deliverable: "User, RefreshToken テーブルのマイグレーション"
- name: "認証エンドポイント"
deliverable: "POST /auth/login, POST /auth/refresh, POST /auth/logout"
- name: "ミドルウェア"
deliverable: "JWT検証ミドルウェア"
- name: "テスト"
deliverable: "各エンドポイントのintegration test"
done_when:
- 既存テストがすべてパス
- 新規テストカバレッジ80%以上
このYAMLをそのままClaude Codeに渡すか、CLAUDE.mdに参照パスを書いておく。
done_whenを必ず書く特に重要なのが done_when セクションだ。Claude Codeは「完了」の定義がない場合、あいまいな状態で「できました」と返してしまうことがある。
明示的な完了条件を書くことで:
--worktreeで並列セッション同じHNスレッドで話題になっていたもう一つのTip。
claude --worktree feature/auth-backend
claude --worktree feature/auth-frontend
--worktreeフラグを使うと、gitのworktree(独立した作業コピー)を自動で作成してClaude Codeを起動できる。これにより:
git worktree removeでクリーンアップフロントエンドとバックエンドを別々のClaudeに任せる、といった分担が実用的になる。コミュニティでは「単一最大の生産性向上」と評する声もある。
| アプローチ | 効果 |
|---|---|
| YAML仕様書を先に書く | 大きなタスクの迷走防止 |
done_whenで完了条件を明示 |
曖昧な「完成」を防ぐ |
--worktreeで並列実行 |
バックエンド/フロントを同時に進める |
Claude Codeは「賢いエンジニア」だが、要件が不明確なタスクは苦手というのは人間と同じだ。Spec-Driven Developmentは、Claude Codeの性能を最大限引き出すためのワークフロー設計パターンとして注目に値する。