--- name: design-planning description: | ソフトウェア設計計画スキル。要件分析、アーキテクチャ設計、API設計、データベース設計、 実装ロードマップの作成を体系的に行います。Clean Architectureに準拠した設計を サブエージェントとの並列作業で効率的に実施します。 --- # Design Planning Skill ソフトウェアプロジェクトの包括的な設計計画を作成するスキル。 ## 対応領域 | 領域 | フォーカス | 詳細ガイド | |------|-----------|-----------| | Architecture | システム構成, レイヤー構造, コンポーネント設計 | `./agents/architecture-designer.md` | | API | RESTful API, エンドポイント定義, リクエスト/レスポンス仕様 | `./agents/api-designer.md` | | Database | ER図, テーブル設計, マイグレーション計画 | `./agents/database-designer.md` | ## 判断フロー ``` 設計が必要な状況は? │ ├─ 新機能の包括的設計 ─────────────→ ✅ サブエージェント並列設計 │ ├─ 複数レイヤーにまたがる変更 ────→ ✅ サブエージェント並列設計 │ ├─ 単一領域の設計(APIのみ等)───→ ✅ 直接設計(該当領域のみ) │ ├─ 小規模変更(1カラム追加等)───→ ✅ 直接設計(軽量) │ ├─ バグ修正・スタイル修正 ────────→ ❌ 設計不要 │ └─ ドキュメント更新のみ ──────────→ ❌ 設計不要 ``` ## サブエージェント並列設計 大規模な設計が必要な場合、専門サブエージェントを並列起動。 ``` ┌──────────────────────────────────────────────────────────────┐ │ 1. 要件分析フェーズ │ │ └── 機能要件・非機能要件を整理 │ ├──────────────────────────────────────────────────────────────┤ │ 2. 並列設計フェーズ(サブエージェント起動) │ │ ├── Architecture Designer → システム構成の設計 │ │ ├── API Designer → API仕様の設計 │ │ └── Database Designer → データモデルの設計 │ ├──────────────────────────────────────────────────────────────┤ │ 3. 統合フェーズ │ │ └── 各設計の整合性確認と調整 │ ├──────────────────────────────────────────────────────────────┤ │ 4. 計画策定フェーズ │ │ └── 実装ロードマップの作成 │ └──────────────────────────────────────────────────────────────┘ ``` ## 設計ワークフロー(5ステップ) ``` ┌───────────────────────────────────────────────────────┐ │ │ ▼ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │要件 │──→│アーキ │──→│詳細 │──→│実装 │ │ │分析 │ │テクチャ│ │設計 │ │計画 │ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │ │ ▼ │ ┌────────┐ │ │レビュー│─────────┘ │& 承認 │ └────────┘ ``` ### Step 1: 要件分析 **整理する項目**: | カテゴリ | 内容 | |---------|------| | 機能要件 | ユーザーストーリー, 必須/追加機能, 入出力 | | 非機能要件 | パフォーマンス, セキュリティ, スケーラビリティ | | 制約条件 | 技術的制約, ビジネス制約, スケジュール | **成果物例**: ```markdown ### 機能要件 - FR-001: [機能名] - [説明] ### 非機能要件 - NFR-001: [要件名] - [説明] ### 制約条件 - CON-001: [制約名] - [説明] ``` ### Step 2: アーキテクチャ設計 **設計項目**: | 項目 | 内容 | |------|------| | システム構成 | コンポーネント特定, 関係定義, 外部連携 | | レイヤー構造 | API層, UseCase層, Domain層, Infrastructure層 | | 技術選定 | フレームワーク, ライブラリ, インフラ | **成果物例**: ```markdown ### レイヤー構造 | レイヤー | 責務 | 主要コンポーネント | |---------|------|------------------| | API | HTTPリクエスト処理 | Router, Controller | | UseCase | ビジネスロジック調整 | Service, UseCase | | Domain | ビジネスルール | Entity, ValueObject | | Infrastructure | 外部システム連携 | Repository, Client | ``` ### Step 3: 詳細設計 **設計項目**: | 項目 | 内容 | |------|------| | API設計 | エンドポイント, リクエスト/レスポンス, エラー | | DB設計 | テーブル定義, リレーション, インデックス | | クラス設計 | インターフェース, クラス図, シーケンス図 | **API設計例**: ```markdown ### POST /api/v1/users **Request**: { "name": "string", "email": "string" } **Response** (201): { "id": 1, "name": "string", "email": "string" } ``` **DB設計例**: ```markdown ### users テーブル | カラム | 型 | NULL | 説明 | |--------|-----|------|------| | id | SERIAL | NO | 主キー | | name | VARCHAR(100) | NO | ユーザー名 | | email | VARCHAR(255) | NO | メールアドレス | ``` ### Step 4: 実装計画 **策定項目**: | 項目 | 内容 | |------|------| | タスク分解 | 設計→実装タスク, 依存関係, 優先順位 | | 見積もり | 工数, リスク特定 | | マイルストーン | フェーズ分け, デモポイント | **成果物例**: ```markdown ### Phase 1: 基盤構築 - [ ] DBスキーマ作成 - [ ] エンティティ・リポジトリ実装 ### Phase 2: API実装 - [ ] エンドポイント実装 - [ ] バリデーション実装 ``` ### Step 5: レビューと承認 - セルフレビュー(チェックリスト確認) - レビュー依頼(観点を明示) - フィードバック反映 ## 設計パターン ### Clean Architecture ``` ┌─────────────────────────────────────────────┐ │ API層 │ │ (Router, Controller, Request/Response) │ ├─────────────────────────────────────────────┤ │ UseCase層 │ │ (Service, UseCase, Input/Output) │ ├─────────────────────────────────────────────┤ │ Domain層 │ │ (Entity, ValueObject, DomainService) │ ├─────────────────────────────────────────────┤ │ Infrastructure層 │ │ (Repository実装, ExternalClient, ORM) │ └─────────────────────────────────────────────┘ ``` **依存関係ルール**: - 上位層 → 下位層への依存はOK - 下位層 → 上位層への依存はNG - Domain層は他のどの層にも依存しない ### Repository Pattern ```python # Domain層: インターフェース定義 class UserRepositoryInterface(ABC): @abstractmethod def find_by_id(self, user_id: int) -> Optional[User]: pass # Infrastructure層: 実装 class SQLAlchemyUserRepository(UserRepositoryInterface): def find_by_id(self, user_id: int) -> Optional[User]: model = self._session.query(UserModel).filter( UserModel.id == user_id ).first() return self._to_entity(model) if model else None ``` ## プロジェクト固有ガイドライン ### Backend (Python/FastAPI) ```python # API層: HTTPリクエストの処理のみ @router.post("/users", response_model=UserResponse) async def create_user( request: UserCreateRequest, usecase: CreateUserUseCase = Depends(get_create_user_usecase) ): return await usecase.execute(request.to_input()) # UseCase層: ビジネスロジックの調整 class CreateUserUseCase: async def execute(self, input: CreateUserInput) -> CreateUserOutput: user = User.create(input.name, input.email) saved = await self._repo.save(user) return CreateUserOutput.from_entity(saved) # Domain層: ビジネスルール class User: @classmethod def create(cls, name: str, email: Email) -> "User": if not name: raise DomainError("Name is required") return cls(name=name, email=email) ``` ### Frontend (TypeScript/SvelteKit) ```typescript // Presentational Component(表示専用) interface UserCardProps { user: User; onEdit: (user: User) => void; onDelete: (id: number) => void; } // 型安全性の確保 interface ApiResponse { data: T; error: ApiError | null; } ``` ## 設計チェックリスト ### 🔴 必須 - [ ] 要件が明確になっている - [ ] Clean Architectureに準拠している - [ ] 依存関係の方向が正しい - [ ] API仕様が定義されている - [ ] DBスキーマが正規化されている ### 🟡 推奨 - [ ] 非機能要件を考慮している - [ ] エラーレスポンスが定義されている - [ ] インデックスが適切に設計されている - [ ] マイグレーション計画がある - [ ] テスト計画がある ### 🟢 Nice to have - [ ] 拡張性を考慮している - [ ] トレードオフを文書化している - [ ] 将来の変更点を予測している ## ベストプラクティス ### DO ✅ - 要件を明確にしてから設計を始める - 既存アーキテクチャとの整合性を確認 - 小さな単位で設計・レビューを実施 - 設計と実装のギャップを継続的に埋める - YAGNI原則(必要になるまで作らない) ### DON'T ❌ - 要件が曖昧なまま設計を進める - 過剰な抽象化をする - 将来の要件に過度に対応する - 設計ドキュメントを放置する - 実装可能性を無視した設計 ## 設計ドキュメント構成 ```markdown # [機能名] 設計書 ## 1. 概要 - 目的 - スコープ ## 2. 要件 - 機能要件(FR-xxx) - 非機能要件(NFR-xxx) ## 3. アーキテクチャ設計 - システム構成図 - コンポーネント一覧 ## 4. 詳細設計 - API設計 - データベース設計 ## 5. 実装計画 - タスク一覧 - マイルストーン ## 6. リスクと対策 ``` ## 参照ファイル | ファイル | 説明 | |---------|------| | `./agents/architecture-designer.md` | アーキテクチャ設計詳細 | | `./agents/api-designer.md` | API設計詳細 | | `./agents/database-designer.md` | データベース設計詳細 | | `.claude/rules/backend/layer-rules.md` | Backendレイヤールール | | `.claude/rules/backend/database-rules.md` | データベース設計規約 |