yodogawa 1.0.0

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.
Files changed (61) hide show
  1. package/.windsurf/templates/documentation-rules.md +143 -0
  2. package/.windsurf/templates/project/01-requirements/01-system-overview.md +49 -0
  3. package/.windsurf/templates/project/01-requirements/02-features-implemented.md +73 -0
  4. package/.windsurf/templates/project/01-requirements/03-features-planned.md +75 -0
  5. package/.windsurf/templates/project/01-requirements/04-non-functional-requirements.md +115 -0
  6. package/.windsurf/templates/project/01-requirements/05-user-stories.md +124 -0
  7. package/.windsurf/templates/project/02-behavior/01-scenarios.md +406 -0
  8. package/.windsurf/templates/project/03-domain/01-domain-model.md +338 -0
  9. package/.windsurf/templates/project/03-domain/02-ubiquitous-language.md +153 -0
  10. package/.windsurf/templates/project/04-design/01-tech-stack.md +360 -0
  11. package/.windsurf/templates/project/04-design/02-repository-structure.md +390 -0
  12. package/.windsurf/templates/project/04-design/03-screen-design.md +586 -0
  13. package/.windsurf/templates/project/04-design/04-data-model.md +211 -0
  14. package/.windsurf/templates/project/04-design/05-api-spec.md +221 -0
  15. package/.windsurf/templates/project/04-design/06-architecture.md +183 -0
  16. package/.windsurf/templates/project/04-design/07-infrastructure.md +180 -0
  17. package/.windsurf/templates/tasks/task-template/a-definition.md +143 -0
  18. package/.windsurf/templates/tasks/task-template/b-research.md +185 -0
  19. package/.windsurf/templates/tasks/task-template/c-implementation.md +197 -0
  20. package/.windsurf/workflows/a-001-SetupDocStructure.md +165 -0
  21. package/.windsurf/workflows/a-002-InitializeProject.md +229 -0
  22. package/.windsurf/workflows/a-003-CreateScenarios.md +130 -0
  23. package/.windsurf/workflows/a-004-DefineDomainModel.md +133 -0
  24. package/.windsurf/workflows/a-005-CreateDomainDiagram.md +114 -0
  25. package/.windsurf/workflows/a-006-ReviewRequirementsDomain.md +132 -0
  26. package/.windsurf/workflows/a-007-DefineTechStack.md +121 -0
  27. package/.windsurf/workflows/a-008-DefineRepositoryStructure.md +118 -0
  28. package/.windsurf/workflows/a-009-DefineScreenDesign.md +121 -0
  29. package/.windsurf/workflows/a-010-DefineDataModel.md +125 -0
  30. package/.windsurf/workflows/a-011-DefineAPISpec.md +123 -0
  31. package/.windsurf/workflows/a-012-DefineArchitecture.md +119 -0
  32. package/.windsurf/workflows/a-013-DefineInfrastructure.md +120 -0
  33. package/.windsurf/workflows/a-014-ReviewDesign.md +122 -0
  34. package/.windsurf/workflows/b-001-CreateTaskDirectory.md +71 -0
  35. package/.windsurf/workflows/b-002-CreateTaskDefinition.md +165 -0
  36. package/.windsurf/workflows/b-003-CreateTaskResearch.md +412 -0
  37. package/.windsurf/workflows/b-004-CreateTaskImplementation.md +97 -0
  38. package/.windsurf/workflows/b-005-ReviewTask.md +312 -0
  39. package/.windsurf/workflows/c-001-ImplementTask.md +493 -0
  40. package/.windsurf/workflows/c-002-UpdateDocumentation.md +797 -0
  41. package/.windsurf/workflows/x-Accessibility-Check.md +469 -0
  42. package/.windsurf/workflows/x-Bundle-Optimize.md +386 -0
  43. package/.windsurf/workflows/x-CI-FixFailure.md +636 -0
  44. package/.windsurf/workflows/x-CI-Setup.md +641 -0
  45. package/.windsurf/workflows/x-Code-Refactor.md +71 -0
  46. package/.windsurf/workflows/x-Code-ResearchAndReview.md +78 -0
  47. package/.windsurf/workflows/x-Component-Create.md +359 -0
  48. package/.windsurf/workflows/x-Context-CatchUp.md +63 -0
  49. package/.windsurf/workflows/x-Database-Seed.md +300 -0
  50. package/.windsurf/workflows/x-Dependencies-Update.md +315 -0
  51. package/.windsurf/workflows/x-DevEnvironment-Setup.md +437 -0
  52. package/.windsurf/workflows/x-Logging-Add.md +682 -0
  53. package/.windsurf/workflows/x-Migration-Create.md +354 -0
  54. package/.windsurf/workflows/x-Problem-RootCauseAnalysis.md +65 -0
  55. package/.windsurf/workflows/x-Repository-Push.md +375 -0
  56. package/.windsurf/workflows/x-Repository-PushToGithub.md +72 -0
  57. package/.windsurf/workflows/x-Requirements-Clarify.md +61 -0
  58. package/.windsurf/workflows/z-CreateWorkflow.md +77 -0
  59. package/README.md +280 -0
  60. package/bin/cli.js +74 -0
  61. package/package.json +28 -0
