Codex ルールとフック
ルール(Rules)とフック(Hooks)を使用すると、Codex の動作をカスタマイズして、ワークフローにより適合させることができます。このセクションでは、これら2つの機能について詳しく説明します。
ルール(Rules)
ルールを使用すると、Codex にカスタムの動作ガイドラインを定義でき、すべての会話に適用されます。
ルールファイルの場所
Codex は以下の場所からルールを読み込みます:
~/.codex/rules/- ユーザーレベルのルール{项目}/.codex/rules/- プロジェクトレベルのルール
ルールファイルの形式
ルールファイルの作成
# コーディングルール
## コードスタイル
- インデントはスペース4文字
- 1行は最大100文字
- 常に const/let を使用し、var は使わない
## コメント規約
- 公開関数には JSDoc コメントを含める
- 複雑なロジックにはインラインコメントで説明を追加する
- デバッグ用の console.log はすべて削除する
## テスト要件
- すべての新機能にテストケースを含める
- テストファイルの命名:*.test.js または *.spec.js
## Git コミット
- コミットメッセージは Conventional Commits 形式を使用する
- コミット前に lint とテストを実行する
## コードスタイル
- インデントはスペース4文字
- 1行は最大100文字
- 常に const/let を使用し、var は使わない
## コメント規約
- 公開関数には JSDoc コメントを含める
- 複雑なロジックにはインラインコメントで説明を追加する
- デバッグ用の console.log はすべて削除する
## テスト要件
- すべての新機能にテストケースを含める
- テストファイルの命名:*.test.js または *.spec.js
## Git コミット
- コミットメッセージは Conventional Commits 形式を使用する
- コミット前に lint とテストを実行する
ルールの有効化
設定でルールを有効化
[features]
codex_hooks = true
codex_hooks = true
ルールは各会話のシステムプロンプトに注入され、Codex が常にあなたのコーディング規約に従うことを保証します。
フック(Hooks)
フックを使用すると、特定のイベント発生時にカスタム操作を実行できます。
フックファイルの場所
フックは~/.codex/hooks.jsonで設定します:
フック設定の作成
{
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "allow"
},
{
"event": "on_task_complete",
"action": "notify",
"command": "echo 'Task completed'"
}
]
}
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "allow"
},
{
"event": "on_task_complete",
"action": "notify",
"command": "echo 'Task completed'"
}
]
}
利用可能なイベント
| イベント | 説明 |
|---|---|
on_tool_call | ツール呼び出しの前にトリガー |
on_task_start | タスク開始時にトリガー |
on_task_complete | タスク完了時にトリガー |
on_error | エラー発生時にトリガー |
on_message | メッセージ受信時にトリガー |
フック操作
| 操作 | 説明 |
|---|---|
allow | 操作の続行を許可 |
deny | 操作をブロック |
notify | 通知を送信 |
log | ログを記録 |
custom | カスタムスクリプトを実行 |
フック機能を有効にするには設定が必要です[features].codex_hooks = true
実践例
例1:テストの自動実行
Codex がファイルを変更するたびにテストを自動実行します:
自動テストフック
{
"hooks": [
{
"event": "on_tool_call",
"match": "edit_file",
"action": "custom",
"command": "npm test",
"timeout": 60
}
]
}
"hooks": [
{
"event": "on_tool_call",
"match": "edit_file",
"action": "custom",
"command": "npm test",
"timeout": 60
}
]
}
例2:コードレビューの強制
コミット前にコードレビューを強制します:
コードレビューフック
{
"hooks": [
{
"event": "on_tool_call",
"match": "git_commit",
"action": "custom",
"command": "/review",
"require_approval": true
}
]
}
"hooks": [
{
"event": "on_tool_call",
"match": "git_commit",
"action": "custom",
"command": "/review",
"require_approval": true
}
]
}
例3:ログの記録
すべてのコマンド実行を記録します:
ログフック
{
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "log",
"log_file": "/tmp/codex-commands.log"
}
]
}
"hooks": [
{
"event": "on_tool_call",
"match": "shell",
"action": "log",
"log_file": "/tmp/codex-commands.log"
}
]
}
ルールとフックの違い
| 特性 | ルール | フック |
|---|---|---|
| 作用するタイミング | 会話開始時 | イベント発火時 |
| 主な用途 | コーディング規約の定義 | 操作の自動化 |
| 設定場所 | rules/ ディレクトリ | hooks.json |
ルールとフックは組み合わせて使用できます:ルールは「どうやるか」を定義し、フックは「いつやるか」を定義します。
ベストプラクティス
ルールのベストプラクティス
- ルールは簡潔かつ明確に保つ
- 過度に厳しい制限は避ける
- プロジェクトの要件に応じてルールを調整する
フックのベストプラクティス
- 長時間実行されるフックは避ける
- 適切なタイムアウト時間を設定する
- フックの動作をテストする
フックを過度に使用すると Codex のパフォーマンスに影響する可能性があります。本当に必要なフックだけを追加してください。
よくある質問
Q: ルールが反映されない?
ルールファイルが正しい場所にあり、次の機能が有効になっていることを確認してくださいcodex_hooks機能。
Q: フックの実行が失敗すると操作はブロックされますか?
フックの設定によります。一部のフックは失敗すると後続の操作をブロックします。
Q: ルールを動的に有効化/無効化できますか?
はい、設定ファイルまたは環境変数で制御できます。
その他の拡張機能