From 5e488b2490333d624e53d81e6375d2eb0fc8dea5 Mon Sep 17 00:00:00 2001 From: keito4 Date: Thu, 2 Apr 2026 17:28:21 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=205=E8=A6=B3=E7=82=B9=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E3=81=A8?= =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E3=83=AB=E3=83=BC=E3=83=AB?= =?UTF-8?q?=E9=85=8D=E5=B8=83=E3=82=92=E6=97=A2=E5=AD=98=E3=82=B3=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=83=89=E3=81=AB=E7=B5=B1=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit claude-code-harness のレビュー・セットアップ観点を導入: - /security-review を5観点レビュー(Security/Performance/Quality/Accessibility/AI Residuals)に刷新 - /setup-new-repo に .claude/rules/ 配布ステップを追加 - /pre-pr-checklist にコードレビュー観点チェックを追加 - /repo-maintenance にレビュールール存在確認ステップを追加 - .claude/rules/code-review-standards.md を新設(severity ベース verdict 基準) Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/commands/pre-pr-checklist.md | 21 ++++++++++++++ .claude/commands/repo-maintenance.md | 38 +++++++++++++++++++++++++ .claude/commands/setup-new-repo.md | 14 +++++++-- .claude/rules/code-review-standards.md | 39 ++++++++++++++++++++++++++ AGENTS.md | 2 +- 5 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 .claude/rules/code-review-standards.md diff --git a/.claude/commands/pre-pr-checklist.md b/.claude/commands/pre-pr-checklist.md index be9886aa..7960ad97 100644 --- a/.claude/commands/pre-pr-checklist.md +++ b/.claude/commands/pre-pr-checklist.md @@ -21,6 +21,19 @@ This command runs a comprehensive checklist to ensure your changes are ready for 5. **Integration Tests**: Runs Bats integration tests 6. **Shellcheck**: Validates shell scripts +### Code Review (5観点) + +差分に対して以下の5観点でクイックレビューを実施する: + +1. **Security**: 機密情報露出、インジェクション、認証漏れ +2. **Performance**: N+1クエリ、メモリリーク、不要な再レンダリング +3. **Quality**: 命名、単一責任、テストカバレッジ、エラーハンドリング +4. **Accessibility**: ARIA属性、キーボードナビ、セマンティックHTML +5. **AI Residuals**: `it.skip`、`localhost`ハードコード、`TODO`/`FIXME`残骸、仮実装 + +critical / major の指摘があれば警告を表示し、PR作成前の修正を推奨する。 +minor / recommendation のみなら APPROVE 相当として通過。 + ### PR Analysis - **Size Estimation**: Calculates diff lines and file count @@ -55,6 +68,14 @@ This command runs a comprehensive checklist to ensure your changes are ready for ✓ Tests passed (101/101) ✓ Coverage: 82.5% (threshold: 70%) +🔍 Code Review (5観点) + ✓ Security: No issues + ✓ Performance: No issues + ⚠ Quality: 1 minor (naming in src/utils.ts:42) + ✓ Accessibility: No issues + ⚠ AI Residuals: 1 minor (TODO in src/handler.ts:15) + → Verdict: APPROVE (minor only) + 📊 PR Analysis • Size: Medium (247 lines, 8 files) • Suggested label: size/M diff --git a/.claude/commands/repo-maintenance.md b/.claude/commands/repo-maintenance.md index 371ca7b4..a65f5cbb 100644 --- a/.claude/commands/repo-maintenance.md +++ b/.claude/commands/repo-maintenance.md @@ -620,6 +620,43 @@ PR 作成前のチェック項目を検証: - ✅ すべてのチェック項目が設定済み - ⚠️ 不足している項目あり(詳細をリスト) +### 3.3.1 Code Review Rules Check + +コードレビュー基準の設定状況を確認: + +実行内容: + +- `.claude/rules/code-review-standards.md` の存在確認 +- `.claude/rules/development-standards.md` の存在確認 +- `.claude/rules/git-conventions.md` の存在確認 +- config リポジトリのルールファイルとの差分確認(config リポジトリ自身は除く) + +結果: + +- ✅ すべてのレビュールールが設定済み +- ⚠️ 不足しているルールあり(詳細をリスト) +- 🔄 config リポジトリとの差分あり(更新推奨ファイルをリスト) + +MODE が `full` の場合: + +- 不足ルールを config リポジトリからコピー +- 差分があるファイルについて更新を提案 + +```bash +# config リポジトリのパスを取得(このリポジトリ自身なら SKIP) +CONFIG_REPO="$(git -C /path/to/config rev-parse --show-toplevel 2>/dev/null)" + +# ルールファイルの存在確認 +RULES_DIR=".claude/rules" +REQUIRED_RULES=("code-review-standards.md" "development-standards.md" "git-conventions.md") + +for rule in "${REQUIRED_RULES[@]}"; do + if [ ! -f "${RULES_DIR}/${rule}" ]; then + echo "⚠️ Missing: ${RULES_DIR}/${rule}" + fi +done +``` + ### 3.4 CLAUDE.md Symlink Check CLAUDE.md が AGENTS.md へのシンボリックリンクであることを確認: @@ -2716,6 +2753,7 @@ fi ├── .editorconfig: ✅ Configured (or 🔧 Generated) ├── scripts: ✅ All standard scripts defined (or ⚠️ Missing: test, lint) ├── Pre-PR Checklist: ✅ CI workflow exists +├── Code Review Rules: ✅ All rules configured (or ⚠️ Missing rules) ├── CLAUDE.md: ✅ Symlink to AGENTS.md ├── AGENTS.md: ✅ Auto-generated sections up to date (or 🔧 Updated) ├── CI/CD: ✅ Standard level configured diff --git a/.claude/commands/setup-new-repo.md b/.claude/commands/setup-new-repo.md index fddf95f7..561428c9 100644 --- a/.claude/commands/setup-new-repo.md +++ b/.claude/commands/setup-new-repo.md @@ -300,9 +300,9 @@ CI workflow と合わせて必ずコピーする。 `claude-code-review.yml` は PR に対して Claude による自動コードレビューを実行する workflow。 -## Step 8: Setup Claude Code Hooks +## Step 8: Setup Claude Code Hooks & Rules -Claude Code の品質ゲートフックをセットアップする。 +Claude Code の品質ゲートフック・レビュールールをセットアップする。 ### 8.1 hooks ディレクトリ作成とファイルコピー @@ -313,6 +313,15 @@ cp CONFIG_REPO/.claude/hooks/pre_git_quality_gates.py TARGET_DIR/.claude/hooks/ cp CONFIG_REPO/.claude/hooks/post_git_push_ci.py TARGET_DIR/.claude/hooks/ ``` +### 8.1.5 rules ディレクトリ作成とファイルコピー + +```bash +mkdir -p TARGET_DIR/.claude/rules +cp CONFIG_REPO/.claude/rules/code-review-standards.md TARGET_DIR/.claude/rules/ +cp CONFIG_REPO/.claude/rules/development-standards.md TARGET_DIR/.claude/rules/ +cp CONFIG_REPO/.claude/rules/git-conventions.md TARGET_DIR/.claude/rules/ +``` + ### 8.2 `.claude/settings.json` 作成 hooks セクションのみ含める。permissions セクションはプロジェクト固有のため含めない(ユーザーが後から設定)。 @@ -713,6 +722,7 @@ Files Created: ✅ .github/ISSUE_TEMPLATE/ ✅ .github/PULL_REQUEST_TEMPLATE.md ✅ .claude/hooks/ (3 ファイル) +✅ .claude/rules/ (3 ファイル: code-review-standards, development-standards, git-conventions) ✅ .claude/settings.json ✅ .claude/plugins.txt ✅ .claude/skills.txt diff --git a/.claude/rules/code-review-standards.md b/.claude/rules/code-review-standards.md new file mode 100644 index 00000000..7835c2c2 --- /dev/null +++ b/.claude/rules/code-review-standards.md @@ -0,0 +1,39 @@ +--- +paths: + - '**/*' +--- + +# Code Review Standards + +## 5観点レビュー + +コードレビュー時は以下の5観点で評価する。 + +| 観点 | チェック内容 | +| ----------------- | -------------------------------------------------------------- | +| **Security** | SQLインジェクション, XSS, 機密情報露出, 入力バリデーション不足 | +| **Performance** | N+1クエリ, 不要な再レンダリング, メモリリーク, 不要な再計算 | +| **Quality** | 命名, 単一責任, テストカバレッジ, エラーハンドリング | +| **Accessibility** | ARIA属性, キーボードナビゲーション, カラーコントラスト | +| **AI Residuals** | モック残骸, ハードコード値, スキップされたテスト, 仮実装 | + +## Severity 判定基準 + +各指摘を以下の severity に分類し、verdict を決定する。 + +| Severity | 定義 | Verdict への影響 | +| ------------------ | ------------------------------------------------------ | ----------------------- | +| **critical** | セキュリティ脆弱性、データ損失リスク、本番障害の可能性 | 1件でも REQUEST_CHANGES | +| **major** | 既存機能の破壊、仕様との矛盾、テスト不通過 | 1件でも REQUEST_CHANGES | +| **minor** | 命名改善、コメント不足、スタイル不統一 | verdict に影響しない | +| **recommendation** | ベストプラクティス提案、将来の改善案 | verdict に影響しない | + +minor / recommendation のみの場合は APPROVE を返す。「あったほうが良い改善」は REQUEST_CHANGES の理由にならない。 + +## AI Residuals 検出パターン + +| Severity | パターン | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------- | +| **major** | `localhost` / `127.0.0.1` の接続先, `it.skip` / `describe.skip` / `test.skip`, ハードコードされた秘密情報, dev/staging 固定 URL | +| **minor** | `mockData`, `dummy`, `fakeData`, `TODO`, `FIXME` | +| **recommendation** | `temporary implementation`, `replace later`, `placeholder` などの仮実装コメント | diff --git a/AGENTS.md b/AGENTS.md index a64a2ac7..80c78be8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -82,7 +82,7 @@ Development infrastructure template repository providing DevContainer images, CI | `/pre-pr-checklist` | (no description) | | `/repo-maintenance` | Comprehensive repository maintenance - run all health checks and updates | | `/security-credential-scan` | (no description) | -| `/security-review` | (no description) | +| `/security-review` | 5観点コードレビュー(Security / Performance / Quality / Accessibility / AI Residuals) | | `/setup-ci` | Setup comprehensive CI/CD workflows for your repository | | `/setup-doppler` | Setup Doppler secret management with dev/dev_personal configuration | | `/setup-husky` | (no description) | From 2dafe5e9670c1dca1c52612b1d8836621b273fba Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 09:10:00 +0000 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20security-review.md=E3=82=925?= =?UTF-8?q?=E8=A6=B3=E7=82=B9=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E5=BD=A2?= =?UTF-8?q?=E5=BC=8F=E3=81=AB=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - security-review.md: 「10個の改善案」から5観点レビューに全面刷新 Security/Performance/Quality/Accessibility/AI Residuals + severity判定 - pre-pr-checklist.md: critical/majorをREQUEST_CHANGES相当として扱うよう修正 code-review-standards.mdとの文言不一致を解消 Co-authored-by: keito4 --- .claude/commands/pre-pr-checklist.md | 2 +- .claude/commands/security-review.md | 37 +++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.claude/commands/pre-pr-checklist.md b/.claude/commands/pre-pr-checklist.md index 7960ad97..818e708e 100644 --- a/.claude/commands/pre-pr-checklist.md +++ b/.claude/commands/pre-pr-checklist.md @@ -31,7 +31,7 @@ This command runs a comprehensive checklist to ensure your changes are ready for 4. **Accessibility**: ARIA属性、キーボードナビ、セマンティックHTML 5. **AI Residuals**: `it.skip`、`localhost`ハードコード、`TODO`/`FIXME`残骸、仮実装 -critical / major の指摘があれば警告を表示し、PR作成前の修正を推奨する。 +critical / major の指摘があれば REQUEST_CHANGES 相当として扱い、PR作成前に修正必須とする。 minor / recommendation のみなら APPROVE 相当として通過。 ### PR Analysis diff --git a/.claude/commands/security-review.md b/.claude/commands/security-review.md index ef84d314..5b8c7504 100644 --- a/.claude/commands/security-review.md +++ b/.claude/commands/security-review.md @@ -1 +1,36 @@ -このコードを10個の改善案を出してください。 +以下の5観点でこのコードをレビューしてください。 + +## 5観点レビュー + +### 観点一覧 + +| 観点 | チェック内容 | +| ----------------- | -------------------------------------------------------------- | +| **Security** | SQLインジェクション, XSS, 機密情報露出, 入力バリデーション不足 | +| **Performance** | N+1クエリ, 不要な再レンダリング, メモリリーク, 不要な再計算 | +| **Quality** | 命名, 単一責任, テストカバレッジ, エラーハンドリング | +| **Accessibility** | ARIA属性, キーボードナビゲーション, カラーコントラスト | +| **AI Residuals** | モック残骸, ハードコード値, スキップされたテスト, 仮実装 | + +### Severity 基準 + +| Severity | 定義 | Verdict への影響 | +| ------------------ | ------------------------------------------------------ | ----------------------- | +| **critical** | セキュリティ脆弱性、データ損失リスク、本番障害の可能性 | 1件でも REQUEST_CHANGES | +| **major** | 既存機能の破壊、仕様との矛盾、テスト不通過 | 1件でも REQUEST_CHANGES | +| **minor** | 命名改善、コメント不足、スタイル不統一 | verdict に影響しない | +| **recommendation** | ベストプラクティス提案、将来の改善案 | verdict に影響しない | + +### 出力フォーマット + +各観点について以下の形式で出力してください: + +``` +## [観点名] +- [severity] [指摘内容] (ファイル名:行番号) +``` + +最後に総合 verdict を以下のいずれかで明示してください: + +- **APPROVE**: minor / recommendation のみ +- **REQUEST_CHANGES**: critical / major が1件以上 From abb54977b399f3b426ee935cc19e5c28cd00aaa1 Mon Sep 17 00:00:00 2001 From: keito4 Date: Thu, 2 Apr 2026 19:03:54 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20security-review.md=20=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=83=AB=E7=89=88=E3=82=92=E5=BE=A9=E5=85=83=EF=BC=88?= =?UTF-8?q?frontmatter=20+=20=E8=A9=B3=E7=B4=B0=E3=82=B9=E3=83=86=E3=83=83?= =?UTF-8?q?=E3=83=97=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/commands/security-review.md | 168 ++++++++++++++++++++++++---- 1 file changed, 144 insertions(+), 24 deletions(-) diff --git a/.claude/commands/security-review.md b/.claude/commands/security-review.md index 5b8c7504..4537aec4 100644 --- a/.claude/commands/security-review.md +++ b/.claude/commands/security-review.md @@ -1,36 +1,156 @@ -以下の5観点でこのコードをレビューしてください。 +--- +description: 5観点コードレビュー(Security / Performance / Quality / Accessibility / AI Residuals) +allowed-tools: Read, Grep, Glob, Bash(git:*), Bash(grep:*), Bash(wc:*) +argument-hint: '[--scope FILE_OR_DIR] [--base-ref REF]' +--- -## 5観点レビュー +# Code Review Command -### 観点一覧 +変更差分を5観点でレビューし、severity ベースの verdict(APPROVE / REQUEST_CHANGES)を返す。 -| 観点 | チェック内容 | -| ----------------- | -------------------------------------------------------------- | -| **Security** | SQLインジェクション, XSS, 機密情報露出, 入力バリデーション不足 | -| **Performance** | N+1クエリ, 不要な再レンダリング, メモリリーク, 不要な再計算 | -| **Quality** | 命名, 単一責任, テストカバレッジ, エラーハンドリング | -| **Accessibility** | ARIA属性, キーボードナビゲーション, カラーコントラスト | -| **AI Residuals** | モック残骸, ハードコード値, スキップされたテスト, 仮実装 | +## Step 1: レビュー対象の特定 -### Severity 基準 +引数に応じてレビュー対象を決定する。 -| Severity | 定義 | Verdict への影響 | -| ------------------ | ------------------------------------------------------ | ----------------------- | -| **critical** | セキュリティ脆弱性、データ損失リスク、本番障害の可能性 | 1件でも REQUEST_CHANGES | -| **major** | 既存機能の破壊、仕様との矛盾、テスト不通過 | 1件でも REQUEST_CHANGES | -| **minor** | 命名改善、コメント不足、スタイル不統一 | verdict に影響しない | -| **recommendation** | ベストプラクティス提案、将来の改善案 | verdict に影響しない | +```bash +# --base-ref が指定されている場合 +git diff --name-only --diff-filter=ACMR ${BASE_REF} -### 出力フォーマット +# --scope が指定されている場合 +# 指定されたファイル/ディレクトリのみ対象 -各観点について以下の形式で出力してください: +# どちらもない場合: ステージング差分 → 直近コミット差分 → main との差分 +git diff --cached --name-only --diff-filter=ACMR +# ステージングが空なら +git diff --name-only --diff-filter=ACMR HEAD~1 +# それも空なら +git diff --name-only --diff-filter=ACMR main...HEAD +``` + +差分がない場合はレビュー不要としてメッセージを表示して終了する。 + +## Step 2: 差分の収集 + +```bash +git diff --stat ${BASE_REF:-HEAD~1} +git diff ${BASE_REF:-HEAD~1} -- ${CHANGED_FILES} +``` + +## Step 3: AI Residuals の静的走査 + +変更ファイルに対して以下のパターンを検索する。 + +### Major(出荷リスク) + +``` +localhost|127\.0\.0\.1|0\.0\.0\.0 # ローカルアドレス +it\.skip|describe\.skip|test\.skip # スキップされたテスト +PRIVATE_KEY|SECRET_KEY|PASSWORD= # ハードコードされた秘密情報候補 +staging\.|dev\.|sandbox\. # 環境固定 URL +``` + +### Minor(残骸候補) ``` -## [観点名] -- [severity] [指摘内容] (ファイル名:行番号) +mockData|dummyData|fakeData|testData # テストデータ残骸 +TODO|FIXME|HACK|XXX # 未対応マーカー +``` + +### Recommendation(仮実装) + +``` +temporary|placeholder|replace.later|workaround # 仮実装コメント +``` + +各ヒットのファイル名・行番号・該当行を記録する。 + +## Step 4: 5観点レビュー + +変更差分を以下の5観点で評価する。 + +### 4.1 Security + +- SQL インジェクション(文字列結合によるクエリ構築) +- XSS(未サニタイズの出力) +- 機密情報露出(API キー、トークン、パスワードのハードコード) +- 入力バリデーション不足(外部入力の未検証使用) +- 認証・認可の欠落(エンドポイントの保護漏れ) + +### 4.2 Performance + +- N+1 クエリ(ループ内の DB アクセス) +- 不要な再レンダリング(依存配列の誤り、メモ化の欠落) +- メモリリーク(イベントリスナーの未解除、タイマーの未クリア) +- 非効率なアルゴリズム(O(n²) 以上の計算量) +- 大きなバンドル影響(不要な import、tree-shaking 阻害) + +### 4.3 Quality + +- 命名の明瞭さ(意図が伝わる命名か) +- 単一責任の遵守(1関数/1クラスが1つの責務か) +- テストカバレッジ(変更コードに対するテストの存在) +- エラーハンドリング(例外の適切な捕捉と処理) +- コードの重複(DRY 違反) + +### 4.4 Accessibility + +- ARIA 属性(インタラクティブ要素の適切なラベル付け) +- キーボードナビゲーション(フォーカス管理、Tab 順序) +- カラーコントラスト(WCAG AA 基準) +- セマンティック HTML(div/span の乱用) +- フォーム要素のラベル(`