@@ -0,0 +1,211 @@
1
+ # データモデル(ERD)
2
+
3
+ <!--
4
+ 何を書くか: データベース構造、エンティティ、属性、リレーションシップ、制約
5
+
6
+ 目的:
7
+ - データ構造の全体像を可視化
8
+ - テーブル設計の一貫性を保つ
9
+ - 開発者間の認識統一
10
+ - データの整合性ルールを明確化
11
+ - マイグレーション計画の基盤
12
+
13
+ 重要性:
14
+ - データベース設計の記録(ADR: Architecture Decision Record の一部)
15
+ - 正規化・非正規化の判断根拠を記録
16
+ - パフォーマンス最適化の指針
17
+ - データ整合性の担保
18
+ - 将来の拡張性を考慮した設計
19
+
20
+ 記載のポイント:
21
+ - Mermaid ERD で視覚的に表現
22
+ - エンティティごとに責務を明確化
23
+ - リレーションシップと多重度を正確に記載
24
+ - 制約(NOT NULL, UNIQUE, CHECK)を明記
25
+ - インデックス戦略を記録
26
+ - データ型の選択理由を記載
27
+
28
+ 更新頻度:
29
+ - プロジェクト初期にドメインモデルから作成
30
+ - テーブル追加・変更時に更新
31
+ - マイグレーション実行時に更新
32
+ - パフォーマンスチューニング時に見直し
33
+ -->
34
+
35
+ ---
36
+
37
+ ## エンティティ一覧
38
+
39
+ <!--
40
+ 各エンティティの責務と主要属性を明記
41
+
42
+ まずエンティティの一覧を把握してから、ERDで視覚化する流れが自然です。
43
+
44
+ テーブル構成:
45
+ 【エンティティ名】
46
+ - テーブル名(物理名)
47
+ - 複数形推奨(例: users, orders, products)
48
+ - スネークケース推奨(例: order_items, user_roles)
49
+
50
+ 【説明】
51
+ - そのエンティティが表現するビジネス概念
52
+ - 責務と役割
53
+ - ドメインモデルとの対応
54
+
55
+ 【主要属性】
56
+ - 重要なカラムをリスト化
57
+ - すべてを列挙する必要はない(詳細は ERD 参照)
58
+ - ビジネスキーとなる属性を優先的に記載
59
+
60
+ 【備考】
61
+ - 正規化・非正規化の判断理由
62
+ - パーティショニング戦略
63
+ - 削除方法(論理削除 or 物理削除)
64
+ - 監査要件(作成日時、更新日時、削除日時)
65
+
66
+ 記載のベストプラクティス:
67
+ - エンティティの分類を明記(コア、参照、関連、履歴)
68
+ - ソフトデリート(論理削除)の有無を記載
69
+ - タイムスタンプ(created_at, updated_at)の有無
70
+ - ドメインモデルの Aggregate との対応を記載
71
+
72
+ よくあるエンティティの分類:
73
+ - コアエンティティ: ビジネスの中心(User, Order, Product)
74
+ - 参照エンティティ: マスタデータ(Category, Status, Country)
75
+ - 関連エンティティ: 多対多の中間テーブル(UserRole, OrderItem)
76
+ - 履歴エンティティ: 監査ログ、変更履歴(AuditLog, OrderHistory)
77
+ -->
78
+
79
+ | エンティティ名 | 説明 | 主要属性 | 備考 |
80
+ |---------------|------|----------|------|
81
+ | <!-- 例: users --> | <!-- 例: ユーザー情報を管理。システムにアクセスする全てのユーザーを表す --> | <!-- 例: id, email, name, password_hash --> | <!-- 例: 論理削除(deleted_at)、email は一意制約 --> |
82
+ | <!-- 例: orders --> | <!-- 例: 注文情報を管理。ユーザーが商品を購入する取引単位 --> | <!-- 例: id, user_id, status, total_amount --> | <!-- 例: status は enum 型または CHECK 制約、物理削除不可(履歴保持) --> |
83
+ | <!-- 例: products --> | <!-- 例: 商品マスタ。販売可能な商品の情報を管理 --> | <!-- 例: id, name, price, stock --> | <!-- 例: 論理削除(is_active)、在庫数は別テーブルでも可 --> |
84
+ | <!-- 例: order_items --> | <!-- 例: 注文明細。注文に含まれる商品と数量を管理 --> | <!-- 例: id, order_id, product_id, quantity, unit_price --> | <!-- 例: 価格変更の影響を避けるため unit_price を保持 --> |
85
+
86
+ ---
87
+
88
+ ## リレーションシップ
89
+
90
+ <!--
91
+ エンティティ間の関係性を明記
92
+
93
+ エンティティ一覧で各テーブルの責務を把握した後、このセクションでテーブル間の関係性を理解します。
94
+ その後、ERDで視覚的に確認する流れが自然です。
95
+
96
+ テーブル構成:
97
+ 【エンティティA / エンティティB】
98
+ - リレーションシップの両端のエンティティ名
99
+
100
+ 【関係性】
101
+ - 多重度を記載
102
+ - 1:1(一対一)
103
+ - 1:N(一対多)
104
+ - N:M(多対多) → 通常は中間テーブルで 1:N + N:1 に分解
105
+
106
+ 【外部キー】
107
+ - FK として使用されるカラム名
108
+ - 命名規則: {参照先テーブル名}_id(例: user_id, product_id)
109
+
110
+ 【制約】
111
+ - ON DELETE の動作(CASCADE, SET NULL, RESTRICT)
112
+ - ON UPDATE の動作
113
+ - NOT NULL 制約の有無
114
+
115
+ 【備考】
116
+ - ビジネスルールの説明
117
+ - リレーションシップの意味
118
+ - インデックスの有無
119
+
120
+ 記載のベストプラクティス:
121
+ - 親子関係を明確に
122
+ - CASCADE 削除は慎重に(意図しないデータ削除を防ぐ)
123
+ - 循環参照に注意
124
+ - パフォーマンスを考慮した FK インデックス
125
+ -->
126
+
127
+ | エンティティA | エンティティB | 関係性 | 外部キー | 制約 | 備考 |
128
+ |--------------|--------------|--------|----------|------|------|
129
+ | <!-- 例: users --> | <!-- 例: orders --> | <!-- 例: 1:N --> | <!-- 例: user_id --> | <!-- 例: ON DELETE RESTRICT --> | <!-- 例: 1人のユーザーが複数の注文を持つ。ユーザー削除時は注文が残るため RESTRICT --> |
130
+ | <!-- 例: orders --> | <!-- 例: order_items --> | <!-- 例: 1:N --> | <!-- 例: order_id --> | <!-- 例: ON DELETE CASCADE --> | <!-- 例: 1つの注文が複数の明細を持つ。注文削除時は明細も削除 --> |
131
+ | <!-- 例: products --> | <!-- 例: order_items --> | <!-- 例: 1:N --> | <!-- 例: product_id --> | <!-- 例: ON DELETE RESTRICT --> | <!-- 例: 商品削除時は注文明細が残るため削除不可 --> |
132
+
133
+ ---
134
+
135
+ ## ERD(Entity Relationship Diagram)
136
+
137
+ <!--
138
+ Mermaid を使用してデータベース構造を可視化
139
+
140
+ エンティティ一覧とリレーションシップで理解した内容を、このERDで視覚的に確認します。
141
+
142
+ 記載のベストプラクティス:
143
+ 1. すべてのエンティティとリレーションシップを記載
144
+ 2. 主キー(PK)、外部キー(FK)を明記
145
+ 3. データ型を記載(int, string, datetime, boolean など)
146
+ 4. リレーションシップの多重度を正確に表現(1:1, 1:N, N:M)
147
+ 5. 複雑な場合は複数の図に分割(コアドメイン、サブドメインごと)
148
+
149
+ Mermaid ERD の記法:
150
+ - エンティティ名 { 属性名 データ型 制約 }
151
+ - リレーションシップ記法:
152
+ - ||--|| : 1対1(必須-必須)
153
+ - ||--o| : 1対0..1(必須-オプション)
154
+ - ||--o{ : 1対多(必須-0以上)
155
+ - }o--o{ : 多対多
156
+ - PK: Primary Key(主キー)
157
+ - FK: Foreign Key(外部キー)
158
+ - UK: Unique Key(一意制約)
159
+ -->
160
+
161
+ ```mermaid
162
+ erDiagram
163
+ USER ||--o{ ORDER : "places"
164
+ USER {
165
+ bigint id PK "ユーザーID"
166
+ string email UK "メールアドレス(一意)"
167
+ string name "氏名"
168
+ string password_hash "パスワードハッシュ"
169
+ datetime created_at "作成日時"
170
+ datetime updated_at "更新日時"
171
+ }
172
+
173
+ ORDER ||--|{ ORDER_ITEM : "contains"
174
+ ORDER {
175
+ bigint id PK "注文ID"
176
+ bigint user_id FK "ユーザーID"
177
+ string status "ステータス: pending, confirmed, shipped, delivered, cancelled"
178
+ decimal total_amount "合計金額"
179
+ datetime created_at "作成日時"
180
+ datetime updated_at "更新日時"
181
+ }
182
+
183
+ PRODUCT ||--o{ ORDER_ITEM : "is ordered in"
184
+ PRODUCT {
185
+ bigint id PK "商品ID"
186
+ string name "商品名"
187
+ text description "商品説明"
188
+ decimal price "価格"
189
+ int stock "在庫数"
190
+ boolean is_active "有効フラグ"
191
+ datetime created_at "作成日時"
192
+ datetime updated_at "更新日時"
193
+ }
194
+
195
+ ORDER_ITEM {
196
+ bigint id PK "注文明細ID"
197
+ bigint order_id FK "注文ID"
198
+ bigint product_id FK "商品ID"
199
+ int quantity "数量"
200
+ decimal unit_price "単価(注文時の価格)"
201
+ datetime created_at "作成日時"
202
+ }
203
+ ```
204
+
205
+ **補足**:
206
+ <!-- 例:
207
+ - USER と ORDER は 1:N の関係(1人のユーザーが複数の注文を持つ)
208
+ - ORDER と ORDER_ITEM は 1:N の関係(1つの注文が複数の明細を持つ)
209
+ - PRODUCT と ORDER_ITEM は 1:N の関係(1つの商品が複数の注文明細に含まれる)
210
+ - unit_price を ORDER_ITEM に持たせることで、価格変更の影響を回避
211
+ -->
@@ -0,0 +1,221 @@
1
+ # API仕様
2
+
3
+ <!--
4
+ 何を書くか: 認証方式、エンドポイント一覧、共通レスポンス形式
5
+
6
+ 目的:
7
+ - フロントエンド・バックエンド間の基本契約を明確化
8
+ - API設計の全体像を把握
9
+ - 開発者間の認識統一
10
+
11
+ 重要性:
12
+ - 高レベルなAPI設計の記録
13
+ - 詳細な仕様(リクエスト/レスポンスのスキーマ)はOpenAPI/Swaggerやコードで管理
14
+
15
+ 記載のポイント:
16
+ - 認証方式の基本情報
17
+ - エンドポイント一覧(メソッド、パス、説明、認証要否)
18
+ - 共通のレスポンス形式(成功/エラー)
19
+
20
+ 更新頻度:
21
+ - プロジェクト初期に基本設計を作成
22
+ - エンドポイント追加・削除時に更新
23
+
24
+ **詳細な実装仕様の管理**:
25
+ - リクエスト/レスポンスの詳細なJSONスキーマ → OpenAPI/Swagger
26
+ - バリデーションルール → コード(バリデーター)
27
+ - エラーコード詳細 → コード(エラーハンドラー)
28
+ - ページネーション、レート制限 → コードと運用ドキュメント
29
+ -->
30
+
31
+ ---
32
+
33
+ ## 認証・認可
34
+
35
+ <!--
36
+ API のセキュリティ方式の基本情報
37
+
38
+ よくある認証方式:
39
+ - JWT (JSON Web Token): ステートレス、マイクロサービス向き
40
+ - OAuth 2.0: サードパーティ認証、権限委譲
41
+ - API Key: シンプル、内部API向き
42
+ - Session Cookie: ステートフル、Webアプリ向き
43
+
44
+ 記載すべき内容:
45
+ - 認証方法(JWT, OAuth 2.0, API Key など)
46
+ - トークンの基本的な有効期限
47
+ - 認証フローの概要
48
+ - 権限スコープの種類
49
+ -->
50
+
51
+ | 項目 | 内容 |
52
+ |------|------|
53
+ | **認証方法** | <!-- 例: JWT Bearer Token --> |
54
+ | **トークン有効期限** | <!-- 例: アクセストークン: 1時間、リフレッシュトークン: 30日 --> |
55
+ | **トークン形式** | <!-- 例: Authorization: Bearer {token} --> |
56
+ | **権限スコープ** | <!-- 例: read, write, admin --> |
57
+
58
+ **認証フロー概要**:
59
+ <!-- 例:
60
+ 1. POST /auth/login でログイン
61
+ 2. アクセストークンとリフレッシュトークンを取得
62
+ 3. 以降のリクエストで Authorization: Bearer {token} ヘッダーに含める
63
+ 4. トークン期限切れ時は POST /auth/refresh でリフレッシュ
64
+ -->
65
+
66
+ ---
67
+
68
+ ## エンドポイント一覧
69
+
70
+ <!--
71
+ すべてのAPIエンドポイントを一覧化
72
+
73
+ テーブル構成:
74
+ 【メソッド】
75
+ - HTTP メソッド(GET, POST, PUT, PATCH, DELETE)
76
+ - RESTful な使い分けを意識
77
+
78
+ 【パス】
79
+ - エンドポイントの URL パス
80
+ - パスパラメータは {id}, {userId} のように記載
81
+ - 例: /api/users/{id}, /api/orders/{orderId}/items
82
+
83
+ 【説明】
84
+ - エンドポイントの目的を1行で記載
85
+ - 例: 「ユーザー一覧を取得」「注文を作成」
86
+
87
+ 【認証】
88
+ - 必要/不要/オプション
89
+ - 必要な権限スコープがあれば記載(例: admin, write)
90
+
91
+ 【ステータス】
92
+ - 実装済み/未実装/非推奨(Deprecated)
93
+ - バージョニングで廃止予定のエンドポイントを記録
94
+
95
+ 記載のベストプラクティス:
96
+ - リソースごとにグループ化(ユーザー関連、注文関連など)
97
+ - CRUD 操作を揃える(GET一覧, GET詳細, POST作成, PUT更新, DELETE削除)
98
+ - ページネーションやフィルタリングのパラメータを記載
99
+ - 非推奨(Deprecated)エンドポイントも記録し、移行先を明記
100
+ -->
101
+
102
+ ### ユーザー管理
103
+
104
+ | メソッド | パス | 説明 | 認証 | ステータス |
105
+ |---------|------|------|------|-----------|
106
+ | <!-- GET --> | <!-- /api/users --> | <!-- ユーザー一覧取得 --> | <!-- 必要(read) --> | <!-- 実装済み --> |
107
+ | <!-- GET --> | <!-- /api/users/{id} --> | <!-- ユーザー詳細取得 --> | <!-- 必要(read) --> | <!-- 実装済み --> |
108
+ | <!-- POST --> | <!-- /api/users --> | <!-- ユーザー作成 --> | <!-- 必要(write) --> | <!-- 実装済み --> |
109
+ | <!-- PUT --> | <!-- /api/users/{id} --> | <!-- ユーザー更新(完全置換) --> | <!-- 必要(write) --> | <!-- 実装済み --> |
110
+ | <!-- PATCH --> | <!-- /api/users/{id} --> | <!-- ユーザー更新(部分更新) --> | <!-- 必要(write) --> | <!-- 実装済み --> |
111
+ | <!-- DELETE --> | <!-- /api/users/{id} --> | <!-- ユーザー削除 --> | <!-- 必要(admin) --> | <!-- 実装済み --> |
112
+
113
+ ### 注文管理
114
+
115
+ | メソッド | パス | 説明 | 認証 | ステータス |
116
+ |---------|------|------|------|-----------|
117
+ | <!-- GET --> | <!-- /api/orders --> | <!-- 注文一覧取得 --> | <!-- 必要(read) --> | <!-- 実装済み --> |
118
+ | <!-- GET --> | <!-- /api/orders/{id} --> | <!-- 注文詳細取得 --> | <!-- 必要(read) --> | <!-- 実装済み --> |
119
+ | <!-- POST --> | <!-- /api/orders --> | <!-- 注文作成 --> | <!-- 必要(write) --> | <!-- 実装済み --> |
120
+ | <!-- POST --> | <!-- /api/orders/{id}/cancel --> | <!-- 注文キャンセル --> | <!-- 必要(write) --> | <!-- 実装済み --> |
121
+
122
+ ### 認証
123
+
124
+ | メソッド | パス | 説明 | 認証 | ステータス |
125
+ |---------|------|------|------|-----------|
126
+ | <!-- POST --> | <!-- /api/auth/login --> | <!-- ログイン --> | <!-- 不要 --> | <!-- 実装済み --> |
127
+ | <!-- POST --> | <!-- /api/auth/logout --> | <!-- ログアウト --> | <!-- 必要 --> | <!-- 実装済み --> |
128
+ | <!-- POST --> | <!-- /api/auth/refresh --> | <!-- トークンリフレッシュ --> | <!-- 不要(リフレッシュトークン必要) --> | <!-- 実装済み --> |
129
+
130
+ ---
131
+
132
+ ## 共通レスポンス形式
133
+
134
+ <!--
135
+ 全エンドポイントで統一するレスポンス形式
136
+
137
+ 記載すべき内容:
138
+ - 成功時のレスポンス構造
139
+ - エラー時のレスポンス構造
140
+ - 主要なHTTPステータスコード
141
+
142
+ 詳細な仕様(リクエスト/レスポンスの詳細なJSONスキーマ、
143
+ バリデーションルール、エラーコード定義)は OpenAPI/Swagger で管理します。
144
+ -->
145
+
146
+ ### 成功レスポンス
147
+
148
+ **基本構造**:
149
+ ```json
150
+ {
151
+ "data": { /* リソースデータ */ },
152
+ "meta": { /* メタデータ(ページネーション情報など) */ }
153
+ }
154
+ ```
155
+
156
+ **単一リソース取得の例**:
157
+ ```json
158
+ {
159
+ "data": {
160
+ "id": 1,
161
+ "email": "user@example.com",
162
+ "name": "User Name",
163
+ "created_at": "2024-01-01T00:00:00Z"
164
+ }
165
+ }
166
+ ```
167
+
168
+ **リスト取得の例**:
169
+ ```json
170
+ {
171
+ "data": [
172
+ { "id": 1, "name": "User 1" },
173
+ { "id": 2, "name": "User 2" }
174
+ ],
175
+ "meta": {
176
+ "total": 100,
177
+ "limit": 20,
178
+ "offset": 0
179
+ }
180
+ }
181
+ ```
182
+
183
+ ### エラーレスポンス
184
+
185
+ **基本構造**:
186
+ ```json
187
+ {
188
+ "error": {
189
+ "code": "ERROR_CODE",
190
+ "message": "Human-readable error message"
191
+ }
192
+ }
193
+ ```
194
+
195
+ **バリデーションエラーの例**:
196
+ ```json
197
+ {
198
+ "error": {
199
+ "code": "VALIDATION_ERROR",
200
+ "message": "Validation failed",
201
+ "details": [
202
+ { "field": "email", "message": "Invalid email format" }
203
+ ]
204
+ }
205
+ }
206
+ ```
207
+
208
+ ### 主要なHTTPステータスコード
209
+
210
+ | ステータスコード | 説明 | 使用場面 |
211
+ |----------------|------|---------|
212
+ | **200 OK** | 成功 | GET, PUT, PATCH, DELETE の成功 |
213
+ | **201 Created** | リソース作成成功 | POST でのリソース作成成功 |
214
+ | **204 No Content** | 成功(レスポンスボディなし) | DELETE 成功時など |
215
+ | **400 Bad Request** | 不正なリクエスト | バリデーションエラー |
216
+ | **401 Unauthorized** | 認証エラー | トークン不正・期限切れ |
217
+ | **403 Forbidden** | 権限不足 | 認証済みだが権限不足 |
218
+ | **404 Not Found** | リソースが存在しない | 指定したIDのリソースが見つからない |
219
+ | **409 Conflict** | リソースの競合 | 既に存在するメールアドレスなど |
220
+ | **429 Too Many Requests** | レート制限超過 | リクエスト数が上限を超えた |
221
+ | **500 Internal Server Error** | サーバーエラー | サーバー内部エラー |
@@ -0,0 +1,183 @@
1
+ # アーキテクチャ設計
2
+
3
+ <!--
4
+ 何を書くか: システム全体の構造、採用アーキテクチャパターン、重要な設計決定(ADR)
5
+
6
+ 目的:
7
+ - システム全体の見通しを向上
8
+ - コンポーネント間の関係を明確化
9
+ - アーキテクチャ決定の記録と共有
10
+
11
+ 重要性:
12
+ - 高レベルなアーキテクチャの全体像を把握
13
+ - 詳細な実装仕様(スペック、パフォーマンス数値)はコードとインフラコードで管理
14
+
15
+ 記載のポイント:
16
+ - システムアーキテクチャ図で視覚的に表現
17
+ - 採用したアーキテクチャパターンとその理由
18
+ - 重要な技術的決定事項(ADR)
19
+
20
+ 更新頻度:
21
+ - プロジェクト初期にアーキテクチャ設計を作成
22
+ - アーキテクチャ変更時に更新
23
+ - 重要な技術的決定時に ADR を追加
24
+ -->
25
+
26
+ ---
27
+
28
+ ## システムアーキテクチャ図
29
+
30
+ <!--
31
+ Mermaid を使用してシステム全体の構造を可視化
32
+
33
+ 記載のベストプラクティス:
34
+ 1. 主要なコンポーネントとその関係を記載
35
+ 2. データフローを矢印で表現
36
+ 3. 外部システムとの連携も記載
37
+ 4. レイヤーごとに色分けまたはグループ化
38
+ 5. 複雑な場合は複数の図に分割(全体図、詳細図)
39
+
40
+ よくあるコンポーネント:
41
+ - クライアント層: Webブラウザ、モバイルアプリ
42
+ - プレゼンテーション層: フロントエンド(React, Vue)
43
+ - API層: REST API, GraphQL
44
+ - ビジネスロジック層: サービス、ドメインモデル
45
+ - データアクセス層: ORM、リポジトリ
46
+ - データストア層: RDBMS, NoSQL, キャッシュ
47
+ - 外部サービス: 決済API、メール送信、認証サービス
48
+ - インフラ: ロードバランサー、CDN、キューシステム
49
+
50
+ Mermaid の記法:
51
+ - graph TD: 上から下へのフロー
52
+ - graph LR: 左から右へのフロー
53
+ - subgraph でグループ化
54
+ - []: 四角、(): 丸角四角、{}: ひし形、[()]: スタジアム型、[[]]: サブルーチン、[()]: 円柱
55
+ -->
56
+
57
+ ```mermaid
58
+ graph TB
59
+ subgraph "クライアント層"
60
+ Web[Webブラウザ]
61
+ Mobile[モバイルアプリ]
62
+ end
63
+
64
+ subgraph "CDN層"
65
+ CDN[CloudFront CDN]
66
+ end
67
+
68
+ subgraph "ロードバランシング層"
69
+ LB[Application Load Balancer]
70
+ end
71
+
72
+ subgraph "アプリケーション層"
73
+ API1[APIサーバー 1<br/>Node.js + Express]
74
+ API2[APIサーバー 2<br/>Node.js + Express]
75
+ end
76
+
77
+ subgraph "キャッシュ層"
78
+ Cache[(Redis)]
79
+ end
80
+
81
+ subgraph "データ層"
82
+ DB[(PostgreSQL<br/>Primary)]
83
+ DBRead[(PostgreSQL<br/>Read Replica)]
84
+ end
85
+
86
+ subgraph "外部サービス"
87
+ Auth[認証サービス<br/>Auth0]
88
+ Payment[決済サービス<br/>Stripe]
89
+ Email[メール送信<br/>SendGrid]
90
+ end
91
+
92
+ subgraph "ストレージ"
93
+ S3[Object Storage<br/>Amazon S3]
94
+ end
95
+
96
+ Web --> CDN
97
+ Mobile --> CDN
98
+ CDN --> LB
99
+ LB --> API1
100
+ LB --> API2
101
+
102
+ API1 --> Cache
103
+ API2 --> Cache
104
+ API1 --> DB
105
+ API2 --> DB
106
+ API1 --> DBRead
107
+ API2 --> DBRead
108
+
109
+ API1 --> Auth
110
+ API2 --> Auth
111
+ API1 --> Payment
112
+ API2 --> Payment
113
+ API1 --> Email
114
+ API2 --> Email
115
+
116
+ API1 --> S3
117
+ API2 --> S3
118
+ ```
119
+
120
+ **補足**:
121
+ <!-- 例:
122
+ - クライアントからのリクエストは CDN を経由してキャッシュ可能な静的コンテンツを配信
123
+ - API層は水平スケール可能(オートスケーリング)
124
+ - データベースは Primary/Replica 構成で読み取り負荷を分散
125
+ - Redis でセッション管理とキャッシュを実現
126
+ - 外部サービスとの連携は API Gateway 経由で統一
127
+ -->
128
+
129
+ ---
130
+
131
+ ## 採用アーキテクチャパターン
132
+
133
+ <!--
134
+ 採用したアーキテクチャパターンとその理由を簡潔に記載
135
+
136
+ よくあるアーキテクチャパターン:
137
+ - Layered Architecture: プレゼンテーション層 → ビジネスロジック層 → データアクセス層
138
+ - Clean Architecture: ドメイン中心、依存性逆転
139
+ - Microservices: サービスごとに独立したデプロイ
140
+ - Event-Driven: 非同期処理、疎結合
141
+
142
+ 記載すべき内容:
143
+ - 採用パターン名
144
+ - 選定理由(なぜこのパターンが適しているか)
145
+ - 適用範囲
146
+ -->
147
+
148
+ | 項目 | 内容 |
149
+ |------|------|
150
+ | **採用パターン** | <!-- 例: Layered Architecture(レイヤードアーキテクチャ) --> |
151
+ | **選定理由** | <!-- 例: チームサイズが小規模なため、シンプルで運用コストの低いアーキテクチャを選択 --> |
152
+ | **適用範囲** | <!-- 例: バックエンド全体 --> |
153
+
154
+ ---
155
+
156
+ ## ADR(Architecture Decision Record)
157
+
158
+ <!--
159
+ 重要なアーキテクチャ決定を記録
160
+
161
+ ADR とは:
162
+ - アーキテクチャに関する重要な決定を記録
163
+ - 「なぜその決定をしたか」の背景を残す
164
+ - 将来的な見直しや移行の判断材料
165
+
166
+ 記載すべき内容:
167
+ - 決定事項: 何を決めたか
168
+ - 背景: なぜその決定が必要だったか
169
+ - 代替案: 他の選択肢
170
+ - 影響: その決定による影響
171
+ - 決定日: いつ決定したか
172
+
173
+ よくある決定事項:
174
+ - データベースの選択
175
+ - キャッシュ戦略
176
+ - 認証方式
177
+ - デプロイ戦略
178
+ -->
179
+
180
+ | 決定事項 | 背景 | 代替案 | 影響 | 決定日 |
181
+ |---------|------|--------|------|--------|
182
+ | <!-- 例: PostgreSQL を採用 --> | <!-- 例: ACID準拠のトランザクションが必要 --> | <!-- 例: MySQL, MongoDB --> | <!-- 例: データ整合性が高い --> | <!-- 例: 2024-01-05 --> |
183
+ | <!-- 例: Redis をセッション管理に使用 --> | <!-- 例: ステートレスな API サーバーを実現 --> | <!-- 例: DB保存, JWT のみ --> | <!-- 例: セッション管理が高速 --> | <!-- 例: 2024-01-10 --> |