上流工程で品質確保・実装でコスト削減:spec-workflow-mcpとobra/superpowersによるAI駆動開発環

#AI

1. はじめに

AI駆動開発において、「上流工程の品質確保」と「実装コストの最適化」を両立させることは重要な課題です。本記事では、仕様策定フェーズでは高品質なSonnet 4.5を活用し、実装フェーズでは低コストモデルに切り替えることで、品質とコストのバランスを実現する開発環境を紹介します。

この環境の特徴は以下の通りです。

上流工程での品質確保: spec-workflow-mcpとClaude Code(Sonnet 4.5)により、仕様策定・要件定義を高品質な推論能力で実施します。Webダッシュボードを通じた承認フローにより、仕様の品質を人間が確認しながら進められます。

実装フェーズのコスト最適化: obra/superpowersとClaude Code Router(OpenRouter経由)により、実装・テスト・デバッグをDeepSeek R1やGemini 3 Flashなどの低コストモデルで効率的に実行します。Gemini 3 Flashは1日1,500リクエストまで無料で利用でき、DeepSeek R1も非常に低コストです。

tmuxによるデュアルペイン構成: 左ペインでSonnet 4.5を使った仕様策定、右ペインでOpenRouterモデルを使った実装を進められます。各フェーズに最適なモデルを使い分けることで、開発全体のコストパフォーマンスを最大化します。

この構成により、上流工程では妥協のない品質を、実装フェーズでは高速な開発サイクルを実現できます。

2. システム概要

このワークフローは、以下の3つの主要コンポーネントで構成されています。

graph TB
    A[開発者] --> B[tmux]
    B --> C[左ペイン: オリジナルClaude Code]
    B --> D[右ペイン: claude-code-router]
    C --> E[spec-workflow-mcp]
    E --> F[Webダッシュボード<br/>localhost:5050]
    D --> G[OpenRouter API]
    G --> H[Gemini 3 Flash]
    G --> I[DeepSeek R1]
    D --> J[obra/superpowers]
    J --> E

    style F fill:#e1f5ff
    style E fill:#fff3cd
    style J fill:#d4edda

2.1. アーキテクチャの特徴

デュアルペイン構成: tmuxを使用し、上流工程(仕様策定)はオリジナルのClaude Code、実装フェーズはclaude-code-routerを使い分けることで、各フェーズに最適なモデルを活用します。

プロトコルベースの統合: MCP(Model Context Protocol)により、AIモデルと外部ツール、データソース間の標準化されたインターフェースを提供します。

リアルタイム承認フロー: spec-workflow-mcpのWebダッシュボードを通じて、仕様書のレビューと承認をインタラクティブに実施できます。

3. 主要ツールの詳細

3.1. Claude Code Router

Claude Code Routerは、Claude CodeインターフェースとAIモデル間に位置するスマートプロキシサーバーです。リクエストを傍受し、定義されたルールに基づいて異なるAIモデルプロバイダーにインテリジェントにルーティングします。今回は下記のモデルの自動切り替えは利用しませんが、設定により自動切り替えが可能になります。

コンテキストベースルーティング: タスクの種類に応じて最適なモデルを自動選択します。

対応プロバイダー: OpenRouter、DeepSeek、Ollama、Gemini、Volcengineなど多様なプロバイダーに対応しています。

3.2. MCP (Model Context Protocol)

MCPは、Anthropicが発表したオープン標準フレームワークで、AIシステムと外部ツール、データソース間のデータ統合を標準化します。従来の「N×M」データ統合問題を解決し、各データソースごとにカスタムコネクターを構築する必要性を排除します。

MCPは永続的なプロトコルベースのコンテキストを提供し、入力、ツール出力、中間状態を複数のインタラクションにわたって追跡します。これにより、外部状態管理なしで複雑なエージェント動作が可能になります。

3.3. spec-workflow-mcp

spec-workflow-mcpは、仕様駆動開発のためのMCPサーバーです。以下の機能を提供します。

ワークフロープロセス:

graph LR
    A[steering-guide] --> B[create-steering-doc]
    B --> C[product.md]
    B --> D[tech.md]
    B --> E[structure.md]
    C --> F[spec-workflow-guide]
    D --> F
    E --> F
    F --> G[create-spec-doc]
    G --> H[Requirements.md]
    G --> I[Design.md]
    G --> J[Tasks.md]
    H --> K[承認]
    I --> K
    J --> K
    K --> L[Implementation]

    style C fill:#fff3cd
    style D fill:#fff3cd
    style E fill:#fff3cd
    style H fill:#d4edda
    style I fill:#d4edda
    style J fill:#d4edda

3.4. obra/superpowers

superpowersは、Claude Code用のコアスキルライブラリで、TDD、デバッグ、コラボレーションパターンなど実証済みのテクニックを提供します。

主要スキル:

