---
name: create-rules
description: このスキルは、「ルールを作成」「create rules」「create rules from PR」「extract rules from code」「save best practices to AGENTS.md」「AGENTS.md を整理」「ベストプラクティスを AGENTS.md に追加」「PR から AGENTS.md を更新」「コード規約を AGENTS.md に保存」「AGENTS.md を分割・統合」などのリクエスト、またはプロジェクト固有のベストプラクティスや規約を AGENTS.md に抽出・保存する際に使用する。
---

# Create Rules

プロジェクトのコード変更やコードベースを分析し、プロジェクト固有のベストプラクティスや規約を `AGENTS.md` ファイルとして抽出・保存する。

## 作業開始前の準備

**必須:** 作業開始時に `update_plan` で実行ステップを整理し、以下のステップを登録する:

```
update_plan({
  plan: [
    { step: "分析対象の特定", status: "pending" },
    { step: "既存 AGENTS.md の確認", status: "pending" },
    { step: "コード分析と規約抽出", status: "pending" },
    { step: "配置先の設計", status: "pending" },
    { step: "AGENTS.md の作成・更新", status: "pending" },
    { step: "既存ガイダンスとの統合検討", status: "pending" },
    { step: "結果の確認", status: "pending" },
  ]
})
```

各ステップの開始時に `update_plan` で `in_progress` にし、完了時に `completed` に更新する。

## 処理フロー

### Step 1: 分析対象の特定

引数として GitHub PR URL が渡された場合:

- PR URL から owner/repo と PR 番号を抽出
- `gh pr diff <PR_NUMBER> --repo <OWNER/REPO>` で変更差分を取得
- `gh pr view <PR_NUMBER> --repo <OWNER/REPO>` で PR の概要を把握

引数が渡されていない場合、デフォルトで staged/unstaged diff を分析対象とする:

- `git diff` と `git diff --cached` で現在の作業中の変更差分を取得
- diff が空の場合は、分析対象を次の順で決める:
  - まず現在の作業ディレクトリ配下の変更中ファイルを確認
  - 対象がなければ現在のブランチと親ブランチ (main/master) の差分を確認
  - それでも対象がなければ、必要時のみユーザーへの短い確認 で分析対象を尋ねる

### Step 2: 既存 AGENTS.md の確認

`AGENTS.md` のコロケーション方針に基づき、既存のガイダンスファイルを把握する:

- `Glob` で `**/AGENTS.md` と `**/AGENTS.override.md` を検索
- 変更対象のファイル群が属するディレクトリに近い `AGENTS.md` を優先して読む
- 既存ファイルがある場合は全て読み込み、適用範囲と内容を把握する
- 重複回避と分割・統合の判断材料として保持する

### Step 3: コード分析と規約抽出

分析対象のコードから、プロジェクト固有のベストプラクティスや規約を抽出する。

#### 抽出対象 (プロジェクト固有の内容のみ)

- プロジェクト固有のディレクトリ構造・ファイル配置規約
- カスタムの命名規則 (変数、関数、ファイル、ディレクトリ)
- プロジェクト固有のエラーハンドリングパターン
- 特定の内部 API やユーティリティの使用パターン
- カスタムの型定義・インターフェース設計パターン
- テストの書き方に関するプロジェクト固有の慣例
- 特定のライブラリのプロジェクト内での使い方 (ラッパーパターン等)
- コード生成やボイラープレートの規約
- 環境固有の設定パターン
- ドメインロジックの表現パターン
- 特定ディレクトリ配下でのみ有効な作業ルール

#### 除外対象 (Codex にとって冗長な一般的知識)

- 言語の公式スタイルガイド (PEP8, Google Style Guide, Effective Go 等)
- フレームワークの標準的な使い方 (React の基本パターン、Express のミドルウェア等)
- 一般的なデザインパターン (Singleton, Observer, Factory 等)
- 言語の基本構文やイディオム
- 標準的な Linter/Formatter の推奨ルール (ESLint recommended, Prettier defaults 等)
- 一般的なセキュリティプラクティス (OWASP Top 10 等)
- Git の標準的なワークフロー
- 標準的なテストのベストプラクティス (AAA パターン等)

