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

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 または検証を追加 |