スキルは関連するタスクで自動的にアクティブ化され、スラッシュコマンド(/superpowers:brainstorm/superpowers:write-plan/superpowers:execute-plan)で手動起動も可能です。

4. 環境構築手順

4.1. Claude Code Routerのインストール

npm install -g @musistudio/claude-code-router

初期設定用UIを起動:

ccr ui

4.2. MCPサーバーのインストール

context7(コンテキスト管理):

claude mcp add context7 -- npx -y @upstash/context7-mcp@latest

serena(補助ツール):

claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena-mcp-server

spec-workflow-mcp(プロジェクトごとに設定が必要):

cd [プロジェクトのパス]
claude mcp add --scope project spec-workflow npx @pimzino/spec-workflow-mcp@latest -- "$(pwd)"

動作しない場合はバージョンを指定:

claude mcp add --scope project spec-workflow npx @pimzino/spec-workflow-mcp@v2.0.9 -- "$(pwd)"

4.3. ダッシュボードの起動

プロジェクトディレクトリで実行:

npx -y @pimzino/spec-workflow-mcp@latest . --dashboard --port 5050

macOSではデフォルトポート(5000)が競合するため5050番に変更します。自動的にデフォルトのブラウザで http://localhost:5050/ が開きます。

不要になったプロジェクトのspec-workflow-mcpを削除する場合:

claude mcp list
claude mcp remove spec-workflow

4.4. obra/superpowersのインストール

/plugin marketplace add obra/superpowers-marketplace
/plugin install superpowers@superpowers-marketplace

4.5. プロジェクトスクリプトの作成

start-claude.sh - tmuxセッション管理:

#!/bin/bash

SESSION="myproject"

# 新しいセッションを作成
tmux new-session -d -s $SESSION

# 最初のペインでclaudeを実行
tmux send-keys -t $SESSION:0.0 "claude" C-m

# 画面を垂直分割
tmux split-window -h -t $SESSION:0

# 2つ目のペインでccr codeを実行
tmux send-keys -t $SESSION:0.1 "ccr code" C-m

# セッションにアタッチ
tmux attach-session -t $SESSION

実行権限を付与:

chmod +x start-claude.sh

このスクリプトにより以下が実現されます:

上流工程のspec-workflow-mcpはオリジナルを使い、実装以降のsuperpowersはclaude-code-routerを使います。

tmuxはウィンドウを閉じてもセッションは継続するため、完全に停止する場合は以下のコマンドを実行:

tmux kill-server

setup-commands.sh - プロジェクト固有スキルの生成:

#!/bin/bash

# Skillsディレクトリのルート作成
mkdir -p .claude/skills

echo "🔧 Setting up Claude Code Project Skills..."
echo "📂 Target: .claude/skills/"
echo ""

# 関数: スキル作成 (ヒアドキュメント版)
create_skill() {
  local name="$1"
  local description="$2"
  local content="$3"

  local skill_dir=".claude/skills/$name"
  local file="$skill_dir/SKILL.md"

  mkdir -p "$skill_dir"

  cat <<EOF > "$file"
***
description: $description
***

$content
EOF

  echo "✅ Created: $name ($file)"
}

# 共通の自動実行抑止メッセージ
NO_AUTO_START_MSG="

【重要】
このコマンドを実行した直後に、**自動的にフェーズ1 (仕様策定) やその他のワークフローを開始しないでください。**
既存のファイルを確認したり、spec-workflow を読み込んだりする必要はありません。

単に設定の変更やモードの切り替えを行い、完了したら「設定を適用しました。次の指示を待機しています。」と答えて、**ユーザーからの次の具体的な指示を待ってください。**"

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Model Switching Skills (モデル切り替え)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# md-fast: Gemini 3 Flash
MD_FAST_CONTENT="/model openrouter,google/gemini-3-flash-preview$NO_AUTO_START_MSG"

create_skill "md-fast" \
  "Switch to fast model" \
  "$MD_FAST_CONTENT"

# md-think: DeepSeek R1
MD_THINK_CONTENT="/model openrouter,tngtech/deepseek-r1t2-chimera$NO_AUTO_START_MSG"

create_skill "md-think" \
  "Switch to reasoning model" \
  "$MD_THINK_CONTENT"

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Workflow Skills (開発プロセス)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

create_skill "plan" \
  "Generate a generic implementation plan using Superpowers" \
  "/superpowers:write-plan"

create_skill "exec" \
  "Execute the current plan using Superpowers" \
  "/superpowers:execute-plan"

create_skill "review" \
  "Brainstorm or review code quality using Superpowers" \
  "/superpowers:brainstorm"

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Phase Skills (フェーズ実行)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# Phase 2: 要件定義と初期セットアップ
PHASE2_PROMPT=".spec-workflow/steering/ の承認された仕様に基づき、以下のドキュメントを作成してください:

1. Requirements.md(詳細要件定義)
2. Design.md(設計書)
3. Tasks.md(実装タスク一覧)

【重要】Tasks.md の Task 1(環境構築)には、CLAUDE.md の「フェーズ 2: 詳細要件定義」セクションに記載されている**「環境構築手順 1〜8」**をそのままタスクとして定義してください。
特に scripts/ 以下のLintスクリプト作成や package.json の設定は、CLAUDE.mdのコード例をそのまま使用するよう指示してください。"

create_skill "phase2" \
  "Generate Requirements, Design, Tasks docs, and setup initial environment" \
  "$PHASE2_PROMPT"

# Phase 3: 実装計画
PHASE3_PROMPT="Tasks.md を読み込み、全タスク(Task 1〜最後まで)の詳細な実装計画を作成してください。

/superpowers:write-plan を使って計画を作成します。

各タスクごとに以下を明記してください:
1. 実装内容
2. 編集ファイル
3. Lint実行タイミング (npm run lint)
4. 完了条件

出力形式:
━━━ Task N: [タスク名] ━━━
1. [Step]...
"

create_skill "phase3-plan" \
  "Analyze Tasks.md and create a comprehensive implementation plan" \
  "$PHASE3_PROMPT"

echo ""
echo "🎉 Project Skills setup complete!"
echo "Available Skills (in .claude/skills/):"
echo "  /md-fast       - Switch to Gemini Flash (No Auto-Start)"
echo "  /md-think      - Switch to DeepSeek R1 (No Auto-Start)"
echo "  /plan          - Write Plan"
echo "  /exec          - Execute Plan"
echo "  /review        - Code Review"
echo "  /phase2        - Scaffolding & Requirements"
echo "  /phase3-plan   - Implementation Planning"

実行権限を付与して実行:

chmod +x setup-commands.sh

.clause/skills配下にファイルが生成されます。

5. プロジェクトのファイル構成

環境構築完了時点(Task 1完了後)のプロジェクトフォルダ構造を図示します。

5.1. ディレクトリ構成図

project-root/
│
├── .claude/ # 🤖 Claude Code スキル設定
│ └── skills/ # プロジェクト固有スキル
│ ├── md-fast/
│ │ └── SKILL.md # Gemini 3 Flashへ切替
│ ├── md-think/
│ │ └── SKILL.md # DeepSeek R1へ切替
│ ├── plan/
│ │ └── SKILL.md # 実装計画作成
│ ├── exec/
│ │ └── SKILL.md # 計画実行
│ ├── review/
│ │ └── SKILL.md # コードレビュー
│ ├── phase2/
│ │ └── SKILL.md # 要件定義生成
│ └── phase3-plan/
│ └── SKILL.md # 実装計画策定
│
├── .spec-workflow/ # 📋 仕様管理 (spec-workflow-mcp)
│ ├── steering/ # フェーズ1: 仕様策定(承認済み)
│ │ ├── product.md # 製品仕様
│ │ ├── tech.md # 技術仕様
│ │ └── structure.md # 構造仕様
│ └── specs/ # フェーズ2: 詳細要件(承認済み)
│ └── todo-app/
│ ├── requirements.md # 詳細要件定義
│ ├── design.md # 設計書
│ └── tasks.md # 実装タスク一覧
├── setup-commands.sh # スキル生成スクリプト(実行済み)
└── start-claude.sh # tmuxセッション起動スクリプト

5.2. 機能別ファイル分類

graph LR
    subgraph A["🎯 開発フェーズ制御"]
        A1[/md-fast<br/>高速モデル切替/]
        A2[/md-think<br/>推論モデル切替/]
        A3[/phase2<br/>要件定義生成/]
        A4[/phase3-plan<br/>実装計画作成/]
    end

    subgraph B["⚡ 実装支援"]
        B1[/plan<br/>計画作成/]
        B2[/exec<br/>計画実行/]
        B3[/review<br/>コードレビュー/]
    end

    subgraph C["📄 仕様書"]
        C1[product.md<br/>製品仕様]
        C2[tech.md<br/>技術仕様]
        C3[structure.md<br/>構造仕様]
    end

    subgraph D["📋 要件定義"]
        D1[requirements.md<br/>詳細要件]
        D2[design.md<br/>設計書]
        D3[tasks.md<br/>タスク一覧]
    end

    style A fill:#fff3cd,stroke:#f0ad4e,stroke-width:2px
    style B fill:#d4edda,stroke:#5cb85c,stroke-width:2px
    style C fill:#d1ecf1,stroke:#5bc0de,stroke-width:2px
    style D fill:#f8d7da,stroke:#d9534f,stroke-width:2px

5.3. ディレクトリ詳細説明

