@einja/dev-cli 0.1.10 → 0.1.11

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 (30) hide show
  1. package/dist/lib/file-system.js +1 -1
  2. package/dist/lib/file-system.js.map +1 -1
  3. package/package.json +1 -2
  4. package/scaffolds/cli/preset.yaml +110 -0
  5. package/scaffolds/example/README.md +35 -0
  6. package/scaffolds/example/specs/issues/issue999-example-task/design.md +879 -0
  7. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/README.md +150 -0
  8. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +268 -0
  9. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +179 -0
  10. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +392 -0
  11. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence/.gitkeep +0 -0
  12. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +459 -0
  13. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep +0 -0
  14. package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +125 -0
  15. package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +494 -0
  16. package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +212 -0
  17. package/scaffolds/instructions/deployment-setup.md +458 -0
  18. package/scaffolds/instructions/environment-setup.md +509 -0
  19. package/scaffolds/instructions/local-server-environment-and-worktree.md +539 -0
  20. package/scaffolds/instructions/task-execute.md +649 -0
  21. package/scaffolds/instructions/task-vibe-kanban-loop.md +495 -0
  22. package/scaffolds/memory/archive/.gitkeep +0 -0
  23. package/scaffolds/memory/decisions.md +35 -0
  24. package/scaffolds/memory/patterns.md +37 -0
  25. package/scaffolds/CLAUDE.md.template +0 -386
  26. /package/{templates → scaffolds/templates}/README.md +0 -0
  27. /package/{templates → scaffolds/templates}/design-simple.md.template +0 -0
  28. /package/{templates → scaffolds/templates}/design.md.template +0 -0
  29. /package/{templates → scaffolds/templates}/qa-test.md.template +0 -0
  30. /package/{templates → scaffolds/templates}/requirements.md.template +0 -0
