# CONTRIBUTING

このリポジトリへの貢献ルール（開発者向け簡略版）

目的
- 重要ファイルの誤削除や機密情報の誤コミットを防ぎ、安定した開発ワークフローを保つ。

必須ルール
1. 機密ファイルはリポジトリにコミットしない
   - `.env`, `.env.*` 等の環境変数ファイルやシークレットは常にローカルに置き、`.gitignore` に追加すること。

2. 破壊的操作は明示的承認を要する
   - ファイル/ディレクトリの大量削除や重要ディレクトリ（`docs/`, `src/backend/` 等）への削除は、プルリクエストでレビューを行い、明示的承認を得てからマージすること。

3. コミット前チェック
   - コミット前に `git status` を必ず確認すること。
   - `pre-commit` フックをリポジトリの `core.hooksPath` として有効化することを推奨する（方法は下記）。

4. フックの有効化（手順）
   - 初回セットアップ時にローカルで以下を実行して下さい:

```bash
# リポジトリルートで実行
git config core.hooksPath .githooks
```

7. ファイル削除の手順（必須）

- 方針: 常に全ての削除に対して承認を要求するのではなく、継続的な開発に必要な「重要ファイル」のみ承認対象とします。重要ファイルはリポジトリルートの `.protected-files` に列挙します（1行につき1パス）。

- 手順:
   1. 削除対象が一般的なファイル（ドキュメントや一時ファイルなど）である場合は通常のコミット運用で問題ありません。
   2. ただし、継続的に開発で使用する重要ファイル（ビルド設定、スキーマ、API仕様、共有設定ファイルなど）を削除する場合は、まず `.protected-files` にそのパスが含まれているか確認してください。
   3. `.protected-files` に含まれるパスを削除する必要がある場合は、削除前に `.deletions-approved` を作成し、そのファイルに削除する正確なパスを記載して先にコミットしてください。
   4. `.deletions-approved` をコミットした後に、削除のコミットを行うと pre-commit フックが承認を確認し、削除を許可します。

- 技術的な補足:
   - pre-commit フックは、`.protected-files` に列挙されたパスに対する削除のみ承認プロセスを要求します。
   - `.env` 系ファイルは常にコミット/変更/削除を禁止します（`.gitignore` に追加してください）。

これにより、誤って重要な開発ファイルが消えるリスクを下げつつ、日常的なファイル作業のフローを妨げない運用が可能になります。

自動管理: エージェントが `.protected-files` を生成・更新することを許可できます。リポジトリには `scripts/generate_protected_files.ps1` を用意しており、以下のコマンドで自動生成できます:

```powershell
# リポジトリルートで実行
pwsh .\scripts\generate_protected_files.ps1
```

ワークフロー:

- エージェントに更新を任せる場合、定期的にこのスクリプトを実行して `.protected-files` を更新します（PRによりチームで確認可能）。
- `.protected-files` に保護対象を追加したい場合は、まずスクリプトで生成されたファイルを編集または手動でエントリを追加し、その後コミットしてください。

必要であれば、私がレポジトリを走査して推奨の保護対象一覧を作成し、`.protected-files` を更新するパッチを作成します。実行しましょうか？
5. 一時ファイル扱いのルール
   - 一時ファイル（`*.tmp`, `*.bak`, editor swap など）は `.gitignore` に含める。
   - リポジトリ外の生成物（`node_modules`, `target/`, `dist/` など）はコミットしない。

6. ジャーナル記録
   - 重要な作業（破壊的操作など）は `journals/` に記録し、コミットに関連付けることを推奨。
   - 記述の質: 各作業について「受けた指示・依頼内容」と「実施の背景・理由」を書く。誰が何をしたか主体を明示する（例: 「〜を修正した」「〜を追加した」）。

6.1 ジャーナルのアーカイブ（週次集約）
   - 週をまたいだ作業がたまったら、当該週の日次ジャーナルを 1 本の週次アーカイブに集約する。
   - 手順:
     1. `journals/` に週次アーカイブを新規作成する。ファイル名例: `YYYYWW-週次アーカイブ.md`（例: `202603-010-第10週アーカイブ.md`。YYYY=年、WW=週番号）。
     2. 中身に「週全体のサマリー」「日付別の要約」（必要ならガントチャート等）を書き、末尾に「集約元ファイル（アーカイブ後に削除）」として元のジャーナルファイル名のリストを記載する。
     3. アーカイブファイルをコミットに含める。同一コミットで、リストに挙げた元ファイルを `journals/` から削除してもよい（アーカイブに内容が取り込まれていることを確認してから削除すること）。

---

このファイルはプロジェクトの貢献ルールの最低セットです。必要に応じて運用ルールを拡張してください。