ディレクトリ/ファイル 役割 使用タイミング
.claude/skills/ プロジェクト固有スキル定義 常時(コマンド実行時に参照)
.spec-workflow/steering/ フェーズ1の仕様書 フェーズ1完了後、常に参照可能
.spec-workflow/specs/ フェーズ2の要件定義書 フェーズ2完了後、実装時に参照
package.json npm設定とlintコマンド npm runコマンド実行時
setup-commands.sh スキル生成スクリプト 初回環境構築時のみ実行済み
start-claude.sh tmux起動スクリプト Claude Code起動時

この構成により、仕様策定から実装、品質確認までの全フェーズをスムーズに進められる環境が整っています。

6. ToDoアプリ開発の完全フロー

実際のToDoアプリ開発を例に、具体的なワークフローを解説します。

6.1. 前提条件

プロジェクトディレクトリで実行:

npx -y @pimzino/spec-workflow-mcp@latest . --dashboard --port 5050

自動的にブラウザが起動します。

Claude Code起動:

./start-claude.sh

上流工程のspec-workflow-mcpはオリジナルを使い、実装以降のsuperpowersはclaude-code-routerを使います。

6.2. フェーズ1: 仕様策定 (Steering)

6.2.1. ステップ1.1: 要件入力

ユーザーが入力:

新しいToDoアプリを作成したいです。
以下の要件でフェーズ1の仕様策定を開始してください

要件:
- シンプルなタスク管理(追加・完了・削除)
- ローカルストレージで永続化
- レスポンシブデザイン
- JavaScript(バニラJS)で実装
- Biomeでlint管理

spec-workflow-mcpを使って仕様策定から始めてください。

6.2.2. ステップ1.2: Claude Codeの質問 → 回答

質問1: ユーザー層とユースケース

Claude Codeが質問:

このToDoアプリは、主にどのような目的で使用されることを想定していますか?

A) 個人の日常タスク管理(買い物リスト、家事、趣味など)
B) 仕事・プロジェクトのタスク管理(優先度や期限が重要)
C) 学習・勉強のタスク管理(課題、復習項目など)
D) シンプルなメモ・チェックリストとして(用途を限定しない汎用的なもの)

どれが最も近いですか?または別の用途がありますか?

ユーザー回答: A

質問2: タスクの構造

Claude Codeが質問:

日常タスクを管理する際、タスクの情報として何が必要でしょうか?

A) タスクのテキストのみ(最もシンプル)
B) テキスト + 期限日
C) テキスト + カテゴリ(買い物、家事、趣味など)
D) テキスト + 期限日 + カテゴリ

どのレベルの情報管理が必要ですか?

ユーザー回答: A

質問3: タスクの編集機能

Claude Codeが質問:

タスクを追加した後、内容を変更したくなることはありますか?

A) 編集機能は不要(削除して再追加すればOK)
B) 編集機能が欲しい(タスクのテキストを後から修正できる)

どちらが使いやすいと思いますか?

ユーザー回答: A

質問4: 完了したタスクの扱い

Claude Codeが質問:

タスクを完了した後、そのタスクはどう表示されるべきでしょうか?

A) 完了したら即座に削除される(履歴は残らない)
B) 完了したタスクは取り消し線付きでリストに残り、別途削除ボタンで消せる
C) 完了したタスクは「完了済み」セクションに移動し、一括削除できる
D) その他(具体的に教えてください)

どの動作が使いやすいと思いますか?

ユーザー回答: B

質問5: デザインの方向性

Claude Codeが質問:

UI/デザインのスタイルについて、どのような雰囲気を目指しますか?

A) ミニマル・モダン(白ベース、シャープなライン、マテリアルデザイン風)
B) 温かみのある優しいデザイン(柔らかい色、丸みのあるボタン)
C) ダークモード対応のクールなデザイン
D) とにかくシンプル(装飾最小限、機能的なデザイン)

どれがお好みですか?

ユーザー回答: A

質問6: タスクの表示順序

Claude Codeが質問:

タスクリストの並び順はどうしますか?

A) 追加した順に上から表示(新しいタスクが下に追加される)
B) 新しいタスクが上に表示(最新が一番上)
C) 未完了タスクを上、完了済みタスクを下に分けて表示
D) その他(具体的に教えてください)

どの並び順が使いやすいですか?

ユーザー回答: C

質問7: 追加の便利機能

Claude Codeが質問:

以下のような補助的な機能は必要ですか?

A) 完了済みタスクを一括削除するボタン
B) タスク数の表示(例:「3/5タスク完了」)
C) 両方とも欲しい
D) どちらも不要(本当にシンプルに保ちたい)

どれが良いですか?

ユーザー回答: D

アプローチの提案

Claude Codeが提案:

これまでの要件をまとめると:
- 機能:タスクの追加・完了・削除のみ
- データ:タスクのテキストのみ
- 表示:未完了タスクが上、完了済みが下(取り消し線付き)
- デザイン:ミニマル・モダン(白ベース、マテリアルデザイン風)
- 技術:バニラJS、ローカルストレージ、レスポンシブ、Biome