#### 判断基準

規約を抽出する際に、以下の問いで判断する:

1. **このプロジェクト独自か?** - 他のプロジェクトでも同じルールが適用されるなら除外
2. **Codex が既知か?** - 言語・フレームワークの公式ドキュメントに記載されている内容なら除外
3. **具体的か?** - 「良いコードを書く」のような抽象的なルールは除外、「エラーは AppError クラスでラップする」のような具体的なルールは抽出
4. **摩擦を解決するか?** - このルールがないと Codex が間違った実装をしそうな内容を優先
5. **どのディレクトリで有効か?** - 特定のサブツリーでのみ有効なら、その場所に近い `AGENTS.md` へ配置

### Step 4: 配置先の設計

#### AGENTS.md のコロケーション方針

Codex は、ホームディレクトリとプロジェクトルートから現在ディレクトリまでの `AGENTS.md` / `AGENTS.override.md` を順に読み込む。新しいガイダンスは、対象ファイルに最も近いディレクトリへ配置する。

- **リポジトリ全体に効く規約**: repo root の `AGENTS.md` に記載
- **特定ディレクトリ配下だけに効く規約**: そのディレクトリ直下の `AGENTS.md` に記載
- **一時的または上書きしたい規約**: 必要な場合のみ `AGENTS.override.md` を使用

#### ファイル分割の方針

- **1 ファイル 1 スコープ**: 異なるディレクトリに効く規約は別の `AGENTS.md` に分ける
- **近い場所に置く**: 対象コードから遠い root へ何でも集約しない
- **既存ファイルを優先更新**: 同じスコープに既存の `AGENTS.md` があるなら、新規作成より更新を優先

配置方針とサンプルは `references/rules-format.md` を参照。

### Step 5: AGENTS.md の作成・更新

`AGENTS.md` を作成する際の基本フォーマット:

```markdown
# [スコープ名]

## [セクション名]

- [対象ディレクトリに固有の具体的なルール]
- [Codex が実装時に迷わないための判断基準]
```

記述スタイル:

- 簡潔で具体的な箇条書きを優先
- コード例は最小限 (必要な場合のみ)
- 「なぜ」よりも「何を」にフォーカス
- 1 つのディレクトリに固有の内容を優先
- 既存の `AGENTS.md` にある見出し構造や文体を尊重

### Step 6: 既存ガイダンスとの統合検討

既存の `AGENTS.md` / `AGENTS.override.md` がある場合、以下を検討する:

#### 統合 (マージ)

- 同じディレクトリスコープのガイダンスが複数ファイルに分散している場合
- 1 つの `AGENTS.md` に追記した方が探索順と保守性が明確な場合

#### 分割

- 1 つの `AGENTS.md` に異なるディレクトリスコープの規約が混在している場合
- 下位ディレクトリに移した方が適用範囲が明確になる場合

#### 更新

- 既存ガイダンスと矛盾する新規ルールがある場合は、既存ファイルを更新
- 重複するルールは統合し、より具体的な記述に改善
- `AGENTS.override.md` が不要になった場合は、通常の `AGENTS.md` へ戻せないか検討

統合・分割・更新を行う場合は、変更内容をユーザーに提示して確認を取る。

### Step 7: 結果の確認

作成・更新した `AGENTS.md` / `AGENTS.override.md` の一覧を表示し、どのディレクトリにどの規約を配置したかを明示して最終確認を行う。

## Additional Resources

### Reference Files

Step 4-5 で配置設計とファイル作成を行う際に参照:

- **`references/rules-format.md`** - `AGENTS.md` の配置方針、root / nested / override の使い分け、サンプル構成、記述例
