Gitの差分に対し、実行時エラーや性能問題、セキュリティ脆弱性など10項目のコード品質チェックを行い、重要度に応じて分類し、最も重要な問題が解消されるまで次の段階に進めないようにするSkill。
Gitの差分に対して、実行時異常やセキュリティ脆弱性など10項目のコード品質チェックを自動で行い、重要度に応じて結果を分類するSkill。
📜 元の英語説明(参考)
【Code Review 子 Agent · 门控二】对 git diff 逐项执行代码质量门控检查(运行时异常、性能瓶颈、安全漏洞、权限缺失、破坏性变更等 10 项),按 LOGAF h/m/l 分级输出,h 级清零后方可进入门控三。由 spec-driven-dev 的 code_review 阶段自动调用。
🇯🇵 日本人クリエイター向け解説
Gitの差分に対して、実行時異常やセキュリティ脆弱性など10項目のコード品質チェックを自動で行い、重要度に応じて結果を分類するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o cr-code-gate.zip https://jpskill.com/download/5424.zip && unzip -o cr-code-gate.zip && rm cr-code-gate.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/5424.zip -OutFile "$d\cr-code-gate.zip"; Expand-Archive "$d\cr-code-gate.zip" -DestinationPath $d -Force; ri "$d\cr-code-gate.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
cr-code-gate.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
cr-code-gateフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] cr-code-gate
cr-code-gate
コードレビューパイプラインの第2のゲート:コード品質静的ゲートサブエージェントです。
spec-driven-dev の code_review フェーズで cr-commit-check が通過した後に呼び出され、
diff に対して構造的な問題のスキャンを実行し、Sentry のエンジニアリングプラクティスにおける必須チェック項目分類を参照します。
呼び出し規約
入力(Orchestrator によってコンテキストが注入されます)
| フィールド | タイプ | 説明 |
|---|---|---|
us_id |
string | ユーザーストーリー ID |
iter_id |
string | 現在のイテレーション ID |
git_diff |
string | git diff main...HEAD の完全な出力 |
iter_summary_path |
string | requirements/{us_id}/docs/iteration_summary/current_iter.md のパス。アーキテクチャ変更承認記録の確認に使用されます。 |
coding_standards_path |
string | auxiliary/coding_standards.md のパス |
Orchestrator 呼び出し例(OpenCode Sub-Agent 形式):
invoke_skill: cr-code-gate
with:
us_id: "US042"
iter_id: "iter_003"
git_diff: "<diff output>"
iter_summary_path: "requirements/US042/docs/iteration_summary/current_iter.md"
coding_standards_path: "auxiliary/coding_standards.md"
出力(Orchestrator に書き戻されます)
{
"agent": "cr-code-gate",
"verdict": "PASS | WARN | FAIL",
"h_count": 0,
"m_count": 0,
"l_count": 0,
"findings": [
{
"id": "GK-01",
"logaf": "h",
"result": "PASS | FAIL | WARN",
"file": "src/foo.py:42",
"description": "…",
"suggestion": "…"
}
]
}
実行プロトコル
Step 0 — 起動チェックポイントを発行します
[AGENT:cr-code-gate] START us_id={us_id} iter_id={iter_id}
Step 1 — コンテキストを読み取ります
git_diffを解析し、すべての変更ファイルと具体的な行変更を抽出します。current_iter.mdを読み取り、アーキテクチャ/Schema 変更の senior 確認記録があるか検索します(GK-08 で使用)。coding_standards.mdを読み取り、プロジェクトの命名規則と規範の取り決めを取得します(GK-10 で使用)。
Step 2 — 項目ごとにゲートチェックを実行します
diff 内の各変更ファイル/コードブロックに対して、以下の10項目のチェックを実行します。
ゲートチェック項目
h レベル(いずれか1つでも該当 → 全体 FAIL)
GK-01 · 実行時例外
- 配列 / スライス境界外アクセス(長さ未検証)
- ヌルポインタ / nil デリファレンス(nil チェック未実施)
- 未捕捉の例外 / エラーがサイレントに破棄される(
_ = err) - goroutine / async で panic が recover されない
GK-02 · パフォーマンスボトルネック
- 無限ループ内での DB クエリのネスト(N+1 問題)
- アルゴリズムの複雑度が O(n²) 以上で n に上限がない
- 大規模オブジェクト(> 1 MB)がリクエストのホットパスで JSON シリアライズ/デシリアライズされる
- キャッシュなしの重複計算
GK-03 · セキュリティ脆弱性
- SQL / NoSQL インジェクション(文字列連結によるクエリ構築)
- XSS(エスケープされていないユーザー入力を直接 HTML に出力)
- ハードコードされたキー、トークン、パスワード(正規表現
(api_key|secret|password|token)\s*=\s*['"][^'"]+['"]を含む) - 安全でないデシリアライズ(
pickle.loads、eval、execでユーザーデータを処理) - パス・トラバーサル(
../がフィルタリングされていないファイルパスの連結)
GK-04 · 権限 / アクセス制御の欠如
- 新規 API エンドポイントに認証デコレータ / ミドルウェアがない
- 削除操作でリソース所有権が検証されていない
- 管理者インターフェースが一般ユーザーからアクセス可能
GK-05 · API 破壊的変更
- 公開 REST / GraphQL フィールドがリネームまたは削除された
- 必須パラメータのデフォルト値が削除された
- レスポンス Schema のフィールド型変更(例:
string→int)
GK-06 · 予期せぬ動作変更
- 変更が今回のイテレーションのスコープ外の既存ロジックに影響を与えている
- グローバル定数 / 設定のデフォルト値が変更された
- 共有ユーティリティ関数のセマンティクス変更(他の呼び出し元に影響)
m レベル(該当 → WARN、記録後に続行可能)
GK-07 · テストカバレッジ不足
- 新規のビジネスロジックに対応する単体テストがない
- テストケースに if/for 分岐があり、テスト自体の欠陥を隠蔽する可能性がある
- 権限シナリオをシミュレートするテストがない(正常系 + 権限超過拒否)
GK-08 · 重大なアーキテクチャ / Schema 変更が未承認
- 新しい外部フレームワークまたはライブラリの依存関係の導入
- データベースフィールドの追加 / 削除 / 型変更
- JSON Schema または protobuf 定義の変更
- 上記のいずれかの状況が
current_iter.mdに senior 確認記録がない
l レベル(該当 → INFO、修正は任意)
GK-09 · 余分なコードまたはレガシーコード
- コメントアウトされたコードブロック(連続3行以上)
- デバッグ文(
print()、console.log()、fmt.Println()、System.out.println()) - 現在のイテレーション開始日から30日以上前の日付が記載された
TODO/FIXME
GK-10 · 命名と規範の一貫性
- 変数 / 関数 / ファイル / メトリックの命名が
coding_standards.mdの取り決めと一致しない - ファイル名の大文字/小文字が既存の同ディレクトリのファイルスタイルと異なる
- logger / metric の命名がプロジェクトの既存のプレフィックス規則に従っていない
Step 3 — 項目ごとの発見を出力します
各発見は統一された形式を使用します:
[{logaf}] {GK-ID} | ファイル: {path}:{line} | 問題: {説明} | 提案: {実行可能な解決策}
例:
[h] GK-03 | ファイル: src/auth/handler.py:47 | 問題: API Key がソースファイルにハードコードされています | 提案: os.getenv("API_KEY") に変更し、.env.example にプレースホルダーを追加してください
[h] GK-01 | ファイル: src/db/query.py:83 | 問題: result[0] にアクセスする前にリストの長さをチェックしていません | 提案: result があれば result[0]、なければ None に変更してください
[m] GK-07 | ファイル: tests/test_auth.py | 問題: 権限超過アクセス拒否シナリオのテストが不足しています | 提案: test_access_denied_for_non_owner を追加してください
[l] GK-09 | ファイル: src/utils/parser.py:12 | 問題: コメントアウトされた古いコードブロックです | 提案: 削除するか、CHANGELOG に移動してください
Step 4 — 構造化された結果を返します
{
"agent": "cr-code-gate",
"verdict": "FAIL",
"h_count": 2,
"m_count": 1,
"l_count": 1,
"findings": [
{
"id": "GK-03", "logaf": "h", "result": "FAIL",
"file": "src/auth/handler.py:47",
"description": "API Key ハードコード",
"suggestion": "os.getenv('API_KEY') に変更"
}
]
}
Step 5 — 終了チェックポイントを発行します
[AGENT:cr-code-gate] DONE verdict=PASS|WARN|FAIL h={N} m={N} l={N}
裁定ルール
| 裁定 | 条件 | Orchestrator の動作 |
|---|---|---|
| PASS | すべての h レベルチェック項目に該当なし(m/l はあっても可) |
cr-logaf-review を引き続き呼び出します |
| WARN | h レベルに該当なし、m/l レベルの発見あり |
cr-logaf-review を引き続き呼び出し、m/l の発見を要約レポートに渡します |
| FAIL | いずれかの h レベルチェック項目に該当あり |
パイプラインを終了し、release をブロックし、修正リストを返します |
禁止行為
hレベルの問題を、コード作成者が説明を添付していてもmまたはlに格下げすることを禁止します。diff以外の既存コードに対してチェックを開始することを禁止します(今回の変更行のみをスキャンします)。git_diffが空の場合にサイレントに通過させることを禁止します。GK-06 INFO(今回はコード変更なし)を報告すべきです。- いかなるソースファイルも自動的に変更することを禁止します。提案と修正ガイドラインのみを出力します。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
cr-code-gate
Code Review 流水线的第二道门控:代码质量静态门控子 Agent。
由 spec-driven-dev 的 code_review 阶段在 cr-commit-check 通过后调用,
对 diff 进行结构性问题扫描,参照 Sentry 工程实践的必检项分类。
调用契约
输入(由 Orchestrator 注入上下文)
| 字段 | 类型 | 说明 |
|---|---|---|
us_id |
string | 用户故事 ID |
iter_id |
string | 当前迭代 ID |
git_diff |
string | git diff main...HEAD 的完整输出 |
iter_summary_path |
string | requirements/{us_id}/docs/iteration_summary/current_iter.md 路径,用于核查架构变更审批记录 |
coding_standards_path |
string | auxiliary/coding_standards.md 路径 |
Orchestrator 调用示例(OpenCode Sub-Agent 格式):
invoke_skill: cr-code-gate
with:
us_id: "US042"
iter_id: "iter_003"
git_diff: "<diff output>"
iter_summary_path: "requirements/US042/docs/iteration_summary/current_iter.md"
coding_standards_path: "auxiliary/coding_standards.md"
输出(写回 Orchestrator)
{
"agent": "cr-code-gate",
"verdict": "PASS | WARN | FAIL",
"h_count": 0,
"m_count": 0,
"l_count": 0,
"findings": [
{
"id": "GK-01",
"logaf": "h",
"result": "PASS | FAIL | WARN",
"file": "src/foo.py:42",
"description": "…",
"suggestion": "…"
}
]
}
执行协议
Step 0 — 发出启动检查点
[AGENT:cr-code-gate] START us_id={us_id} iter_id={iter_id}
Step 1 — 读取上下文
- 解析
git_diff,提取所有变更文件和具体行变更。 - 读取
current_iter.md,检索是否有架构/Schema 变更的 senior 确认记录(供 GK-08 使用)。 - 读取
coding_standards.md,获取项目命名与规范约定(供 GK-10 使用)。
Step 2 — 逐项执行门控检查
对 diff 中每一个变更文件/代码块执行以下 10 项检查:
门控检查项
h 级(任意一项命中 → 整体 FAIL)
GK-01 · 运行时异常
- 数组 / 切片越界访问(未校验长度)
- 空指针 / nil 解引用(未做 nil check)
- 未捕获的异常 / error 被静默丢弃(
_ = err) - goroutine / async 中 panic 未 recover
GK-02 · 性能瓶颈
- 无界循环内嵌套 DB 查询(N+1 问题)
- 算法复杂度 O(n²) 或更高且 n 无上界
- 大对象(> 1 MB)在请求热路径中进行 JSON 序列化/反序列化
- 无缓存的重复计算
GK-03 · 安全漏洞
- SQL / NoSQL 注入(字符串拼接构造查询)
- XSS(未转义的用户输入直接输出到 HTML)
- 硬编码密钥、Token、密码(含正则
(api_key|secret|password|token)\s*=\s*['"][^'"]+['"]) - 不安全的反序列化(
pickle.loads、eval、exec处理用户数据) - 路径遍历(
../未过滤的文件路径拼接)
GK-04 · 权限 / 访问控制缺失
- 新增 API 端点缺少鉴权装饰器 / 中间件
- 删除操作未校验资源所有权
- 管理员接口对普通用户可访问
GK-05 · API 破坏性变更
- 公开 REST / GraphQL 字段被重命名或删除
- 必填参数的默认值被移除
- 响应 Schema 中字段类型变更(如
string→int)
GK-06 · 意外行为修改
- 变更触及了本次迭代 scope 之外的既有逻辑
- 全局常量 / 配置默认值被修改
- 共享工具函数语义变更(影响其他调用方)
m 级(命中 → WARN,记录后可继续)
GK-07 · 测试覆盖不足
- 新增的业务逻辑没有对应的单元测试
- 测试用例中存在 if/for 分支,可能掩盖测试本身的缺陷
- 缺少模拟权限场景的测试(正向 + 越权拒绝)
GK-08 · 重大架构 / Schema 变更未审批
- 引入新的外部框架或库依赖
- 数据库字段新增 / 删除 / 类型变更
- JSON Schema 或 protobuf 定义变更
- 以上任意情形在
current_iter.md中无 senior 确认记录
l 级(命中 → INFO,可选修复)
GK-09 · 多余或遗留代码
- 已注释掉的代码块(连续 3 行以上)
- 调试语句(
print()、console.log()、fmt.Println()、System.out.println()) - 标注日期超过当前迭代开始日期 30 天的
TODO/FIXME
GK-10 · 命名与规范一致性
- 变量 / 函数 / 文件 / 指标命名与
coding_standards.md约定不一致 - 文件名大小写与现有同目录文件风格不符
- logger / metric 命名不遵循项目既有前缀约定
Step 3 — 输出逐条发现
每条发现使用统一格式:
[{logaf}] {GK-ID} | 文件: {path}:{line} | 问题: {描述} | 建议: {可操作方案}
示例:
[h] GK-03 | 文件: src/auth/handler.py:47 | 问题: API Key 硬编码在源文件 | 建议: 改为 os.getenv("API_KEY"),在 .env.example 添加占位符
[h] GK-01 | 文件: src/db/query.py:83 | 问题: result[0] 访问前未检查列表长度 | 建议: 改为 result[0] if result else None
[m] GK-07 | 文件: tests/test_auth.py | 问题: 缺少越权访问的拒绝场景测试 | 建议: 新增 test_access_denied_for_non_owner
[l] GK-09 | 文件: src/utils/parser.py:12 | 问题: 注释掉的旧代码块 | 建议: 删除或移至 CHANGELOG
Step 4 — 返回结构化结果
{
"agent": "cr-code-gate",
"verdict": "FAIL",
"h_count": 2,
"m_count": 1,
"l_count": 1,
"findings": [
{
"id": "GK-03", "logaf": "h", "result": "FAIL",
"file": "src/auth/handler.py:47",
"description": "API Key 硬编码",
"suggestion": "改为 os.getenv('API_KEY')"
}
]
}
Step 5 — 发出结束检查点
[AGENT:cr-code-gate] DONE verdict=PASS|WARN|FAIL h={N} m={N} l={N}
裁决规则
| 裁决 | 条件 | Orchestrator 行为 |
|---|---|---|
| PASS | 所有 h 级检查项均无命中(m/l 可有) |
继续调用 cr-logaf-review |
| WARN | 无 h 级命中,存在 m/l 级发现 |
继续调用 cr-logaf-review,m/l 发现传入汇总报告 |
| FAIL | 任意 h 级检查项命中 |
终止流水线,阻塞 release,返回修复清单 |
禁止行为
- 禁止对
h级问题降级为m或l,即使代码作者附有解释。 - 禁止对 diff 之外的既有代码发起检查(只扫描本次变更行)。
- 禁止在
git_diff为空时静默通过,应报告GK-06 INFO(本次无代码变更)。 - 禁止自动修改任何源文件,只输出建议和修复指引。