***
アプローチの提案

このToDoアプリを実装する方法として、3つのアプローチが考えられます。

【推奨】アプローチB:モジュラー構成

構成:
- index.html - 構造
- styles.css - スタイル
- app.js - ロジック

メリット:
- ファイルが分離されて保守しやすい
- Biomeでのlintが効きやすい
- 将来的な拡張が容易
- それでいてシンプル

デメリット:
- 3ファイル管理が必要

ユーザー回答: B

セクション1:全体アーキテクチャとファイル構成

Claude Codeが説明:

ディレクトリ構造

project-root/
├── index.html          # メインHTML
├── styles.css          # スタイルシート
├── app.js              # アプリケーションロジック
├── biome.json          # Biome設定
└── package.json        # npm設定

技術スタック

- HTML5:セマンティックなマークアップ
- CSS3:Flexboxでレイアウト、CSS変数でテーマ管理
- Vanilla JavaScript (ES6+):クラス構文、アロー関数、テンプレートリテラル
- LocalStorage API:データ永続化
- Biome:lintとフォーマット

アーキテクチャパターン

シンプルなMVC風の構成:
- Model:app.js内のデータ管理関数(LocalStorageとの同期)
- View:DOM操作とレンダリング関数
- Controller:イベントハンドラーとアプリ初期化

3ファイルのみで、外部ライブラリは一切使用しません。app.jsは即時実行関数(IIFE)またはモジュールパターンでグローバル汚染を防ぎます。

***
ここまでの構成で問題ありませんか?

ユーザー回答: OK

セクション2:データ構造とローカルストレージ

Claude Codeが説明:

データモデル

各タスクは以下のシンプルなオブジェクトで表現します:

{
  id: "1234567890123",      // タイムスタンプベースのユニークID
  text: "牛乳を買う",        // タスクのテキスト
  completed: false          // 完了状態(true/false)
}

ストレージ設計

- キー名:"todoApp_tasks"
- 保存形式:JSON文字列化した配列
- 保存タイミング:タスクの追加・完了・削除のたびに即座に保存

// 保存例
localStorage.setItem('todoApp_tasks', JSON.stringify(tasks));

// 読み込み例
const tasks = JSON.parse(localStorage.getItem('todoApp_tasks') || '[]');

データ操作の基本フロー

1. 初期化時:LocalStorageから既存タスクを読み込み
2. 追加時:配列に新オブジェクトを追加 → LocalStorage更新 → UI再描画
3. 完了時:該当タスクのcompletedを反転 → LocalStorage更新 → UI再描画
4. 削除時:配列から該当タスクを削除 → LocalStorage更新 → UI再描画

すべての操作後、必ずLocalStorageに保存し、UIを再描画することでデータとビューの整合性を保ちます。

***
このデータ設計で大丈夫ですか?

ユーザー回答: OK

セクション3:UI構造とHTML設計

Claude Codeが説明:

HTML構造

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ToDoアプリ</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="container">
    <header>
      <h1>ToDoリスト</h1>
    </header>

    <div class="input-section">
      <input type="text" id="taskInput" placeholder="新しいタスクを入力...">
      <button id="addButton">追加</button>
    </div>

    <div class="task-list" id="taskList">
      <!-- タスクが動的に追加される -->
    </div>
  </div>

  <script src="app.js"></script>
</body>
</html>

タスク項目のHTML構造(JavaScriptで動的生成)

<div class="task-item" data-id="1234567890123">
  <input type="checkbox" class="task-checkbox">
  <span class="task-text">牛乳を買う</span>
  <button class="delete-button">×</button>
</div>

完了済みタスクには.completedクラスを追加し、CSSで取り消し線を表示します。

表示ロジック

- 未完了タスク(completed: false)を先に表示
- 完了済みタスク(completed: true)を後に表示
- 各グループ内では追加順に表示

***
このUI構造で問題ありませんか?

ユーザー回答: OK

以降、セクション4〜7(スタイリング方針、JavaScript実装、エラーハンドリング、レスポンシブ対応)についても同様に質疑応答を経て、全体デザインが固まります。

