# SDD設計原則

仕様駆動開発における技術設計のルール。

## 原則

| 原則 | 基準 |
|------|------|
| 型安全性 | 静的型言語では明示的な型定義。`any`型禁止 |
| 設計 vs 実装 | WHATを記述、HOWは記述しない。インターフェース優先 |
| トレーサビリティ | 設計コンポーネントは要件IDに紐づくこと |
| 自己完結性 | 設計文書だけでレビューが完結すること |

## コンポーネント設計

| ルール | 基準 |
|--------|------|
| 単一責任 | 1コンポーネント1責任。責任を1文で説明できること |
| 明確な境界 | 公開インターフェースが定義されていること |
| 依存方向 | 内側（ドメイン）から外側（インフラ）への依存禁止 |
| インターフェース分離 | 利用者が必要としないメソッドへの依存禁止 |

## データモデリング

- ドメインモデル: 集約・エンティティ・値オブジェクト・不変条件
- 論理データモデル: 構造・インデックス・整合性
- 物理データモデル: ストア固有の実装

## ダイアグラム

- Mermaid記法のみ使用
- ノードIDは英数字とアンダースコアのみ
- 3つ以上のコンポーネントが連携する場合のみ図を含める
- スタイル指定なし（純粋なMermaid）

## 要件トレーサビリティ

要件と設計の対応表を必ず含める。

```markdown
| 要件 | サマリー | コンポーネント | インターフェース |
|------|---------|-------------|---------------|
| 1.1 | ... | ... | ... |
```

## 禁止事項

- 実装詳細（具体的なアルゴリズム、コード例）
- 1000行を超える設計文書（複雑すぎる兆候）
- 要件に紐づかないコンポーネント