@@ -0,0 +1,495 @@
1
+ <!-- @einja:managed:start -->
2
+ # `pnpm task:loop` コマンド
3
+
4
+ ## 概要
5
+
6
+ GitHub Issue からタスクを自動選定し、Vibe-Kanban に登録して連続実行する npm スクリプト。
7
+
8
+ **⚠️ 重要**: 着手可能なタスクを全て並列で Doing に移し、Done 状態の変化を監視して次のタスクを開始するループ処理。
9
+
10
+ ---
11
+
12
+ ## 使用方法
13
+
14
+ ### 事前準備(初回のみ)
15
+
16
+ ```bash
17
+ # 1. 仕様書を作成(requirements.md, design.md, GitHub Issue へのタスク記述)
18
+ /spec-create <タスク内容の説明>
19
+
20
+ # 一旦ここまで終わったらDiscordでスレッドを作りチームにレビュー依頼
21
+
22
+ # 2. Vibe-Kanban を起動(別ターミナルで実行)
23
+ npx vibe-kanban
24
+ # → ブラウザが自動で開き、Kanbanボードが表示される
25
+ # → このボードで PR作成・レビュー・マージ操作を行う
26
+ ```
27
+
28
+ ### コマンド実行
29
+
30
+ ```bash
31
+ # 基本
32
+ pnpm task:loop <issue-number>
33
+
34
+ # 実行後、specで作成されたタスクが勝手に着手可能なものから実行開始されていくので、
35
+ # vibe-kanbanの画面を眺めて終わったものから自己レビュー、OKならPR作成ボタンでPR作成、チームのレビュー後、
36
+ # PRがマージされると自動で次のタスクが始まる(ちょっとラグあり)
37
+
38
+ # オプション指定
39
+ pnpm task:loop <issue-number> --max-group <number> --branch <branch>
40
+
41
+ # 例
42
+ pnpm task:loop 123 # Issue #123 の全タスクを実行
43
+ pnpm task:loop 123 --max-group 4 # Phase 4 まで実行
44
+ pnpm task:loop 123 --max-group 4.2 # タスクグループ 4.2 まで実行
45
+ pnpm task:loop 123 --branch develop # develop ブランチベースで実行
46
+
47
+ # ヘルプ
48
+ pnpm task:loop --help
49
+ ```
50
+
51
+ ### Vibe-Kanban 画面での操作
52
+
53
+ `npx vibe-kanban` で開いたボードで以下の操作を行います:
54
+
55
+ | 操作 | タイミング | 説明 |
56
+ |------|-----------|------|
57
+ | **タスク進捗確認** | 随時 | Todo → In Progress → In Review → Done の流れを確認 |
58
+ | **Create PR** | In Review 時 | ボタンをクリックして PR を自動作成 |
59
+ | **レビュー** | PR 作成後 | GitHub で PR の内容を確認 |
60
+ | **マージ** | レビュー完了後 | GitHub で PR をマージ(⚠️ 必ず GitHub 側で操作) |
61
+
62
+ **⚠️ 重要**: PR のマージは必ず GitHub 側で行ってください。マージを検知して Vibe-Kanban のタスクが自動で Done になります。
63
+
64
+ ---
65
+
66
+ ## ブランチ階層
67
+
68
+ ```
69
+ main (デフォルト)
70
+ └── issue/17 ← main から作成
71
+ ├── issue/17-phase1 ← issue/17 から作成
72
+ ├── issue/17-phase2 ← issue/17 から作成
73
+ └── issue/17-phase3 ← issue/17 から作成
74
+ └── (作業ブランチ) ← Vibe-Kanban が自動作成
75
+ ```
76
+
77
+ - **main**: プロダクションブランチ
78
+ - **issue/N**: Issue 単位のブランチ(`--branch` で変更可能)
79
+ - **issue/N-phaseM**: Phase 単位のブランチ、タスクグループの作業ベース
80
+
81
+ ---
82
+
83
+ ## 開発手順(ステップバイステップ)
84
+
85
+ ### 事前準備チェックリスト
86
+
87
+ - [ ] `npx @einja/dev-cli init` 実行済み(`pnpm task:loop` コマンドが使用可能)
88
+ - [ ] Docker が起動している
89
+ - [ ] `pnpm install` 済み
90
+ - [ ] Vibe-Kanban にプロジェクトが登録されている(後述)
91
+ - [ ] GitHub Issue にタスク一覧が記載されている
92
+
93
+ ### Step 1: Vibe-Kanban を起動
94
+
95
+ ```bash
96
+ npx vibe-kanban
97
+ ```
98
+
99
+ ブラウザが自動で開きます。このボードでタスクの進捗を確認します。
100
+
101
+ ### Step 2: プロジェクト登録(初回のみ)
102
+
103
+ Vibe-Kanban にこのプロジェクトが登録されていない場合:
104
+
105
+ 1. ブラウザで Projects ページを開く
106
+ 2. 「Create project」ボタンをクリック
107
+ 3. Git Repository Path にプロジェクトのパスを入力
108
+ ```
109
+ /Users/yourname/path/to/your-project
110
+ ```
111
+ 4. 保存
112
+
113
+ ### Step 3: タスクループを開始
114
+
115
+ ```bash
116
+ pnpm task:loop <issue-number>
117
+
118
+ # 例: Issue #17 の全タスクを実行
119
+ pnpm task:loop 17
120
+ ```
121
+
122
+ コマンド実行後:
123
+ - 着手可能なタスクが自動で Vibe-Kanban に登録される
124
+ - 各タスクが並列で実行開始される
125
+ - 15秒ごとに進捗をポーリング
126
+
127
+ ### Step 4: タスク進捗の確認
128
+
129
+ `npx vibe-kanban` で開いたボードでタスクの状態を確認:
130
+
131
+ | 状態 | 意味 |
132
+ |------|------|
133
+ | **Todo** | 未着手 |
134
+ | **In Progress** | 実行中(Claude Code が作業中) |
135
+ | **In Review** | レビュー待ち(PR作成が必要) |
136
+ | **Done** | 完了 |
137
+
138
+ ### Step 5: In Review 状態の対応
139
+
140
+ タスクが **In Review** になったら:
141
+
142
+ 1. **Vibe-Kanban で「Create PR」ボタンをクリック**
143
+ - PR が自動作成される
144
+
145
+ 2. **GitHub で PR をレビュー**
146
+ - コードを確認
147
+ - 必要に応じて修正を依頼
148
+
149
+ 3. **修正が必要な場合**
150
+ - PR にコメントを残す
151
+ - または Vibe-Kanban で「Request Changes」
152
+
153
+ 4. **レビュー完了後、GitHub で PR をマージ**
154
+ - ⚠️ **必ず GitHub 側でマージすること**(Vibe-Kanban からはマージしない)
155
+
156
+ ### Step 6: マージ後の自動処理
157
+
158
+ PR をマージすると:
159
+
160
+ 1. Vibe-Kanban がマージを検知
161
+ 2. タスクが自動で **Done** に変更
162
+ 3. `pnpm task:loop` がこれを検知
163
+ 4. GitHub Issue のチェックボックスが自動で `[x]` に更新
164
+ 5. **Phase 内の全タスクが完了した場合、Phase ブランチを Issue ブランチに自動マージ**
165
+ 6. 新たに着手可能になったタスクが自動で開始
166
+
167
+ ```
168
+ ┌─────────────────────────────────────────────────────────────┐
169
+ │ PR マージ │
170
+ │ ↓ │
171
+ │ Vibe-Kanban: タスク → Done(自動) │
172
+ │ ↓ │
173
+ │ task:loop: Done 検知 │
174
+ │ ↓ │
175
+ │ GitHub Issue: チェックボックス更新(自動) │
176
+ │ ↓ │
177
+ │ Phase 全タスク完了? │
178
+ │ ├─ Yes → Phase ブランチを Issue ブランチにマージ │
179
+ │ └─ No → スキップ │
180
+ │ ↓ │
181
+ │ 次のタスクが自動開始 │
182
+ └─────────────────────────────────────────────────────────────┘
183
+ ```
184
+
185
+ ### Step 7: 全タスク完了
186
+
187
+ すべてのタスクが Done になると:
188
+
189
+ ```
190
+ 🎉 すべてのタスクが完了しました!
191
+ ✅ タスク自動実行ループ終了
192
+ ```
193
+
194
+ ---
195
+
196
+ ## トラブルシューティング
197
+
198
+ ### プロジェクトが見つからないエラー
199
+
200
+ ```
201
+ ❌ プロジェクトが Vibe-Kanban に登録されていません
202
+ ```
203
+
204
+ **対処法**: Step 2 の手順でプロジェクトを登録してください。
205
+
206
+ ### タスクが In Review のまま進まない
207
+
208
+ **原因**: PR がマージされていない
209
+
210
+ **対処法**:
211
+ 1. Vibe-Kanban で「Create PR」をクリック
212
+ 2. GitHub で PR をレビュー・マージ
213
+
214
+ ### タスクが Done にならない
215
+
216
+ **原因**: GitHub 側でマージしていない(Vibe-Kanban 上で手動で Done にした)
217
+
218
+ **対処法**: 必ず GitHub の PR をマージしてください。マージを検知して自動で Done になります。
219
+
220
+ ---
221
+
222
+ ## 処理フロー
223
+
224
+ ### アクター凡例
225
+
226
+ | アクター | 説明 | 操作種別 |
227
+ |---------|------|---------|
228
+ | 👤 **ユーザー** | 開発者(あなた) | 手動 |
229
+ | 🔄 **task:loop** | `pnpm task:loop` コマンド | 自動 |
230
+ | 🤖 **Claude Code** | Vibe-Kanban が起動する AI エージェント | 自動 |
231
+ | 📋 **Vibe-Kanban** | タスク管理ボード | 自動 |
232
+ | 🐙 **GitHub** | Issue / PR | - |
233
+
234
+ ### フロー図
235
+
236
+ ```mermaid
237
+ graph TD
238
+ subgraph User ["👤 ユーザー(手動)"]
239
+ U1([pnpm task:loop 実行])
240
+ U2[Vibe-Kanban で<br/>PR作成ボタンクリック]
241
+ U3[GitHub で<br/>PRレビュー・マージ]
242
+ end
243
+
244
+ subgraph TaskLoop ["🔄 task:loop(自動)"]
245
+ T1[Issue取得・解析]
246
+ T2[ブランチ作成]
247
+ T3[Vibe-Kanban 接続]
248
+ T4[タスク作成・開始指示]
249
+ T5[15秒ポーリング]
250
+ T6{Done検知?}
251
+ T7[GitHub Issue<br/>チェックボックス更新]
252
+ T8[次のタスク開始指示]
253
+ T9{全完了?}
254
+ T10([ループ終了])
255
+ end
256
+
257
+ subgraph Claude ["🤖 Claude Code(自動)"]
258
+ C1[コード実装]
259
+ C2[テスト実行]
260
+ C3[コミット・プッシュ]
261
+ C4[作業完了報告]
262
+ end
263
+
264
+ subgraph VibeKanban ["📋 Vibe-Kanban(自動)"]
265
+ V1[タスク状態管理]
266
+ V2[Claude Code 起動]
267
+ V3[PRマージ検知]
268
+ V4[タスク → Done]
269
+ end
270
+
271
+ subgraph GitHub ["🐙 GitHub"]
272
+ G1[Issue]
273
+ G2[PR]
274
+ end
275
+
276
+ U1 --> T1
277
+ T1 --> T2
278
+ T2 --> T3
279
+ T3 --> T4
280
+ T4 --> V1
281
+ V1 --> V2
282
+ V2 --> C1
283
+ C1 --> C2
284
+ C2 --> C3
285
+ C3 --> C4
286
+ C4 --> V1
287
+
288
+ T4 --> T5
289
+ T5 --> T6
290
+ T6 -->|No| T9
291
+ T6 -->|Yes| T7
292
+ T7 --> G1
293
+ T7 --> T8
294
+ T8 --> T9
295
+ T9 -->|No| T5
296
+ T9 -->|Yes| T10
297
+
298
+ V1 -->|In Review| U2
299
+ U2 --> G2
300
+ G2 --> U3
301
+ U3 --> V3
302
+ V3 --> V4
303
+ V4 --> T6
304
+
305
+ style U1 fill:#e3f2fd
306
+ style U2 fill:#e3f2fd
307
+ style U3 fill:#e3f2fd
308
+ style T10 fill:#4caf50,color:#fff
309
+ ```
310
+
311
+ ### シーケンス図
312
+
313
+ ```mermaid
314
+ sequenceDiagram
315
+ box rgb(227, 242, 253) 手動操作
316
+ participant User as 👤 ユーザー
317
+ end
318
+ box rgb(232, 245, 233) 自動処理
319
+ participant Script as 🔄 task:loop
320
+ participant Vibe as 📋 Vibe-Kanban
321
+ participant Claude as 🤖 Claude Code
322
+ end
323
+ box rgb(255, 243, 224) 外部サービス
324
+ participant GitHub as 🐙 GitHub
325
+ end
326
+
327
+ Note over User: 【開始】
328
+ User->>Script: pnpm task:loop 123
329
+
330
+ Note over Script: 【初期化フェーズ】
331
+ Script->>GitHub: Issue 取得・解析
332
+ Script->>Script: ブランチ作成(issue/123, issue/123-phase1...)
333
+ Script->>Vibe: MCP 接続
334
+
335
+ Note over Script: 【タスク開始】
336
+ Script->>Script: 着手可能タスク選定
337
+ Script->>Vibe: タスク作成
338
+ Script->>Vibe: start_task_attempt(実行開始指示)
339
+ Vibe->>Claude: Claude Code 起動
340
+
341
+ Note over Claude: 【タスク実行】
342
+ Claude->>Claude: コード実装
343
+ Claude->>Claude: テスト実行
344
+ Claude->>GitHub: コミット・プッシュ
345
+ Claude->>Vibe: 作業完了報告
346
+ Vibe->>Vibe: ステータス → In Review
347
+
348
+ Note over User: 【レビューフェーズ】
349
+ User->>Vibe: 「Create PR」ボタンクリック
350
+ Vibe->>GitHub: PR 作成
351
+ User->>GitHub: PR レビュー
352
+ User->>GitHub: PR マージ
353
+
354
+ Note over Vibe: 【自動検知】
355
+ Vibe->>Vibe: PR マージ検知
356
+ Vibe->>Vibe: ステータス → Done
357
+
358
+ Note over Script: 【ポーリング検知】
359
+ loop 15秒ごと
360
+ Script->>Vibe: タスク状態取得
361
+ alt Done 増加検知
362
+ Script->>GitHub: Issue チェックボックス更新
363
+ Script->>Script: 新たに着手可能なタスク選定
364
+ Script->>Vibe: 次のタスク作成・開始
365
+ Vibe->>Claude: Claude Code 起動(次タスク)
366
+ end
367
+ end
368
+
369
+ Note over Script: 【完了】
370
+ Script->>Vibe: MCP 切断
371
+ Script->>User: 🎉 全タスク完了
372
+ ```
373
+
374
+ ### 操作主体の一覧
375
+
376
+ | フェーズ | 操作 | 主体 |
377
+ |---------|------|------|
378
+ | 開始 | `pnpm task:loop` 実行 | 👤 ユーザー |
379
+ | 初期化 | Issue 取得、ブランチ作成 | 🔄 task:loop |
380
+ | 初期化 | Vibe-Kanban 接続 | 🔄 task:loop |
381
+ | タスク開始 | タスク作成・開始指示 | 🔄 task:loop |
382
+ | タスク開始 | Claude Code 起動 | 📋 Vibe-Kanban |
383
+ | 実装 | コード実装、テスト、コミット | 🤖 Claude Code |
384
+ | 実装 | 作業完了報告 | 🤖 Claude Code |
385
+ | レビュー | 「Create PR」クリック | 👤 ユーザー |
386
+ | レビュー | PR 作成 | 📋 Vibe-Kanban |
387
+ | レビュー | PR レビュー・マージ | 👤 ユーザー |
388
+ | 検知 | PR マージ検知 → Done | 📋 Vibe-Kanban |
389
+ | 検知 | Done 検知 | 🔄 task:loop |
390
+ | 更新 | Issue チェックボックス更新 | 🔄 task:loop |
391
+ | 次タスク | 次のタスク開始指示 | 🔄 task:loop |
392
+ | 終了 | MCP 切断、完了通知 | 🔄 task:loop |
393
+
394
+ ---
395
+
396
+ ## 各フェーズの概要
397
+
398
+ ### 1. 初期化フェーズ(1回のみ)
399
+
400
+ - 引数解析(Issue番号、最大タスク番号、ベースブランチ)
401
+ - GitHub Issue 取得・Markdown パース
402
+ - Issue ブランチ作成: `issue/{issue_number}`
403
+ - Phase ブランチ作成: `issue/{issue_number}-phase{N}`
404
+ - Vibe-Kanban MCP 接続(以降使い回し)
405
+ - プロジェクト ID 取得
406
+
407
+ ### 2. 初期タスク開始
408
+
409
+ - 依存関係を考慮して着手可能なタスクグループを全て選定
410
+ - Vibe-Kanban にタスク作成
411
+ - `start_task_attempt` で実行開始
412
+
413
+ ### 3. メインループ(15秒ポーリング)
414
+
415
+ - Vibe-Kanban のタスク状態を取得
416
+ - Done 増加を検知した場合:
417
+ - GitHub Issue のチェックボックスを `- [x]` に更新
418
+ - **Phase 内の全タスクが完了していれば、Phase ブランチを Issue ブランチに自動マージ**
419
+ - 新たに着手可能になったタスクを開始
420
+ - 全タスク完了で終了
421
+
422
+ ### 4. 終了処理
423
+
424
+ - Vibe-Kanban MCP 切断
425
+
426
+ ---
427
+
428
+ ## Vibe-Kanban セットアップ
429
+
430
+ ### 前提条件
431
+
432
+ ✅ このプロジェクトでは既に設定済み(`.mcp.json`)
433
+
434
+ ### セットアップ手順
435
+
436
+ 1. **アプリケーション起動**
437
+ ```bash
438
+ npx vibe-kanban
439
+ ```
440
+
441
+ 2. **プロジェクト確認**
442
+ - ブラウザでKanbanボード表示
443
+ - プロジェクトが登録されていることを確認
444
+
445
+ ---
446
+
447
+ ## `/task-exec` との使い分け
448
+
449
+ | コマンド | 用途 | 品質保証 | 推奨シーン |
450
+ |---------|------|---------|----------|
451
+ | **`/task-exec`** | 重要タスクの確実な完了 | ✅ 合格まで自動ループ | 複雑な実装、品質重視 |
452
+ | **`pnpm task:loop`** | 大量タスクの自動消化 | 並列実行・監視 | 定型作業、並行開発 |
453
+
454
+ ---
455
+
456
+ ## 実装詳細
457
+
458
+ スクリプトは `packages/cli/src/commands/task-loop/` に配置(CLIパッケージに統合):
459
+
460
+ ```
461
+ packages/cli/src/commands/task-loop/
462
+ ├── index.ts # エントリポイント(taskLoopCommand関数)
463
+ └── lib/
464
+ ├── types.ts # 型定義
465
+ ├── task-number-utils.ts # タスク番号比較
466
+ ├── github-client.ts # GitHub Issue操作
467
+ ├── gh-setup.ts # GitHub CLI セットアップ
468
+ ├── branch-manager.ts # Git ブランチ操作
469
+ ├── conflict-handler.ts # コンフリクト処理
470
+ ├── vibe-kanban-client.ts # MCP経由Vibe-Kanban操作
471
+ ├── vibe-kanban-rest-client.ts # REST API クライアント
472
+ ├── issue-parser.ts # Issue Markdownパーサー
473
+ ├── dependency-resolver.ts # 依存関係解析
474
+ ├── project-selector.ts # プロジェクト選択
475
+ └── task-state-manager.ts # タスク状態管理
476
+ ```
477
+
478
+ ---
479
+
480
+ ## 関連ドキュメント
481
+
482
+ - [タスク実行ワークフロー](./task-execute.md)
483
+ - [タスク管理ガイドライン](../steering/task-management.md)
484
+ - [仕様書作成ワークフロー](./spec-create.md)
485
+ - [ブランチ運用戦略](../steering/branch-strategy.md) - ブランチ命名規則、同期フロー、ワークフロー図
486
+ <!-- @einja:managed:end -->
487
+
488
+ ---
489
+
490
+ <!-- @einja:seed:start id="task-vibe-kanban-loop-project" -->
491
+ ## プロジェクト固有の設定
492
+
493
+ <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
494
+ <!-- einja syncで上書きされません -->
495
+ <!-- @einja:seed:end -->
File without changes
@@ -0,0 +1,35 @@
1
+ <!-- @einja:managed:start -->
2
+ # 意思決定記録(Decisions)
3
+
4
+ このファイルには、プロジェクトにおける重要な意思決定(Why)を記録します。
5
+
6
+ ## 運用ルール
7
+
8
+ - **最大エントリ数**: 30件
9
+ - **上限到達時**: 古いエントリを `archive/decisions-{年}.md` に移動
10
+ - **エントリ形式**: 以下のテンプレートに従う
11
+
12
+ ### エントリテンプレート
13
+
14
+ ```markdown
15
+ ## [YYYY-MM-DD] タイトル
16
+ - **結論**: 1-2文で結論
17
+ - **理由**: 簡潔な理由
18
+ - **見直し条件**: この決定を見直すべき条件
19
+ ```
20
+
21
+ ---
22
+
23
+ ## 記録
24
+
25
+ <!-- ここに意思決定を追加 -->
26
+ <!-- @einja:managed:end -->
27
+
28
+ ---
29
+
30
+ <!-- @einja:seed:start id="decisions-project" -->
31
+ ## プロジェクト固有の設定
32
+
33
+ <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
34
+ <!-- einja syncで上書きされません -->
35
+ <!-- @einja:seed:end -->
@@ -0,0 +1,37 @@
1
+ <!-- @einja:managed:start -->
2
+ # 再利用パターン(Patterns)
3
+
4
+ このファイルには、プロジェクトで発見・確立された再利用可能なパターン(How)を記録します。
5
+
6
+ ## 運用ルール
7
+
8
+ - **最大エントリ数**: 30件
9
+ - **上限到達時**: 古いエントリを `archive/patterns-{年}.md` に移動
10
+ - **エントリ形式**: 以下のテンプレートに従う
11
+
12
+ ### エントリテンプレート
13
+
14
+ ```markdown
15
+ ## [YYYY-MM-DD] パターン名
16
+ - **問題**: どのような問題を解決するか
17
+ - **解法**: どのように解決するか
18
+ - **適用条件**: このパターンを使うべき状況
19
+ - **非適用条件**: このパターンを使うべきでない状況
20
+ - **例**: 具体的なコード例やユースケース
21
+ ```
22
+
23
+ ---
24
+
25
+ ## 記録
26
+
27
+ <!-- ここにパターンを追加 -->
28
+ <!-- @einja:managed:end -->
29
+
30
+ ---
31
+
32
+ <!-- @einja:seed:start id="patterns-project" -->
33
+ ## プロジェクト固有の設定
34
+
35
+ <!-- このセクションはプロジェクト固有の内容を追記する場所です -->
36
+ <!-- einja syncで上書きされません -->
37
+ <!-- @einja:seed:end -->