cursor-sdd 1.0.11 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -12
- package/assign/README.md +8 -1
- package/bin/setup.ts +45 -3
- package/new/commands/check-design.md +87 -0
- package/new/commands/design.md +188 -0
- package/new/commands/difference-check.md +83 -0
- package/new/commands/impl.md +109 -0
- package/new/commands/init.md +65 -0
- package/new/commands/requirements.md +91 -0
- package/new/commands/status.md +86 -0
- package/new/commands/tasks.md +155 -0
- package/new/rules/design-discovery-full.md +93 -0
- package/new/rules/design-discovery-light.md +49 -0
- package/new/rules/design-principles.md +182 -0
- package/new/rules/design-review.md +110 -0
- package/new/rules/ears-format.md +49 -0
- package/new/rules/frontend.md +90 -0
- package/new/rules/gap-analysis.md +145 -0
- package/new/rules/tasks-generation.md +131 -0
- package/new/rules/tasks-parallel-analysis.md +34 -0
- package/new/templates/specs/design.md +275 -0
- package/new/templates/specs/init.json +29 -0
- package/new/templates/specs/requirements-init.md +8 -0
- package/new/templates/specs/requirements.md +26 -0
- package/new/templates/specs/research.md +61 -0
- package/new/templates/specs/tasks.md +21 -0
- package/package.json +4 -6
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# 技術設計ルールと原則
|
|
2
|
+
|
|
3
|
+
## コア設計原則
|
|
4
|
+
|
|
5
|
+
### 1. 型安全は必須
|
|
6
|
+
- TypeScriptインターフェースで `any` 型を**絶対に使わない**
|
|
7
|
+
- すべてのパラメータと戻り値に明示的な型を定義
|
|
8
|
+
- エラーハンドリングにはDiscriminated Unionを使用
|
|
9
|
+
- ジェネリック制約を明確に指定
|
|
10
|
+
|
|
11
|
+
### 2. 設計 vs 実装
|
|
12
|
+
- **HOWではなくWHATに焦点**
|
|
13
|
+
- コードではなく、インターフェースとコントラクトを定義
|
|
14
|
+
- 事前/事後条件で振る舞いを指定
|
|
15
|
+
- アルゴリズムではなく、アーキテクチャ決定を文書化
|
|
16
|
+
|
|
17
|
+
### 3. ビジュアルコミュニケーション
|
|
18
|
+
- **シンプルな機能**: 基本的なコンポーネント図またはなし
|
|
19
|
+
- **中程度の複雑さ**: アーキテクチャ + データフロー
|
|
20
|
+
- **高い複雑さ**: 複数の図(アーキテクチャ、シーケンス、状態)
|
|
21
|
+
- **常に純粋なMermaid**: スタイリングなし、構造のみ
|
|
22
|
+
|
|
23
|
+
### 4. コンポーネント設計ルール
|
|
24
|
+
- **単一責任**: コンポーネントごとに1つの明確な目的
|
|
25
|
+
- **明確な境界**: 明示的なドメイン所有権
|
|
26
|
+
- **依存方向**: アーキテクチャレイヤーに従う
|
|
27
|
+
- **インターフェース分離**: 最小限で焦点を絞ったインターフェース
|
|
28
|
+
- **チーム安全なインターフェース**: マージ競合なしに並列実装を可能にする境界設計
|
|
29
|
+
- **調査トレーサビリティ**: 境界決定とその根拠を `research.md` に記録
|
|
30
|
+
|
|
31
|
+
### 5. データモデリング標準
|
|
32
|
+
- **ドメインファースト**: ビジネス概念から開始
|
|
33
|
+
- **整合性境界**: 明確な集約ルート
|
|
34
|
+
- **正規化**: パフォーマンスと整合性のバランス
|
|
35
|
+
- **進化**: スキーマ変更を計画
|
|
36
|
+
|
|
37
|
+
### 6. エラーハンドリング哲学
|
|
38
|
+
- **フェイルファスト**: 早期に明確に検証
|
|
39
|
+
- **グレースフルデグラデーション**: 完全な失敗より部分的な機能
|
|
40
|
+
- **ユーザーコンテキスト**: アクション可能なエラーメッセージ
|
|
41
|
+
- **オブザーバビリティ**: 包括的なロギングとモニタリング
|
|
42
|
+
|
|
43
|
+
### 7. 統合パターン
|
|
44
|
+
- **疎結合**: 依存を最小化
|
|
45
|
+
- **コントラクトファースト**: 実装前にインターフェースを定義
|
|
46
|
+
- **バージョニング**: API進化を計画
|
|
47
|
+
- **べき等性**: リトライ安全に設計
|
|
48
|
+
- **コントラクト可視性**: APIとイベントコントラクトを design.md に表示し、`research.md` からの詳細にリンク
|
|
49
|
+
|
|
50
|
+
## ドキュメント標準
|
|
51
|
+
|
|
52
|
+
### 言語とトーン
|
|
53
|
+
- **宣言的**: 「システムはユーザーを認証する」であり「システムはユーザーを認証すべき」ではない
|
|
54
|
+
- **正確**: 曖昧な説明より具体的な技術用語
|
|
55
|
+
- **簡潔**: 本質的な情報のみ
|
|
56
|
+
- **フォーマル**: プロフェッショナルな技術文書
|
|
57
|
+
|
|
58
|
+
### 構造要件
|
|
59
|
+
- **階層的**: 明確なセクション構成
|
|
60
|
+
- **トレーサブル**: 要件からコンポーネントへのマッピング
|
|
61
|
+
- **完全**: 実装に必要なすべての側面をカバー
|
|
62
|
+
- **一貫性**: 全体で統一された用語
|
|
63
|
+
- **焦点を絞る**: design.md はアーキテクチャとコントラクトに集中。調査ログや長い比較は `research.md` に移動
|
|
64
|
+
|
|
65
|
+
## セクション作成ガイダンス
|
|
66
|
+
|
|
67
|
+
### 全体の順序
|
|
68
|
+
- デフォルトフロー: 概要 → 目標/非目標 → 要件トレーサビリティ → アーキテクチャ → 技術スタック → システムフロー → コンポーネント & インターフェース → データモデル → オプションセクション
|
|
69
|
+
- チームはトレーサビリティを前に移動したり、データモデルをアーキテクチャの近くに配置したりして明確さを改善できるが、セクション見出しは維持する
|
|
70
|
+
- 各セクション内で **サマリー → スコープ → 決定 → 影響/リスク** の順序に従い、レビュアーが一貫してスキャンできるようにする
|
|
71
|
+
|
|
72
|
+
### 要件ID
|
|
73
|
+
- 要件は `2.1, 2.3` のようにプレフィックスなしで参照(「Requirement 2.1」ではない)
|
|
74
|
+
- すべての要件には数値IDが必要。要件に数値IDがない場合、続行前に `requirements.md` を修正する
|
|
75
|
+
- `N.M` 形式の数値IDを使用。`N` は requirements.md のトップレベル要件番号(例: Requirement 1 → 1.1, 1.2; Requirement 2 → 2.1, 2.2)
|
|
76
|
+
- すべてのコンポーネント、タスク、トレーサビリティ行で同じ正規の数値IDを参照
|
|
77
|
+
|
|
78
|
+
### 技術スタック
|
|
79
|
+
- この機能に影響を受けるレイヤーのみを含める(フロントエンド、バックエンド、データ、メッセージング、インフラ)
|
|
80
|
+
- 各レイヤーでツール/ライブラリ + バージョン + 役割を指定。詳細な根拠、比較、ベンチマークは `research.md` に
|
|
81
|
+
- 既存システムを拡張する場合、現在のスタックからの逸脱を強調し、新しい依存関係をリスト
|
|
82
|
+
|
|
83
|
+
### システムフロー
|
|
84
|
+
- 振る舞いを明確にする場合のみ図を追加:
|
|
85
|
+
- **シーケンス**: マルチステップのインタラクション
|
|
86
|
+
- **プロセス/状態**: 分岐ルールまたはライフサイクル
|
|
87
|
+
- **データ/イベント**: パイプラインまたは非同期パターン
|
|
88
|
+
- 常に純粋なMermaidを使用。複雑なフローがない場合、セクション全体を省略
|
|
89
|
+
|
|
90
|
+
### 要件トレーサビリティ
|
|
91
|
+
- 標準テーブル(`Requirement | Summary | Components | Interfaces | Flows`)を使用してカバレッジを証明
|
|
92
|
+
- 単一の要件が1:1でコンポーネントにマップされる場合のみ、箇条書き形式に簡略化
|
|
93
|
+
- シンプルなマッピングにはコンポーネントサマリーテーブルを優先。複雑またはコンプライアンス重視の要件には完全なトレーサビリティテーブルを使用
|
|
94
|
+
- 要件やコンポーネントが変更されるたびにこのマッピングを再実行してドリフトを防ぐ
|
|
95
|
+
|
|
96
|
+
### コンポーネント & インターフェース作成
|
|
97
|
+
- コンポーネントをドメイン/レイヤーでグループ化し、コンポーネントごとに1ブロックを提供
|
|
98
|
+
- コンポーネント、ドメイン、意図、要件カバレッジ、主要な依存関係、選択されたコントラクトをリストするサマリーテーブルから始める
|
|
99
|
+
- テーブルフィールド: Intent(1行)、Requirements(`2.1, 2.3`)、Owner/Reviewers(オプション)
|
|
100
|
+
- 依存関係テーブルは各エントリを Inbound/Outbound/External としてマークし、Criticality(`P0` ブロッキング、`P1` 高リスク、`P2` 情報提供)を割り当てる
|
|
101
|
+
- 外部依存関係調査のサマリーはここに。詳細な調査(APIシグネチャ、レート制限、移行ノート)は `research.md` に
|
|
102
|
+
- design.md は自己完結したレビュアー向け成果物でなければならない。`research.md` は背景としてのみ参照し、結論や決定はここに記載
|
|
103
|
+
- コントラクト: 関連するタイプのみをチェック(Service/API/Event/Batch/State)。チェックされていないタイプは後のコンポーネントセクションに表示しない
|
|
104
|
+
- サービスインターフェースはメソッドシグネチャ、入出力、エラーエンベロープを宣言。API/Event/Batchコントラクトはトリガー、ペイロード、配信、べき等性をカバーするスキーマテーブルまたは箇条書きが必要
|
|
105
|
+
- **統合 & 移行ノート**、**バリデーションフック**、**オープンクエスチョン / リスク** を使用してロールアウト戦略、オブザーバビリティ、未解決の決定を文書化
|
|
106
|
+
- 詳細密度ルール:
|
|
107
|
+
- **フルブロック**: 新しい境界を導入するコンポーネント(ロジックフック、共有サービス、外部統合、データレイヤー)
|
|
108
|
+
- **サマリーのみ**: 新しい境界のないプレゼンテーショナル/UIコンポーネント(必要に応じて短い実装ノート付き)
|
|
109
|
+
- 実装ノートは統合 / バリデーション / リスクを単一の箇条書きサブセクションに統合して重複を減らす
|
|
110
|
+
- 短いデータ(依存関係、コントラクト選択)にはリストまたはインライン記述子を優先。テーブルは複数項目を比較する場合のみ使用
|
|
111
|
+
|
|
112
|
+
### 共有インターフェース & Props
|
|
113
|
+
- 繰り返しのUIコンポーネント用にベースインターフェース(例: `BaseUIPanelProps`)を定義し、差分のみをキャプチャするためにコンポーネントごとに拡張
|
|
114
|
+
- 新しいコントラクトを導入するフック、ユーティリティ、統合アダプターには完全なTypeScriptシグネチャを含める
|
|
115
|
+
- ベースコントラクトを再利用する場合、コードブロックを複製する代わりに明示的に参照(例: 「`BaseUIPanelProps` を `onSubmitAnswer` コールバックで拡張」)
|
|
116
|
+
|
|
117
|
+
### データモデル
|
|
118
|
+
- ドメインモデルは集約、エンティティ、値オブジェクト、ドメインイベント、不変条件をカバー。関係が非自明な場合のみMermaid図を追加
|
|
119
|
+
- 論理データモデルは構造、インデックス、シャーディング、変更に関連するストレージ固有の考慮事項(イベントストア、KV/ワイドカラム)を明確にする
|
|
120
|
+
- データコントラクト & 統合セクションは、機能が境界を越える場合のAPIペイロード、イベントスキーマ、クロスサービス同期パターンを文書化
|
|
121
|
+
- 長い型定義やベンダー固有のオプションオブジェクトは design.md 内の補足参照セクションに配置し、関連セクションからリンク。調査ノートは `research.md` に
|
|
122
|
+
- 補足参照の使用はオプション。メインボディにコンテンツを残すと可読性が低下する場合のみ作成。すべての決定はメインセクションに表示し、design.md が単独で成立するようにする
|
|
123
|
+
|
|
124
|
+
### エラー/テスト/セキュリティ/パフォーマンスセクション
|
|
125
|
+
- 機能固有の決定や逸脱のみを記録。ベースラインプラクティスについては組織全体の標準(ステアリング)にリンクまたは参照
|
|
126
|
+
|
|
127
|
+
### 図とテキストの重複排除
|
|
128
|
+
- 図の内容を文章で逐語的に繰り返さない。テキストは、ビジュアルから明らかでない主要な決定、トレードオフ、影響を強調するために使用
|
|
129
|
+
- 決定が図の注釈で完全にキャプチャされている場合、短い「主要な決定」箇条書きで十分
|
|
130
|
+
|
|
131
|
+
### 一般的な重複排除
|
|
132
|
+
- 概要、アーキテクチャ、コンポーネント間で同じ情報を繰り返さない。コンテキストが同じ場合は以前のセクションを参照
|
|
133
|
+
- 要件/コンポーネントの関係がサマリーテーブルでキャプチャされている場合、追加のニュアンスがない限り他で書き直さない
|
|
134
|
+
|
|
135
|
+
## 図ガイドライン
|
|
136
|
+
|
|
137
|
+
### 図を含めるタイミング
|
|
138
|
+
- **アーキテクチャ**: 3つ以上のコンポーネントまたは外部システムが相互作用する場合に構造図を使用
|
|
139
|
+
- **シーケンス**: コール/ハンドシェイクが複数ステップにまたがる場合にシーケンス図を描く
|
|
140
|
+
- **状態 / フロー**: 複雑な状態マシンまたはビジネスフローを専用の図でキャプチャ
|
|
141
|
+
- **ER**: 非自明なデータモデルにエンティティ関係図を提供
|
|
142
|
+
- **スキップ**: 軽微な単一コンポーネントの変更には通常図は不要
|
|
143
|
+
|
|
144
|
+
### Mermaid要件
|
|
145
|
+
```mermaid
|
|
146
|
+
graph TB
|
|
147
|
+
Client --> ApiGateway
|
|
148
|
+
ApiGateway --> ServiceA
|
|
149
|
+
ApiGateway --> ServiceB
|
|
150
|
+
ServiceA --> Database
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- **純粋なMermaidのみ** – カスタムスタイリングやサポートされていない構文を避ける
|
|
154
|
+
- **ノードID** – 英数字とアンダースコアのみ(例: `Client`, `ServiceA`)。`@`, `/`, または先頭の `-` は使用しない
|
|
155
|
+
- **ラベル** – シンプルな単語。括弧 `()`, 角括弧 `[]`, 引用符 `"`, スラッシュ `/` を埋め込まない
|
|
156
|
+
- ❌ `DnD[@dnd-kit/core]` → 無効なID(`@`)
|
|
157
|
+
- ❌ `UI[KanbanBoard(React)]` → 無効なラベル(`()`)
|
|
158
|
+
- ✅ `DndKit[dnd-kit core]` → ラベルにはプレーンテキストを使用し、技術詳細は付随する説明に記載
|
|
159
|
+
- ℹ️ Mermaid strict-mode は `Expecting 'SQE' ... got 'PS'` のようなエラーで失敗する。レンダリング前にラベルから句読点を削除
|
|
160
|
+
- **エッジ** – データまたは制御フローの方向を示す
|
|
161
|
+
- **グループ** – Mermaid subgraph を使用して関連コンポーネントをクラスタリングすることは許可。明確さのために控えめに使用
|
|
162
|
+
|
|
163
|
+
## 品質メトリクス
|
|
164
|
+
### 設計完全性チェックリスト
|
|
165
|
+
- すべての要件に対応
|
|
166
|
+
- 実装詳細の漏れなし
|
|
167
|
+
- 明確なコンポーネント境界
|
|
168
|
+
- 明示的なエラーハンドリング
|
|
169
|
+
- 包括的なテスト戦略
|
|
170
|
+
- セキュリティを考慮
|
|
171
|
+
- パフォーマンス目標を定義
|
|
172
|
+
- 移行パスが明確(該当する場合)
|
|
173
|
+
|
|
174
|
+
### 避けるべき一般的なアンチパターン
|
|
175
|
+
❌ 設計と実装の混在
|
|
176
|
+
❌ 曖昧なインターフェース定義
|
|
177
|
+
❌ 欠落したエラーシナリオ
|
|
178
|
+
❌ 無視された非機能要件
|
|
179
|
+
❌ 過度に複雑なアーキテクチャ
|
|
180
|
+
❌ コンポーネント間の密結合
|
|
181
|
+
❌ データ整合性戦略の欠如
|
|
182
|
+
❌ 不完全な依存関係分析
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# 設計レビュープロセス
|
|
2
|
+
|
|
3
|
+
## 目的
|
|
4
|
+
技術設計ドキュメントのインタラクティブな品質レビューを実施し、許容可能なリスクで実装に進むのに十分堅牢であることを確認する。
|
|
5
|
+
|
|
6
|
+
## レビュー哲学
|
|
7
|
+
- **品質保証であり、完璧の追求ではない**
|
|
8
|
+
- **クリティカルフォーカス**: 最も重要な懸念事項を3つに限定
|
|
9
|
+
- **インタラクティブな対話**: 一方的な評価ではなく、設計者との対話
|
|
10
|
+
- **バランスの取れた評価**: 長所と短所の両方を認識
|
|
11
|
+
- **明確な決定**: 根拠付きの明確なGO/NO-GO
|
|
12
|
+
|
|
13
|
+
## スコープ & 非目標
|
|
14
|
+
|
|
15
|
+
- スコープ: プロジェクトコンテキストと標準に対して設計ドキュメントの品質を評価し、GO/NO-GOを決定
|
|
16
|
+
- 非目標: 実装レベルの設計、深い技術調査、技術選択の最終決定は行わない。そのような項目は設計フェーズのイテレーションに延期
|
|
17
|
+
|
|
18
|
+
## コアレビュー基準
|
|
19
|
+
|
|
20
|
+
### 1. 既存アーキテクチャとの整合(クリティカル)
|
|
21
|
+
- 既存システム境界とレイヤーとの統合
|
|
22
|
+
- 確立されたアーキテクチャパターンとの一貫性
|
|
23
|
+
- 適切な依存方向と結合管理
|
|
24
|
+
- 現在のモジュール構成との整合
|
|
25
|
+
|
|
26
|
+
### 2. 設計の一貫性と標準
|
|
27
|
+
- プロジェクトの命名規則とコード標準への準拠
|
|
28
|
+
- 一貫したエラーハンドリングとロギング戦略
|
|
29
|
+
- 統一された設定と依存関係管理
|
|
30
|
+
- 確立されたデータモデリングパターンとの整合
|
|
31
|
+
|
|
32
|
+
### 3. 拡張性と保守性
|
|
33
|
+
- 将来の要件に対する設計の柔軟性
|
|
34
|
+
- 関心の明確な分離と単一責任
|
|
35
|
+
- テスタビリティとデバッグの考慮
|
|
36
|
+
- 要件に対する適切な複雑さ
|
|
37
|
+
|
|
38
|
+
### 4. 型安全とインターフェース設計
|
|
39
|
+
- 適切な型定義とインターフェースコントラクト
|
|
40
|
+
- 安全でないパターンの回避(例: TypeScriptでの `any`)
|
|
41
|
+
- 明確なAPI境界とデータ構造
|
|
42
|
+
- 入力バリデーションとエラーハンドリングのカバレッジ
|
|
43
|
+
|
|
44
|
+
## レビュープロセス
|
|
45
|
+
|
|
46
|
+
### ステップ1: 分析
|
|
47
|
+
すべてのレビュー基準に対して設計を分析し、統合、保守性、複雑さ、要件充足に影響するクリティカルな問題に焦点を当てる。
|
|
48
|
+
|
|
49
|
+
### ステップ2: クリティカルな問題を特定(≤3)
|
|
50
|
+
各問題について:
|
|
51
|
+
```
|
|
52
|
+
🔴 **クリティカルな問題 [1-3]**: [簡潔なタイトル]
|
|
53
|
+
**懸念**: [具体的な問題]
|
|
54
|
+
**影響**: [なぜ重要か]
|
|
55
|
+
**提案**: [具体的な改善案]
|
|
56
|
+
**トレーサビリティ**: [requirements.mdの要件ID/セクション]
|
|
57
|
+
**根拠**: [設計ドキュメントのセクション/見出し]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### ステップ3: 長所を認識
|
|
61
|
+
バランスの取れたフィードバックを維持するため、1〜2つの強い側面を認める。
|
|
62
|
+
|
|
63
|
+
### ステップ4: GO/NO-GOの決定
|
|
64
|
+
- **GO**: クリティカルなアーキテクチャ不整合なし、要件対応済み、明確な実装パス、許容可能なリスク
|
|
65
|
+
- **NO-GO**: 根本的な競合、クリティカルなギャップ、高い失敗リスク、不釣り合いな複雑さ
|
|
66
|
+
|
|
67
|
+
## トレーサビリティと根拠
|
|
68
|
+
|
|
69
|
+
- 各クリティカルな問題を `requirements.md` の関連要件(IDまたはセクション)にリンク
|
|
70
|
+
- 評価を裏付ける設計ドキュメント内の根拠箇所(セクション/見出し、図、成果物)を引用
|
|
71
|
+
- 該当する場合、問題を正当化するためにステアリングコンテキストからの制約を参照
|
|
72
|
+
|
|
73
|
+
## 出力フォーマット
|
|
74
|
+
|
|
75
|
+
### 設計レビューサマリー
|
|
76
|
+
全体的な品質と準備状況について2〜3文。
|
|
77
|
+
|
|
78
|
+
### クリティカルな問題(≤3)
|
|
79
|
+
各項目: 問題、影響、推奨事項、トレーサビリティ(例: 1.1, 1.2)、根拠(design.mdセクション)。
|
|
80
|
+
|
|
81
|
+
### 設計の長所
|
|
82
|
+
1〜2つのポジティブな側面。
|
|
83
|
+
|
|
84
|
+
### 最終評価
|
|
85
|
+
決定(GO/NO-GO)、根拠(1〜2文)、次のステップ。
|
|
86
|
+
|
|
87
|
+
### インタラクティブディスカッション
|
|
88
|
+
設計者の視点、代替案、明確化、必要な変更について対話。
|
|
89
|
+
|
|
90
|
+
## 長さとフォーカス
|
|
91
|
+
|
|
92
|
+
- サマリー: 2〜3文
|
|
93
|
+
- 各クリティカルな問題: 合計5〜7行(問題/影響/推奨事項/トレーサビリティ/根拠を含む)
|
|
94
|
+
- 全体のレビュー: 簡潔に(目安約400語)
|
|
95
|
+
|
|
96
|
+
## レビューガイドライン
|
|
97
|
+
|
|
98
|
+
1. **クリティカルフォーカス**: 成功に大きく影響する問題のみをフラグ
|
|
99
|
+
2. **建設的なトーン**: 批判だけでなく解決策を提供
|
|
100
|
+
3. **インタラクティブなアプローチ**: 一方的な評価ではなく対話を行う
|
|
101
|
+
4. **バランスの取れた評価**: 長所と短所の両方を認識
|
|
102
|
+
5. **明確な決定**: 明確なGO/NO-GO推奨を行う
|
|
103
|
+
6. **アクション可能なフィードバック**: すべての提案が実装可能であることを確認
|
|
104
|
+
|
|
105
|
+
## 最終チェックリスト
|
|
106
|
+
|
|
107
|
+
- **クリティカルな問題 ≤ 3** かつ各問題に影響と推奨事項を含む
|
|
108
|
+
- **トレーサビリティ**: 各問題が要件ID/セクションを参照
|
|
109
|
+
- **根拠**: 各問題が設計ドキュメントの場所を引用
|
|
110
|
+
- **決定**: 明確な根拠と次のステップを伴うGO/NO-GO
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# EARSフォーマットガイドライン
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
EARS(Easy Approach to Requirements Syntax)は、仕様駆動開発における受け入れ基準の標準フォーマット。
|
|
5
|
+
|
|
6
|
+
EARSパターンは要件の論理構造(条件 + 主体 + 応答)を記述し、特定の自然言語に縛られない。
|
|
7
|
+
すべての受け入れ基準は、仕様で設定されたターゲット言語(例: `spec.json.language` / `ja`)で記述すること。
|
|
8
|
+
EARSのトリガーキーワードと固定フレーズは英語のまま(`When`, `If`, `While`, `Where`, `The system shall`, `The [system] shall`)とし、可変部分(`[event]`, `[precondition]`, `[trigger]`, `[feature is included]`, `[response/action]`)のみターゲット言語にローカライズする。トリガーや固定英語フレーズの中にターゲット言語のテキストを混ぜないこと。
|
|
9
|
+
|
|
10
|
+
## 主要なEARSパターン
|
|
11
|
+
|
|
12
|
+
### 1. イベント駆動型要件
|
|
13
|
+
- **パターン**: When [event], the [system] shall [response/action]
|
|
14
|
+
- **ユースケース**: 特定のイベントやトリガーへの応答
|
|
15
|
+
- **例**: When ユーザーがチェックアウトボタンをクリック, the Checkout Service shall カート内容を検証
|
|
16
|
+
|
|
17
|
+
### 2. 状態駆動型要件
|
|
18
|
+
- **パターン**: While [precondition], the [system] shall [response/action]
|
|
19
|
+
- **ユースケース**: システム状態や前提条件に依存する振る舞い
|
|
20
|
+
- **例**: While 支払い処理中, the Checkout Service shall ローディングインジケーターを表示
|
|
21
|
+
|
|
22
|
+
### 3. 望ましくない振る舞いへの要件
|
|
23
|
+
- **パターン**: If [trigger], the [system] shall [response/action]
|
|
24
|
+
- **ユースケース**: エラー、障害、望ましくない状況へのシステム応答
|
|
25
|
+
- **例**: If 無効なクレジットカード番号が入力された, then the website shall エラーメッセージを表示
|
|
26
|
+
|
|
27
|
+
### 4. オプション機能要件
|
|
28
|
+
- **パターン**: Where [feature is included], the [system] shall [response/action]
|
|
29
|
+
- **ユースケース**: オプションまたは条件付き機能の要件
|
|
30
|
+
- **例**: Where 車にサンルーフが搭載されている, the car shall サンルーフコントロールパネルを持つ
|
|
31
|
+
|
|
32
|
+
### 5. ユビキタス要件
|
|
33
|
+
- **パターン**: The [system] shall [response/action]
|
|
34
|
+
- **ユースケース**: 常時有効な要件と基本的なシステム特性
|
|
35
|
+
- **例**: The モバイルフォン shall 重量100グラム未満とする
|
|
36
|
+
|
|
37
|
+
## 複合パターン
|
|
38
|
+
- While [precondition], when [event], the [system] shall [response/action]
|
|
39
|
+
- When [event] and [additional condition], the [system] shall [response/action]
|
|
40
|
+
|
|
41
|
+
## 主体選択ガイドライン
|
|
42
|
+
- **ソフトウェアプロジェクト**: 具体的なシステム/サービス名を使用(例: 「Checkout Service」、「User Auth Module」)
|
|
43
|
+
- **プロセス/ワークフロー**: 責任チーム/役割を使用(例: 「サポートチーム」、「レビュープロセス」)
|
|
44
|
+
- **ソフトウェア以外**: 適切な主体を使用(例: 「マーケティングキャンペーン」、「ドキュメント」)
|
|
45
|
+
|
|
46
|
+
## 品質基準
|
|
47
|
+
- 要件はテスト可能、検証可能であり、単一の振る舞いを記述すること。
|
|
48
|
+
- 客観的な言語を使用: 必須の振る舞いには「shall」、推奨には「should」。曖昧な用語は避ける。
|
|
49
|
+
- EARS構文に従う: [condition], the [system] shall [response/action]。
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
以下は、Next.js(App Router) 15系および React 19 系の公式ドキュメントに準拠した実装ガイドです。
|
|
2
|
+
このルールを使用する際に「フロントエンドのルールを確認しました」と表示してください。
|
|
3
|
+
|
|
4
|
+
## Code Generation
|
|
5
|
+
- コードを生成する前に、必ず関連するドキュメントを確認する
|
|
6
|
+
- フレームワークやライブラリの使用方法については、必ず公式ドキュメントを参照する
|
|
7
|
+
- ドキュメントをもとにベストプラクティスを検証する
|
|
8
|
+
- CSSはTailwindCSSを使用すること
|
|
9
|
+
|
|
10
|
+
## Required Documentation
|
|
11
|
+
- Next.js: https://nextjs.org/docs
|
|
12
|
+
- React 19: https://react.dev
|
|
13
|
+
- TypeScript: https://www.typescriptlang.org/docs/
|
|
14
|
+
- tailwindcss:https://tailwindcss.com/docs/
|
|
15
|
+
|
|
16
|
+
## 1. プロジェクト基本方針
|
|
17
|
+
- App Router を前提とし、Server Components を既定とする。
|
|
18
|
+
- データ取得はサーバー優先(`fetch` と Next.js のキャッシュ戦略を活用)。
|
|
19
|
+
- UI層(表示)とロジック層(データ取得・処理)を明確に分離し、コンポーネントをシンプルに保つ。
|
|
20
|
+
- UI はクライアント側でインタラクションが必要な箇所のみ `'use client'` を付ける。
|
|
21
|
+
- ディレクトリ名は機能や役割が明確に分かる命名(例:`NewFeatureListItemPage`, `Header`)
|
|
22
|
+
- ファイル名はケバブケースかつ処理や役割が分かる命名にしてください。 (button.tsx, use-theme-color.ts)
|
|
23
|
+
- コンポーネント名はパスカルケースを使用します。(例: `HeaderBreadcrumb`, `NewFeatureDropdown`)
|
|
24
|
+
|
|
25
|
+
## 2. ディレクトリ構成
|
|
26
|
+
- ヘッダー関連のコンポーネント(例: `Header.tsx`, `HeaderBreadcrumb.tsx`
|
|
27
|
+
- モーダル関連のコンポーネント(例: `ArchiveNewFeatureModal.tsx`)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## 3. ルーティングとメタデータ
|
|
31
|
+
- Next.js App Router を使用する。React Router は使用しない。
|
|
32
|
+
- 動的セグメント `[id]`, キャッチオール `[...slug]` を使用。
|
|
33
|
+
- SSG が必要な場合は `generateStaticParams` を実装。
|
|
34
|
+
- `Link` を優先。クライアント側で制御が必要な場合のみ `'use client'` + `useRouter()` を使用(`push`, `replace`, `prefetch`)。
|
|
35
|
+
- メタは `generateMetadata`(動的)または `layout.tsx` の `export const metadata`(静的)。
|
|
36
|
+
- サーバーサイドの遷移は必要に応じて`redirect()`・`notFound()` を使用する。
|
|
37
|
+
|
|
38
|
+
## 4. データ取得・キャッシュ
|
|
39
|
+
- 既定はサーバーで `fetch`。頻度に応じて以下を設定:
|
|
40
|
+
- リアルタイム/常に最新: `cache: 'no-store'`
|
|
41
|
+
- ISR: `next: { revalidate: 秒 }` または `export const revalidate = 秒`
|
|
42
|
+
- タグ付き再検証: `revalidateTag` と `cacheTag` を活用(必要時)。
|
|
43
|
+
|
|
44
|
+
## 5. クライアントコンポーネントの指針
|
|
45
|
+
- フォーム、イベント、アニメーションなどのみ `'use client'` を付与。
|
|
46
|
+
- ルーター操作は `useRouter()`、リンクは `Link` を優先。
|
|
47
|
+
- クライアント側の遷移/分岐は `useRouter().push/replace`・`Link`・条件描画で扱う(`redirect()` / `notFound()` はサーバー側のみ)。
|
|
48
|
+
|
|
49
|
+
## 6. 状態管理
|
|
50
|
+
- ローカル: `useState`, `useReducer`。
|
|
51
|
+
- グローバル: Context で十分な場合は Context。外部状態管理は必要性を精査して導入。
|
|
52
|
+
|
|
53
|
+
## 7. フォームとアクション
|
|
54
|
+
- サーバーアクション(`'use server'`)の利用を検討。副作用はサーバーへ寄せる。
|
|
55
|
+
- 従来の API ルートは `app/api/**/route.ts` で実装(`GET/POST` エクスポート)。
|
|
56
|
+
|
|
57
|
+
## 8. エラーハンドリング
|
|
58
|
+
- `error.tsx` と `not-found.tsx` をルート直下に配置し、グローバル扱いする。
|
|
59
|
+
- 例外はサーバー側で投げ、UI で適切にフォールバック(`loading.tsx` も活用)。
|
|
60
|
+
|
|
61
|
+
## 9. パフォーマンス
|
|
62
|
+
- 画像は `next/image`。フォントは `next/font`。
|
|
63
|
+
- クライアントバンドルを最小化(不要な `'use client'` を避ける)。
|
|
64
|
+
|
|
65
|
+
## 10. 命名・可読性
|
|
66
|
+
- ディレクトリ: 機能名で明確に。
|
|
67
|
+
- ファイル,コンポーネント: パスカルケース(例: `UserTable.tsx`, `UseSelectedIds.ts`)。
|
|
68
|
+
|
|
69
|
+
## 11. TypeScript
|
|
70
|
+
- すべて型定義。公開 API/props は明示的な型注釈。
|
|
71
|
+
- `any` は禁止。ユーティリティ型を積極活用。
|
|
72
|
+
- 型の集約: プロジェクト共通の型は `types/index.ts` に集約し、各所からは同ファイル経由でインポートする。
|
|
73
|
+
- 機能固有の型: `features/<feature>/domain` に配置可。共有が必要になった時点で `types/index.ts` へ移し、参照を置換する。
|
|
74
|
+
- API 型: リクエスト/レスポンスの型も `types/index.ts` に定義して一元管理する。
|
|
75
|
+
|
|
76
|
+
## 12. CSS
|
|
77
|
+
- Tailwind CSS を使用し、ユーティリティクラスで構成。
|
|
78
|
+
- コンポーネント外観は既存デザイン指針に従い、独自変更は承認必須。
|
|
79
|
+
- `className` の合成は既定で `clsx` を使用する。
|
|
80
|
+
|
|
81
|
+
## 13. ドキュメント(JSDoc)
|
|
82
|
+
- 公開コンポーネント/関数/型には JSDoc を付与する。
|
|
83
|
+
- 最低限含める項目: 概要、`@param`、`@returns`、必要に応じて `@remarks`、`@example`、`@throws`。
|
|
84
|
+
- API ルートやサーバーアクションは副作用・例外・認可要件を明記する。
|
|
85
|
+
- 複雑なドメインロジックでは「なぜこの設計か」を簡潔に説明する。
|
|
86
|
+
- ファイル先頭に、そのファイルの目的が一目で分かるコメントを日本語で記載
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
出典: Next.js Docs(App Router, Data Fetching, Route Handlers, Metadata 等) / React Docs(Components, Hooks, State 等)
|
|
90
|
+
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# ギャップ分析プロセス
|
|
2
|
+
|
|
3
|
+
## 目的
|
|
4
|
+
要件と既存コードベースのギャップを分析し、実装戦略の決定に情報を提供する。
|
|
5
|
+
|
|
6
|
+
## 分析フレームワーク
|
|
7
|
+
|
|
8
|
+
### 1. 現状調査
|
|
9
|
+
|
|
10
|
+
- ドメイン関連アセットをスキャン:
|
|
11
|
+
- 主要ファイル/モジュールとディレクトリレイアウト
|
|
12
|
+
- 再利用可能なコンポーネント/サービス/ユーティリティ
|
|
13
|
+
- 支配的なアーキテクチャパターンと制約
|
|
14
|
+
|
|
15
|
+
- 規約を抽出:
|
|
16
|
+
- 命名、レイヤリング、依存方向
|
|
17
|
+
- インポート/エクスポートパターンと依存ホットスポット
|
|
18
|
+
- テストの配置とアプローチ
|
|
19
|
+
|
|
20
|
+
- 統合サーフェスを記録:
|
|
21
|
+
- データモデル/スキーマ、APIクライアント、認証メカニズム
|
|
22
|
+
|
|
23
|
+
### 2. 要件実現可能性分析
|
|
24
|
+
|
|
25
|
+
- EARS要件から技術的ニーズをリストアップ:
|
|
26
|
+
- データモデル、API/サービス、UI/コンポーネント
|
|
27
|
+
- ビジネスルール/バリデーション
|
|
28
|
+
- 非機能要件: セキュリティ、パフォーマンス、スケーラビリティ、信頼性
|
|
29
|
+
|
|
30
|
+
- ギャップと制約を特定:
|
|
31
|
+
- 現在のコードベースに欠けている機能
|
|
32
|
+
- 後で調査が必要な未知項目(「要調査」としてマーク)
|
|
33
|
+
- 既存アーキテクチャとパターンからの制約
|
|
34
|
+
|
|
35
|
+
- 複雑さのシグナルを記録:
|
|
36
|
+
- シンプルなCRUD / アルゴリズムロジック / ワークフロー / 外部統合
|
|
37
|
+
|
|
38
|
+
### 3. 実装アプローチオプション
|
|
39
|
+
|
|
40
|
+
#### オプションA: 既存コンポーネントの拡張
|
|
41
|
+
**検討する場合**: 機能が既存構造に自然にフィットする
|
|
42
|
+
|
|
43
|
+
- **拡張するファイル/モジュール**:
|
|
44
|
+
- 変更が必要な具体的ファイルを特定
|
|
45
|
+
- 既存機能への影響を評価
|
|
46
|
+
- 後方互換性の懸念を評価
|
|
47
|
+
|
|
48
|
+
- **互換性評価**:
|
|
49
|
+
- 拡張が既存インターフェースを尊重しているか確認
|
|
50
|
+
- 消費者への破壊的変更がないか検証
|
|
51
|
+
- テストカバレッジへの影響を評価
|
|
52
|
+
|
|
53
|
+
- **複雑さと保守性**:
|
|
54
|
+
- 追加機能の認知負荷を評価
|
|
55
|
+
- 単一責任原則が維持されているか確認
|
|
56
|
+
- ファイルサイズが管理可能な範囲か評価
|
|
57
|
+
|
|
58
|
+
**トレードオフ**:
|
|
59
|
+
- ✅ 新規ファイル最小、初期開発が速い
|
|
60
|
+
- ✅ 既存パターンとインフラを活用
|
|
61
|
+
- ❌ 既存コンポーネントの肥大化リスク
|
|
62
|
+
- ❌ 既存ロジックが複雑化する可能性
|
|
63
|
+
|
|
64
|
+
#### オプションB: 新規コンポーネントの作成
|
|
65
|
+
**検討する場合**: 機能が明確な責任を持つ、または既存コンポーネントが既に複雑
|
|
66
|
+
|
|
67
|
+
- **新規作成の根拠**:
|
|
68
|
+
- 関心の明確な分離が新規ファイルを正当化
|
|
69
|
+
- 既存コンポーネントが既に複雑
|
|
70
|
+
- 機能が異なるライフサイクルや依存関係を持つ
|
|
71
|
+
|
|
72
|
+
- **統合ポイント**:
|
|
73
|
+
- 新コンポーネントが既存システムにどう接続するか
|
|
74
|
+
- 公開するAPIまたはインターフェース
|
|
75
|
+
- 既存コンポーネントへの依存
|
|
76
|
+
|
|
77
|
+
- **責任境界**:
|
|
78
|
+
- 新コンポーネントが所有するものの明確な定義
|
|
79
|
+
- 既存コンポーネントとのインターフェース
|
|
80
|
+
- データフローと制御フロー
|
|
81
|
+
|
|
82
|
+
**トレードオフ**:
|
|
83
|
+
- ✅ 関心のクリーンな分離
|
|
84
|
+
- ✅ 分離したテストが容易
|
|
85
|
+
- ✅ 既存コンポーネントの複雑さを軽減
|
|
86
|
+
- ❌ ナビゲートするファイルが増加
|
|
87
|
+
- ❌ 慎重なインターフェース設計が必要
|
|
88
|
+
|
|
89
|
+
#### オプションC: ハイブリッドアプローチ
|
|
90
|
+
**検討する場合**: 拡張と新規作成の両方が必要な複雑な機能
|
|
91
|
+
|
|
92
|
+
- **組み合わせ戦略**:
|
|
93
|
+
- どの部分が既存コンポーネントを拡張するか
|
|
94
|
+
- どの部分が新規コンポーネントを必要とするか
|
|
95
|
+
- 相互作用の方法
|
|
96
|
+
|
|
97
|
+
- **段階的実装**:
|
|
98
|
+
- 初期フェーズ: 最小限の実行可能な変更
|
|
99
|
+
- 後続フェーズ: リファクタリングまたは新規コンポーネント
|
|
100
|
+
- 必要に応じた移行戦略
|
|
101
|
+
|
|
102
|
+
- **リスク軽減**:
|
|
103
|
+
- 段階的ロールアウトアプローチ
|
|
104
|
+
- フィーチャーフラグまたは設定
|
|
105
|
+
- ロールバック戦略
|
|
106
|
+
|
|
107
|
+
**トレードオフ**:
|
|
108
|
+
- ✅ 複雑な機能に対するバランスの取れたアプローチ
|
|
109
|
+
- ✅ 反復的な改善が可能
|
|
110
|
+
- ❌ より複雑な計画が必要
|
|
111
|
+
- ❌ 適切に調整されないと不整合の可能性
|
|
112
|
+
|
|
113
|
+
### 4. ギャップ分析のスコープ外
|
|
114
|
+
|
|
115
|
+
- 深い調査活動は設計フェーズに延期する
|
|
116
|
+
- 未知項目は簡潔な「要調査」項目としてのみ記録
|
|
117
|
+
|
|
118
|
+
### 5. 実装の複雑さとリスク
|
|
119
|
+
|
|
120
|
+
- 工数:
|
|
121
|
+
- B(1〜3日): 既存パターン、最小限の依存、簡単な統合
|
|
122
|
+
- A(3〜7日): いくつかの新パターン/統合、中程度の複雑さ
|
|
123
|
+
- S(1〜2週間): 重要な機能、複数の統合またはワークフロー
|
|
124
|
+
- SS(2週間以上): アーキテクチャ変更、未知の技術、広範な影響
|
|
125
|
+
- リスク:
|
|
126
|
+
- 高: 未知の技術、複雑な統合、アーキテクチャシフト、不明確なパフォーマンス/セキュリティパス
|
|
127
|
+
- 中: ガイダンス付きの新パターン、管理可能な統合、既知のパフォーマンスソリューション
|
|
128
|
+
- 低: 確立されたパターンの拡張、馴染みのある技術、明確なスコープ、最小限の統合
|
|
129
|
+
|
|
130
|
+
### 出力チェックリスト
|
|
131
|
+
|
|
132
|
+
- ギャップがタグ付けされた要件-アセットマップ(欠落 / 未知 / 制約)
|
|
133
|
+
- 短い根拠とトレードオフ付きのオプションA/B/C
|
|
134
|
+
- 工数(S/M/L/XL)とリスク(高/中/低)、各1行の正当化
|
|
135
|
+
- 設計フェーズへの推奨事項:
|
|
136
|
+
- 推奨アプローチと主要な決定事項
|
|
137
|
+
- 引き継ぐ調査項目
|
|
138
|
+
|
|
139
|
+
## 原則
|
|
140
|
+
|
|
141
|
+
- **決定より情報**: 分析とオプションを提供し、最終決定はしない
|
|
142
|
+
- **複数の実行可能オプション**: 該当する場合、信頼できる代替案を提示
|
|
143
|
+
- **明示的なギャップと仮定**: 未知項目と制約を明確にフラグ
|
|
144
|
+
- **コンテキスト認識**: 既存パターンとアーキテクチャ制限に合わせる
|
|
145
|
+
- **透明な工数とリスク**: ラベルを簡潔に正当化
|