# メモリディレクトリファイルフォーマット

このドキュメントでは、`.local/<task_name>/`メモリディレクトリ内で使用するファイルのフォーマットを定義します。

## ディレクトリ構成

```
.local/<task_name>/
├── 00_spec.md        # 機能要求・要件定義
├── 01_spec_xxx.md    # サブドキュメント（必要に応じて）
├── 10_task.md        # タスク一覧
├── 20_survey.md      # 調査結果
├── 30_plan.md        # 実装計画
├── 40_progress.md    # 実装進捗
├── 80_review.md      # コードレビュー結果
├── 81_review.md      # 2回目のレビュー（必要に応じて）
├── 90_pr.md          # Pull Request内容
└── 99_history.md     # 意思決定ログ
```

## task_nameの決定方法

1. ブランチ名を優先（`/`は`_`に置換）
2. ブランチ名がない場合は、既存ディレクトリの命名規則に従う

例:
- ブランチ: `feature/add-page-search` → task_name: `feature_add-page-search`
- ブランチ: `fix/async-timeout` → task_name: `fix_async-timeout`

---

## 00_spec.md（機能要求・要件定義）

### 目的

機能の要求事項と要件を明確に定義します。

### フォーマット

```markdown
# 機能要求

## 概要

[機能の概要を1-2文で記述]

## 背景・目的

[なぜこの機能が必要か]

## 機能要件

### 必須要件

- [ ] [要件1]
- [ ] [要件2]

### 任意要件

- [ ] [要件1]

## 非機能要件

- パフォーマンス: [要件]
- セキュリティ: [要件]

## 制約事項

- [制約1]

## 参照資料

- [リンク1]
```

---

## 10_task.md（タスク一覧）

### 目的

要件定義から具体化したタスクを管理します。

### フォーマット

```markdown
# タスク一覧

## 完了条件

[このタスク全体の完了条件]

## タスク詳細

### T1: [タスク名]

- 対象: [ファイルパスまたはコンポーネント]
- 内容: [具体的な作業内容]
- 完了条件: [確認方法]
- 依存: [依存するタスク（あれば）]

### T2: [タスク名]

[同様の形式で継続]
```

---

## 20_survey.md（調査結果）

### 目的

コードベースや仕様の調査結果を記録します。

### フォーマット

```markdown
# 調査結果

## 調査目的

[何を明らかにするための調査か]

## 調査項目

### 項目1: [調査項目名]

- 調査内容: [何を調べたか]
- 結果: [判明した内容]
- 関連ファイル: [パス（あれば）]

### 項目2: [調査項目名]

[同様の形式で継続]

## 調査結果サマリ

[調査で判明した主要な情報の要約]

## 次のアクション

- [調査結果を踏まえた次のステップ]
```

---

## 30_plan.md（実装計画）

### 目的

具体的な実装計画を記録します。

### フォーマット

```markdown
# 実装計画

## 概要

[実装アプローチの概要]

## 前提条件

- [前提1]

## 技術的決定事項

### 決定1: [決定事項]

- 背景: [なぜこの決定が必要か]
- 選択肢:
  1. [選択肢A]
  2. [選択肢B]
- 決定: [選択した選択肢]
- 理由: [決定の根拠]

## 実装ステップ

### Step 1: [ステップ名]

- 対象ファイル: [パス]
- 作業内容:
  1. [詳細1]
  2. [詳細2]
- コード例:
  ```python
  # 実装例
  ```
- 完了条件:
  - [ ] [確認項目1]
- 注意点: [あれば記載]

## 検証方法

- [ ] [検証項目1]
- [ ] [検証項目2]

## リスク・懸念事項

- [リスク1]: [対策]
```

---

## 40_progress.md（実装進捗）

### 目的

実装の進捗状況を追跡します。

### フォーマット

