# 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/` に記録し、コミットに関連付けることを推奨。

---

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