最終的に、Claude Codeが product.mdtech.mdstructure.md を作成し、Webダッシュボード(http://localhost:5050/)で承認リクエストが表示されます。

6.2.3. ステップ1.3: Steering文書レビュー

ユーザーが入力:

/md-think
/review .spec-workflow/steering/Product.md

同様に他もレビュー:

/review .spec-workflow/steering/Tech.md
/review .spec-workflow/steering/Structure.md

修正が必要な場合は、具体的に指示します:

修正依頼
- エラーハンドリング: JSON.parse 時の例外処理を必須化する。
- イベントハンドリング: onclick 属性ではなく、addEventListener を使用するコード規約。
- オフライン対応: Simple Todo であるため、Service Worker を導入して完全な PWA(Progressive Web App)化を検討すると、ユーザー体験が劇的に向上します。
- CSS設計: クラス名の衝突を避けるため、BEM またはシンプルなプレフィックス(todo- など)の使用を推奨。

Claude Codeが修正を反映し、新しい承認リクエストを作成します。

6.2.4. ステップ1.4: Web UIで承認

ブラウザで http://localhost:5050/ を開き、内容を確認して「承認」ボタンをクリックします。

Information

「承認」しても自動的に次工程に進むわけではありません。 Claude Codeの画面からプロンプトを入力する必要があります。

プレビュー画面

6.3. フェーズ2: 詳細要件定義 (Requirements)

6.3.1. ステップ2.1: 要件定義書作成

ユーザーが入力:

/phase2

Claude Codeが .spec-workflow/steering/ の承認された仕様に基づき、以下のドキュメントを作成します:

6.3.2. ステップ2.2: レビューと承認

ドキュメントの作成が完了すると承認待ちになるため、その都度レビューをして修正を依頼します。

ユーザーが入力:

/review .spec-workflow/specs/todo-app/requirements.md
/review .spec-workflow/specs/todo-app/design.md
/review .spec-workflow/specs/todo-app/tasks.md

http://localhost:5050/ で確認し、「承認」ボタンをクリックします。

6.4. フェーズ3: 実装 (Implementation)

以降の操作は右ペインのclaude-code-router側で実施します。

6.4.1. ステップ3.1: 全体計画作成

ユーザーが入力:

/md-think
/phase3-plan

Claude Codeが実行:

Tasks.mdに基づき、全タスク(Task 1〜8)の詳細な実装計画を作成しました。

━━━ Task 1: 環境構築とLint設定 ━━━

1. 実装内容:
  - npm init -y による初期化。
  - @biomejs/biome, clang-format, glob のインストール。
  - biome.json の初期化。
  - .gitignore の作成(node_modules, .DS_Store, logs, approvals等)。
  - scripts/ 配下に lint-all.js など計6つのLintスクリプトを CLAUDE.md の通りに作成。
  - package.json に各言語向けの lint スクリプトを定義。
  - setup-commands.sh を作成・実行し、.claude/skills/ 配下にプロジェクト固有スキル(/phase2, /phase3-plan 等)を生成。
2. 編集ファイル: package.json, biome.json, .gitignore, scripts/*.js, setup-commands.sh
3. Lint実行タイミング: 構成完了直後に npm run lint
4. 完了条件: npm run lint が正常終了し、.claude/skills/ 内に指示通りのスキルファイルが生成されていること。

━━━ Task 2: HTMLファイルの作成 ━━━

1. 実装内容:
  - design.md に基づくセマンティックなHTML5構造の構築。
  - .todo-container, .todo-input-section などのクラス付与。
  - styles.css と app.js の読み込み設定。
2. 編集ファイル: index.html
3. Lint実行タイミング: ファイル作成後に npm run lint:js
4. 完了条件: ブラウザで開いた際に基本構造がエラーなく表示されること。

━━━ Task 3: CSSファイルの作成 ━━━

1. 実装内容:
  - CSS変数(:root)によるカラーパレット定義。
  - モバイルファーストのレスポンシブデザイン(480px以下で縦並び)。
  - 完了状態(打消し線)やホバーエフェクトのスタイリング。
2. 編集ファイル: styles.css
3. Lint実行タイミング: スタイル記述完了後に npm run lint
4. 完了条件: 各デバイスサイズで意図したデザイン通りに表示されること。

━━━ Task 4: JSファイルの作成(基礎構造とModel層) ━━━

1. 実装内容:
  - IIFE によるカプセル化と 'use strict' 宣言。
  - localStorage を用いた永続化(loadTasks, saveTasks)。
  - データ操作ロジック(addTask, toggleTask, deleteTask)の実装。
2. 編集ファイル: app.js
3. Lint実行タイミング: 関数実装後に npm run lint:js
4. 完了条件: LocalStorage との同期が try-catch 付きで正しく実装されていること。

━━━ Task 5: JSファイルの作成(View層) ━━━

1. 実装内容:
  - renderTasks() の実装(未完了タスク優先のソートロジック含む)。
  - textContent を使用した XSS 対策。
  - 入力欄のクリア(clearInput())。
2. 編集ファイル: app.js
3. Lint実行タイミング: レンダリングロジック追加後に npm run lint:js
4. 完了条件: タスク配列の状態が正しく DOM に反映・ソートされること。

━━━ Task 6: JSファイルの作成(Controller層と初期化) ━━━

1. 実装内容:
  - イベントハンドラー(handleAddTask, handleKeyPress)の実装。
  - イベント委譲を用いたリスト内(チェック、削除)のイベント管理。
  - init() 関数によるアプリ起動処理の追加。
2. 編集ファイル: app.js
3. Lint実行タイミング: 全機能実装後に npm run lint
4. 完了条件: タスクの追加(Enter対応)・完了・削除がすべて正常に動作すること。

━━━ Task 7: 統合テストと動作確認 ━━━

1. 実装内容:
  - 初回訪問、リロード、データ破損、レスポンシブ、XSS攻撃試行等のシナリオテスト。
  - Requirements.md の受入基準に対する自己検証。
2. 編集ファイル: なし(必要に応じてバグ修正)
3. Lint実行タイミング: 最終確認として npm run lint
4. 完了条件: 全テストシナリオをパスし、Biomeエラーやコンソールエラーがないこと。

━━━ Task 8: PWA化(オプション) ━━━

1. 実装内容:
  - manifest.json の作成と index.html へのリンク追加。
  - sw.js による静的ファイルのキャッシュ(キャッシュファースト戦略)。
  - app.js 内での Service Worker 登録。
2. 編集ファイル: manifest.json, sw.js, index.html, app.js
3. Lint実行タイミング: PWA機能追加後に npm run lint
4. 完了条件: オフライン環境でもアプリケーションが起動・表示されること。

6.4.2. ステップ3.2: 環境構築実行(Task 1のみ)

ユーザーが入力:

/md-fast
/exec Task 1のみを実行してください

Claude Codeが実行:

Task 1(環境構築・Lint設定・スキル生成)を完了しました。

実行内容:
1. npm初期化: package.json を作成
2. 基本パッケージ: @biomejs/biome, clang-format, glob をインストール
3. Biome設定: biome.json を初期化
4. 設定ファイル作成: .gitignore を適切に設定
5. Lintスクリプト作成: scripts/ 配下に6つのスクリプトを作成
6. package.json設定: npm run lint などのコマンドを定義
7. スキルセットアップ: setup-commands.sh を作成・実行し、.claude/skills/ 配下にフェーズ管理スキルを生成

これで基本的な開発環境が整いました。次は Task 2 以降の機能実装に進むことができます。

6.4.3. ステップ3.3: 機能実装実行

ユーザーが入力:

/exec 残りの未完了タスクを全て実行してください

Claude Codeが実行:

未実装の全タスク(Task 2, 3, 4, 5, 6, 7, 8)を実装・完了しました。

実装の概要

1. HTML構造: index.html をセマンティックなHTML5で作成し、todo- プレフィックスを使用した明確なクラス設計を実施しました。
2. CSSスタイリング: styles.css にCSS変数によるカラーパレット、モバイルファーストのレスポンシブデザイン、完了状態の視覚的フィードバックを実装しました。
3. JavaScript (Model/View/Controller): app.js を詳細な制約('use strict'、innerHTML禁止等)に合わせてブラッシュアップし、LocalStorage連携、タスクのソート表示、完全なイベントハンドリングを実装しました。
4. 品質管理: npm run lint を実行し、Biome による静的解析の警告・エラーをすべて修正しました。
5. PWA化: manifest.json と sw.js (Service Worker) を作成し、オフライン対応とホーム画面への追加機能を実装しました。

完了したタスク

- Task 2: HTMLファイルの作成
- Task 3: CSSファイルの作成
- Task 4: JavaScript Model層の実装
- Task 5: JavaScript View層の実装
- Task 6: JavaScript Controller層と初期化の実装
- Task 7: 統合テストと動作確認
- Task 8: PWA化

すべてのタスクが完了し、npm run lint もパスしています。これで実装フェーズは終了です。
Information

obra/superpowersとspec-workflow-mcpが連携しているため、obra/superpowersがタスクの実装を完了するとリアルタイムにspec-workflow-mcpのGUIにも反映されます。

6.5. フェーズ4: 最終品質確認 (Final Review & QA)

6.5.1. ステップ4.1: コードレビュー

ユーザーが入力:

/md-think
/review アプリケーション本体のファイルをレビューして

Claude Codeが実行:

アプリケーション本体のファイル(index.html, styles.css, app.js)をレビューしました。

全体評価

UI/UXの基本が抑えられており、バニラJavaScriptによる堅実な実装です。PWA対応やXSS対策(textContentの使用)が含まれており、実用的なアプリとして完成度が高いです。

***
1. index.html (UI構造)

- 良い点:
  - セマンティックHTML: header, input, button など適切なタグを使用しています。
  - PWA対応: manifest.json と theme-color が正しく設定されています。
  - クラス設計: todo- プレフィックスを一貫して使用しており、CSSのスコープが明確です。
- 改善提案:
  - アクセシビリティ: input タグに id はありますが、対応する label 要素がないか、あるいは aria-label が欠けています。スクリーンリーダー利用者のために追加を検討してください。

2. styles.css (デザイン)

- 良い点:
  - 変数活用: :root によるカラーパレット管理はメンテナンス性が高いです。
  - レスポンシブ: モバイルデバイス(480px以下)で入力欄が縦並びになるようメディアクエリが設定されています。
  - 視覚的フィードバック: 完了済みタスクの打ち消し線や、削除ボタンのホバー時の色変化(赤)など、状態が直感的に伝わります。
- 改善提案:
  - 不一致の微修正: :root の --primary-color (#4a90e2) と index.html の theme-color (#2563eb) がわずかに異なります。ブランドカラーとして統一するとよりプロフェッショナルです。

3. app.js (ロジック)

- 良い点:
  - カプセル化: IIFE (即時実行関数) で囲むことで、グローバル変数の汚染を防いでいます。
  - セキュリティ: innerHTML を避け、document.createElement と textContent を使用して DOM を構築しており、XSS (クロスサイトスクリプティング) 対策が万全です。
  - ユーザー体験: タスクのソート機能(未完了を上に表示)により、優先順位が分かりやすくなっています。
  - 効率: taskList へのイベント委譲(Event Delegation)により、多数のタスクがあってもリスナーが1つで済む設計になっています。
- 改善提案:
  - use strict の欠如: 最新版の修正で追加された可能性がありますが、もし入っていなければ IIFE の直後に "use strict"; を入れることで、より安全な実行環境になります。

総評

シンプルながらも「ベストプラクティスを遵守した」非常にクリーンなコードです。小規模なToDoアプリとして必要な機能が全て揃っており、保守性も良好です。

6.5.2. ステップ4.2: 修正対応(必要な場合)

ユーザーが入力:

レビュー結果にある改善項目を対応して。

Claude Codeが実行:

レビューで指摘された改善項目を反映しました。

- アクセシビリティ向上: index.html の入力欄に aria-label を追加し、スクリーンリーダー対応を強化しました。
- デザインの統一: styles.css の --primary-color を #2563eb に変更し、アプリ全体のテーマカラーを統一しました。
- コードの安全性向上: app.js の IIFE 内に "use strict"; を明示的に追加しました。

すべての改善項目が対応完了しました。

6.5.3. ステップ4.3: 完了宣言

開発完了です。生成されたToDoアプリは以下の特徴を持ちます:

7. メリット

7.1. コスト最適化

Claude Code Routerにより、タスクの性質に応じて最適なモデルを選択できます。例えば、Gemini 3 Flashは無料枠が大きく、コストを抑えながら高速な開発が可能です。

7.2. モデルの柔軟性

OpenRouter、Ollama、Gemini、DeepSeekなど、複数のプロバイダーとモデルを組み合わせることで、各フェーズに最適な推論能力を活用できます。

7.3. 仕様駆動開発の実現

spec-workflow-mcpのリアルタイムダッシュボードにより、仕様の承認フローが可視化され、AIと人間のコラボレーションが円滑になります。

7.4. ベストプラクティスの組み込み

superpowersプラグインにより、TDD、体系的デバッグ、完了前検証などの実証済みテクニックが自動的に適用されます。

7.5. tmuxによる並行作業

デュアルペイン構成により、仕様策定と実装を並行して進められ、開発速度が向上します。tmuxはセッション永続化により、ウィンドウを閉じても作業が継続します。

8. 課題と注意点

8.1. 学習曲線

複数のツール(Claude Code Router、MCP、spec-workflow-mcp、superpowers、tmux)の組み合わせには一定の学習コストが必要です。

8.2. プロジェクト固有設定

spec-workflow-mcpはプロジェクトごとに設定が必要で、スクリプト(setup-commands.sh)の実行も必須です。

8.3. セッション管理

tmuxセッションは永続化されるため、完全に停止する場合は明示的にtmux kill-serverを実行する必要があります。

8.4. ポート競合

macOSではデフォルトポート(5000)が使用されているため、ダッシュボードのポート変更(5050)が必要です。

9. まとめ

Claude Code Routerを中心としたこの開発環境は、AI駆動開発における3つの重要な要素を統合しています。

プロトコル標準化: MCPによる外部ツール統合の標準化

仕様駆動ワークフロー: spec-workflow-mcpによる構造化された開発プロセス

ベストプラクティスの自動適用: superpowersによる実証済みテクニックの組み込み

この環境により、IoT開発者は仕様策定から実装、品質確認まで一貫したワークフローで、AIエージェントとの効果的なコラボレーションが可能になります。特に、コンテキストベースルーティングにより、各開発フェーズに最適なモデルを活用できる点が、実用性と経済性の両立を実現しています。

今後、MCPエコシステムの拡大とともに、さらに多くの専門的なMCPサーバーやスキルが登場することで、AI駆動開発の可能性はさらに広がることが期待されます。