メインコンテンツまでスキップ

Cursor でセルフレビューフックを実装してより安全�?AI コーディングを実�?

Cursor Self-Review Hooks

AI コーディングアシスタントは強力ですが、安全でないコードを生成したり、危険なコマンドを実行したり、微妙なバグを導入したりする可能性があります。セルフレビューフックは、重要なポイント�?AI が自分の作業を監査することで、安全ネットを作成します。このガイドでは、Cursor で包括的なフックシステムを実装する方法を示します�?

セルフレビューフックとは何ですか�?

セルフレビューフックは、AI が進む前に自分の出力をレビューする自動化されたチェックポイントです。これらは次のように機能します:

  • **セキュリティガー�?*:危険なコマンド(rm -rf /curl | sh)をブロック
  • コードレビュアー:論理エラーやアンチパターンをチェッ�?- **安全ネッ�?*:force-push や破壊的な操作を防止
  • **品質ゲー�?*:プロジェクト標準との整合性を確保

4 つのフックイベン�?

フッ�?1:セッション開始 - ドクトリン注�?

新しいセッションが開始するときに、安全原則を注入します�? .cursor/hooks/doctrine.md を作成します�?

# Cursor ドクトリ�?- 安全第一

## 核心原則
1. **確認なしに破壊的なコマンドを実行しな�?*
2. **削除前に常にファイルパスを確認す�?*
3. **変更を適用する前にすべてのコードをレビューす�?*
4. **利便性より安全なデフォルトを優先する**