```markdown
# 実装進捗

## ステータス

- 開始日時: YYYY-MM-DD HH:MM
- 最終更新: YYYY-MM-DD HH:MM
- 進捗: [XX%]

## 完了タスク

- [x] [タスク1] - [完了日時]
- [x] [タスク2] - [完了日時]

## 進行中タスク

- [ ] [タスク3] - [状況メモ]

## 未着手タスク

- [ ] [タスク4]

## 発生した問題

### 問題1: [問題名]

- 発生日時: YYYY-MM-DD HH:MM
- 状況: [詳細]
- 対応: [対応内容]
- 結果: [解決/未解決]
```

---

## 80_review.md（コードレビュー結果）

### 目的

セルフレビューまたはPRレビューの結果を記録します。

### フォーマット

```markdown
# コードレビュー

## レビュー情報

- レビュー日時: YYYY-MM-DD HH:MM
- 対象ブランチ: [ブランチ名]
- ベースブランチ: [main/develop]
- レビュアー: [self/pr-reviewer/ユーザー名]

## 指摘事項

### Critical（マージ前に必須修正）

#### C1: [問題タイトル]

- ファイル: [パス:行番号]
- 問題: [詳細]
- 修正案: [具体的な修正方法]
- 対応状況: [未対応/対応済]

### High（強く推奨）

### Medium（改善推奨）

### Good（良い実装）

## サマリ

- Critical: [N]件
- High: [N]件
- Medium: [N]件
- マージ推奨: [Yes/No/条件付き]
```

### 複数回レビューの場合

2回目以降は`81_review.md`, `82_review.md`のようにインクリメントします。

---

## 90_pr.md（Pull Request内容）

### 目的

作成したPull Requestの情報を記録します。

### フォーマット

```markdown
# Pull Request

## 基本情報

- PR番号: #[番号]
- タイトル: [タイトル]
- ブランチ: [feature/xxx] -> [main]
- 作成日: YYYY-MM-DD
- URL: [PR URL]

## 概要

[PRの目的と変更内容の概要]

## やったこと

- [変更1]
- [変更2]

## やらなかったこと

- [スコープ外とした内容]

## 影響範囲

- [モジュール/機能の影響範囲]

## テスト方法

[動作確認方法]

## チェックリスト

- [ ] 型チェック通過（make lint）
- [ ] Lint通過（make lint）
- [ ] テスト通過（make test）
- [ ] カバレッジ80%以上維持
- [ ] セルフレビュー完了
```

---

## 99_history.md（意思決定ログ）

### 目的

タスク遂行中の意思決定を記録し、後から経緯を追跡可能にします。

### フォーマット

```markdown
# 意思決定ログ

## YYYY-MM-DD HH:MM - [決定事項タイトル]

### 背景

[決定が必要になった背景]

### 選択肢

1. [選択肢A]: [概要]
   - メリット: [利点]
   - デメリット: [欠点]

2. [選択肢B]: [概要]
   - メリット: [利点]
   - デメリット: [欠点]

### 決定

[選択した選択肢]

### 理由

[決定の根拠]

---

## YYYY-MM-DD HH:MM - [次の決定事項]

[同様の形式で継続]
```

---

## ファイル作成タイミング

| ファイル | 作成タイミング | 更新タイミング |
|---------|--------------|---------------|
| 00_spec.md | タスク開始時 | 要件変更時 |
| 10_task.md | 要件定義後 | タスク追加・変更時 |
| 20_survey.md | 調査完了後 | 追加調査時 |
| 30_plan.md | 計画立案後 | 計画変更時 |
| 40_progress.md | 実装開始時 | 随時（作業完了ごと） |
| 80_review.md | レビュー実施後 | - |
| 90_pr.md | PR作成時 | PR更新時 |
| 99_history.md | 意思決定発生時 | 随時 |

## 注意事項

- すべてのファイルは日本語で記述
- 絵文字は使用しない
- 明瞭で簡潔な文体を使用
- フォーマットを逸脱しない