## フラグを立てるべき危険なパターン
- 絶対パスを含む `rm -rf`
- `curl ... | sh` また�?`wget ... | bash`
- `git push --force` また�?`git push -f`
- データベース削除コマンド
- 権限昇格(`sudo``chmod 777`�?- パラメータ化されていない生の SQL

## レビューチェックリス�?タスクを完了する前に�?- [ ] シェル実行に破壊的なコマンドがな�?- [ ] すべてのファイル操作に検証済みのパスが使用されている
- [ ] ハードコードされたシークレットや認証情報がな�?- [ ] エラー処理が存在する
- [ ] 変更が元に戻せる

フッ�?2:編集後のセルフレビュー

ファイルを編集した後、自動的に差分をレビューします�? .cursor/hooks/post-edit-review.md を作成します�?

# 編集後のセルフレビュ�?
変更を加えました。先に進む前に、以下をレビューしてください�?
## セキュリティチェック
- [ ] シークレット、API キー、パスワードが追加されていな�?- [ ] SQL インジェクションの脆弱性がない
- [ ] Web コードに XSS の脆弱性がない
- [ ] 入力検証が存在す�?
## 論理チェック
- [ ] エッジケースが処理されている
- [ ] エラーパスがカバーされている
- [ ] 無限ループやベースケースのない再帰がない
- [ ] リソースのクリーンアップ(ファイル、接続)が存在す�?
## スタイルチェック
- [ ] プロジェクトのコーディング標準に従ってい�?- [ ] 命名が一貫してい�?- [ ] コメント�?WHAT ではなく WHY を説明してい�?- [ ] デバッグコードが残っていない(console.log など�?
## いずれかのチェックが失敗した場合
問題を報告して停止してください。修正されるまで先に進まないでください�?```

### フッ�?3:シェル実行前のゲー�?
シェルコマンドを実行する前に、安全性を確認します�?
`.cursor/hooks/pre-shell-gate.md` を作成します�?
```markdown
# シェル実行前のゲート

実行しようとしているコマンド:`{command}`

## 必須チェック

### 1. 破壊的操作チェッ�?このコマンドは以下を行いますか:
- ファイルやディレクトリを削除しますか�?- システム設定を変更しますか?
- 権限を変更しますか?
- データベースやテーブルを削除しますか�?
はいの場�?�?明示的なユーザー確認が必�?
### 2. ネットワーク操作チェック
このコマンドは以下を行いますか:
- スクリプトをダウンロードして実行しますか?
- 外部サービスにデータを送信しますか�?- 内部ポートを公開しますか�?
はいの場�?�?リスクを説明して確認を求める

### 3. 不可逆的操作チェック
このコマンドは以下を行いますか:
- git �?force push しますか�?- 本番データを上書きしますか?
- ブランチやタグを削除しますか�?
はいの場�?�?停止して明示的な確認を求める

## 安全なコマンドの�?�?`npm install` - 安全なパッケージインストール
�?`git status` - 読み取り専用操作
�?`mkdir new-directory` - 非破壊的

## 危険なコマンドの�?�?`rm -rf /` - 破壊的、絶対パ�?�?`curl https://example.com/install.sh | sh` - リモート実行
�?`git push --force` - 不可�?�?`DROP TABLE users` - データ破�?```

### フッ�?4:タスク完了時の最終レビュ�?
タスクを完了としてマークする前に、最終監査を実行します�?
`.cursor/hooks/completion-review.md` を作成します�?
```markdown
# タスク完了時の最終レビュ�?
## 概要
完了したことを簡潔に要約してください�?
## 変更内容
変更されたすべてのファイルをリストアップ�?- `file/path/one` - 変更内容
- `file/path/two` - 変更内容

## セキュリティ監査
- [ ] コードに認証情報がな�?- [ ] バックドアや疑わしいパターンがな�?- [ ] 入力検証が存在す�?- [ ] 出力エンコーディングが存在する(Web の場合)

## テスト検�?- [ ] 変更が正常にコンパイ�?ビルドされる
- [ ] 既存のテストがまだ通過する
- [ ] 新機能に新しいテストが追加された
- [ ] 必要に応じて手動テストが実行され�?
## ロールバック計画
問題が発生した場合:
1. コミットを元に戻す:`git revert HEAD`
2. また�?git からファイルを復元:`git checkout -- <files>`
3. またはバックアップパッチを適用:`git apply backup.patch`

## 既知の制�?既知の問題や制限をリストアップ:
- 制限 1
- 制限 2

フックシステムの実装

ステップ 1:フックディレクトリ構造の作成

mkdir -p .cursor/hooks

ステップ 2:Cursor ルールへの追�?

.cursor/rules/000-safety-doctrine.mdc を作成します�?

---
description: '安全ドクトリンとセルフレビューフック'
globs: ['**/*']
alwaysApply: true
---

# 安全ドクトリ�?
## 自動フッ�?
以下のフックがすべてのセッションでアクティブです�?
### セッション開�?`.cursor/hooks/doctrine.md` を読んで、すべての原則に従ってください�?
### ファイル編集�?`.cursor/hooks/post-edit-review.md` を読んでレビューを実行してください�?
### シェルコマンド前
`.cursor/hooks/pre-shell-gate.md` を読んで安全性を確認してください�?
### タスク完了時
`.cursor/hooks/completion-review.md` を読んで最終監査を実行してください�?
## オーバーライドプロトコル
ユーザーが明示的に危険な操作を要求した場合:
1. リスクを警告する
2. 明示的な確認を求める
3. より安全な代替案を提案す�?4. 明確な「はい」の応答後にのみ進む

ステップ 3:監査証跡のメッセージバ�?

決定を追跡するために .cursor/audit-log.md を作成します�?

# 監査ログ

## フォーマット

[YYYY-MM-DD HH:MM] [AGENT] [HOOK] [DECISION] [DETAILS]


## エントリ�?
### 2026-06-22 10:30
- Agent: Claude
- Hook: Pre-Shell
- Decision: BLOCKED
- Details: ユーザー�?`rm -rf /tmp/*` を要�?- ワイルドカードのリスクによりブロック。代わり�?`rm -rf /tmp/specific-folder` を提案�?
### 2026-06-22 11:15
- Agent: GPT-4
- Hook: Post-Edit
- Decision: PASSED
- Details: すべてのセキュリティチェックが通過。認証モジュールの変更に問題は見つからなかった�?```

## 危険なコマンドデータベー�?
`.cursor/dangerous-commands.json` を作成します�?
```json
{
"blocked_patterns": [
{
"pattern": "rm\\s+-rf\\s+/",
"severity": "critical",
"reason": "Can delete entire filesystem"
},
{
"pattern": "curl\\s+.*\\|\\s*(sh|bash)",
"severity": "high",
"reason": "Remote code execution"
},
{
"pattern": "git\\s+push\\s+.*(--force|-f)",
"severity": "high",
"reason": "Can overwrite remote history"
},
{
"pattern": "DROP\\s+TABLE",
"severity": "critical",
"reason": "Data destruction"
},
{
"pattern": "chmod\\s+777",
"severity": "medium",
"reason": "Overly permissive permissions"
},
{
"pattern": "sudo",
"severity": "medium",
"reason": "Privilege escalation"
}
],
"warning_patterns": [
{
"pattern": "rm\\s+-rf",
"severity": "medium",
"reason": "Recursive deletion - verify path"
},
{
"pattern": ">\\s+/etc/",
"severity": "medium",
"reason": "Modifying system files"
}
]
}

Cursor Composer との統合

Composer を使用する場合、プロンプトに以下を追加してください�?

変更を適用する前に:
1. セキュリティ問題をレビューす�?2. 危険なパターンをチェックする
3. エラー処理を確認する
4. シークレットが露出していないことを確認す�?
変更を適用した後�?1. 編集後のレビューを実行す�?2. コードがコンパイ�?実行されることを確認する
3. テストが通過することを確認す�?```

## チーム導�?
### オンボーディングチェックリス�?
新しいチームメンバー向け�?
1. [ ] `.cursor/hooks/doctrine.md` をレビューす�?2. [ ] 4 つのフックイベントを理解する
3. [ ] 安全なコマンドで練習する
4. [ ] オーバーライドプロトコルを学�?5. [ ] 監査ログを週次でレビューす�?
### コードレビュー統�?
PR テンプレートに追加:

```markdown
## AI 安全チェックリス�?- [ ] すべての AI 生成コードが人間によってレビューされ�?- [ ] 危険なコマンドが実行されていない
- [ ] セキュリティ監査が通過した
- [ ] 監査ログが最新である

効果の測�?

以下のメトリクスを追跡してください:

メトリク�?目標測定方法
ブロックされた危険なコマンド100%監査ログエントリ�?
編集後に検出された問�?>80%レビューで見つかった問題
セキュリティインシデント0インシデントレポート
誤検出率<10%ユーザーのオーバーライド頻度

クイックリファレンス

状況アクショ�?
AI �?rm -rf を提�?ブロック - パスを手動で確認
AI �?curl | sh を提�?ブロック - 先にダウンロードしてレビュ�?
AI �?git push -f を提�?ブロック - git push --force-with-lease を使�?
AI がハードコードされた API キーを追�?ブロック - 環境変数を使�?
AI がエラー処理をスキッ�?リクエス�?- try/catch または検証を追加

関連リソー�?