「コードレビューに時間がかかりすぎて、本来の開発に集中できない」——チーム開発で最も多い悩みの一つです。
OpenClawのGitHub PR連携機能を活用すれば、PRの自動レビュー・品質チェック・セキュリティスキャンを24時間体制で実行できます。 本記事では、OpenClawによるAIコードレビュー自動化の設定方法と運用ノウハウを解説します。
この記事を3秒でまとめると
- OpenClawのGitHub連携でPR作成時に自動レビューを実行
- コード品質・セキュリティ・パフォーマンスの3観点で網羅的にチェック
- ヒューマンレビューとAIレビューの組み合わせでレビュー工数を50%以上削減
なぜAIコードレビューが必要なのか
レビューのボトルネック問題
SES案件では、コードレビューが以下の問題を引き起こすことがあります。
- レビュー待ち時間: シニアエンジニアのレビュー待ちで開発がブロックされる
- 品質のばらつき: レビュアーのスキルや状態によってレビュー品質が変動
- 見落としリスク: 大量の変更を含むPRでは、セキュリティ上の問題を見落としやすい
- コンテキスト切替コスト: レビュー依頼のたびにレビュアーが作業を中断する
OpenClawによるAIコードレビューは、これらの問題を自動化と標準化で解決します。

OpenClawのGitHub PR連携設定
基本的なセットアップ
OpenClawのGitHub PR自動レビューを設定するには、cronジョブとGitHub CLI(gh)を組み合わせます。
# openclaw.json のcron設定例
{
"cron": [
{
"name": "pr-review-bot",
"schedule": "*/15 * * * *",
"prompt": "GitHub リポジトリの新しいPRをチェックし、未レビューのPRに対してAIコードレビューを実行してください。",
"model": "anthropic/claude-sonnet-4"
}
]
}
レビュースキルの作成
OpenClawのスキル機能を使って、再利用可能なレビュースキルを定義します。
# SKILL.md - AI Code Review
## 概要
GitHub PRに対してAIコードレビューを実行する。
## レビュー観点
### 1. コード品質
- 命名規則の一貫性
- 関数/メソッドの長さ(50行以上は警告)
- ネストの深さ(3段以上は警告)
- 重複コードの検出
- SOLID原則への準拠
### 2. セキュリティ
- ハードコードされた認証情報
- SQLインジェクションの可能性
- XSSの可能性
- 未サニタイズの入力
- 不適切なエラーメッセージ(内部情報の露出)
### 3. パフォーマンス
- N+1クエリの可能性
- 不要なループ処理
- メモリリークのリスク
- 非効率なデータ構造の使用
### 4. テスト
- テストの有無
- エッジケースのカバー
- モックの適切性
## 出力フォーマット
レビュー結果は以下の形式でPRにコメント:
- 🚨 Critical: セキュリティ・データ損失リスク
- ⚠️ Warning: 品質・パフォーマンス上の懸念
- 💡 Suggestion: 改善提案
- ✅ Good: 良い実装パターン
ワークフロー自動化スクリプト
OpenClawのcronジョブから呼び出すレビュー自動化の具体的な実装です。
#!/bin/bash
# scripts/review-pr.sh
# OpenClawのcronジョブから呼び出されるPRレビュースクリプト
REPO="${1:-owner/repo}"
PR_NUMBER="${2}"
# PRの差分を取得
DIFF=$(gh pr diff "$PR_NUMBER" --repo "$REPO")
FILES_CHANGED=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json files -q '.files[].path')
# 変更ファイル数のチェック
FILE_COUNT=$(echo "$FILES_CHANGED" | wc -l)
if [ "$FILE_COUNT" -gt 50 ]; then
gh pr comment "$PR_NUMBER" --repo "$REPO" \
--body "⚠️ このPRは${FILE_COUNT}ファイルの変更を含んでいます。レビューの精度を上げるため、PRの分割を検討してください。"
fi
# 変更ファイルの内容を取得してレビュー対象を準備
echo "$DIFF"
レビュー自動化の実装パターン
パターン1:PR作成時の自動レビュー
OpenClawのcronジョブで定期的にPRをチェックし、新しいPRに対して自動レビューを実行します。
// review-bot.ts - OpenClawスキルから呼び出されるレビューロジック
interface ReviewComment {
path: string;
line: number;
body: string;
severity: 'critical' | 'warning' | 'suggestion' | 'good';
}
interface ReviewResult {
summary: string;
comments: ReviewComment[];
approved: boolean;
score: number; // 0-100
}
// レビュー結果をPRコメントとして投稿
async function postReviewComments(
repo: string,
prNumber: number,
result: ReviewResult
): Promise<void> {
// サマリーコメント
const summaryBody = `
## 🤖 AI Code Review
**スコア: ${result.score}/100** ${result.score >= 80 ? '✅' : result.score >= 60 ? '⚠️' : '🚨'}
${result.summary}
### 詳細
| カテゴリ | 件数 |
|---|---|
| 🚨 Critical | ${result.comments.filter(c => c.severity === 'critical').length} |
| ⚠️ Warning | ${result.comments.filter(c => c.severity === 'warning').length} |
| 💡 Suggestion | ${result.comments.filter(c => c.severity === 'suggestion').length} |
| ✅ Good | ${result.comments.filter(c => c.severity === 'good').length} |
---
*Reviewed by OpenClaw AI • [設定を確認](https://docs.openclaw.ai)*
`;
// gh CLIでコメント投稿
await exec(`gh pr comment ${prNumber} --repo ${repo} --body '${summaryBody}'`);
// 行コメントの投稿(Critical/Warningのみ)
for (const comment of result.comments) {
if (comment.severity === 'critical' || comment.severity === 'warning') {
const icon = comment.severity === 'critical' ? '🚨' : '⚠️';
await exec(`gh api repos/${repo}/pulls/${prNumber}/comments \
-f body="${icon} ${comment.body}" \
-f path="${comment.path}" \
-F line=${comment.line} \
-f side="RIGHT"`);
}
}
}
パターン2:セキュリティ特化レビュー
セキュリティに特化したレビューチェックリストをOpenClawに組み込みます。
## セキュリティレビューチェックリスト
### 認証・認可
- [ ] 認証トークンがハードコードされていないか
- [ ] APIエンドポイントに適切な認可チェックがあるか
- [ ] JWTの検証が正しく行われているか
- [ ] セッション管理が適切か
### 入力検証
- [ ] ユーザー入力のサニタイズが行われているか
- [ ] SQLパラメータがプリペアドステートメントを使用しているか
- [ ] ファイルアップロードの拡張子・サイズ制限があるか
- [ ] URLリダイレクトのホワイトリスト検証があるか
### データ保護
- [ ] 機密データがログに出力されていないか
- [ ] 暗号化が適切に使用されているか
- [ ] パスワードのハッシュアルゴリズムが適切か(bcrypt、argon2)
- [ ] 環境変数で秘密情報が管理されているか
### エラーハンドリング
- [ ] エラーメッセージに内部情報が含まれていないか
- [ ] スタックトレースが本番環境で露出しないか
- [ ] 例外が適切にキャッチされているか
パターン3:パフォーマンスレビュー
// パフォーマンスレビューのルール定義
const performanceRules = [
{
name: 'N+1 Query Detection',
pattern: /\.find\(|\.findOne\(|\.select\(/,
context: 'loop', // ループ内でのDB呼び出しを検出
message: 'ループ内でのDB呼び出しが検出されました。N+1クエリの可能性があります。JOINまたはバッチクエリの使用を検討してください。',
severity: 'warning' as const,
},
{
name: 'Large Array Copy',
pattern: /\[\.\.\.(\w+)\]/,
context: 'largeData',
message: 'スプレッド演算子による配列コピーが検出されました。大量データの場合、パフォーマンスに影響する可能性があります。',
severity: 'suggestion' as const,
},
{
name: 'Missing Index Hint',
pattern: /WHERE.*AND.*AND/i,
context: 'sql',
message: '複数条件のWHERE句が検出されました。複合インデックスの設定を確認してください。',
severity: 'suggestion' as const,
},
{
name: 'Uncontrolled Pagination',
pattern: /LIMIT\s+\$|\.limit\(\w+\)/i,
context: 'api',
message: 'ページネーションの上限値が動的です。最大値の制限を設けてください(例:Math.min(requestedLimit, 100))。',
severity: 'warning' as const,
},
];
ヒューマンレビューとの組み合わせ
レビューフローの設計
効果的なコードレビューは、AIレビューとヒューマンレビューを組み合わせることで実現します。
PR作成
↓
[Step 1] AIレビュー(OpenClaw自動実行)
├── コーディングスタイルチェック
├── セキュリティスキャン
├── パフォーマンス分析
└── テストカバレッジ確認
↓
[Step 2] AI指摘の修正(開発者)
├── Critical/Warningの修正
└── 再レビューリクエスト
↓
[Step 3] ヒューマンレビュー(チームメンバー)
├── ビジネスロジックの妥当性
├── アーキテクチャ設計の適切さ
└── チーム規約への準拠
↓
[Step 4] マージ
AIレビューの限界を理解する
AIコードレビューは万能ではありません。以下の領域は人間のレビューが不可欠です。
- ビジネスロジックの正確性: 要件を正しく実装しているかの判断
- アーキテクチャ判断: 設計の方向性が長期的に正しいかの評価
- チームの文脈: プロジェクト固有の暗黙的な規約やルール
- UX/UIの適切さ: ユーザー体験に関する主観的な判断
OpenClawのGitHub PR自動化ガイドで、より詳細なPR自動化フローを解説しています。
OpenClawでのレビューbot実装例
HEARTBEAT.mdを使った定期チェック
# HEARTBEAT.md
## PRレビューチェック
- [ ] GitHub リポジトリの未レビューPRを確認
- [ ] 新しいPRがあれば自動レビューを実行
- [ ] レビュー済みPRのCI結果を確認
- [ ] マージ可能なPRがあればSlackに通知
Slackへのレビュー結果通知
OpenClawのSlack連携を使って、レビュー結果をチームに通知します。
// レビュー結果のSlack通知
interface SlackNotification {
channel: string;
blocks: SlackBlock[];
}
function buildReviewNotification(
repo: string,
prNumber: number,
prTitle: string,
result: ReviewResult
): SlackNotification {
const statusEmoji = result.score >= 80 ? ':white_check_mark:' :
result.score >= 60 ? ':warning:' : ':rotating_light:';
return {
channel: '#code-reviews',
blocks: [
{
type: 'header',
text: {
type: 'plain_text',
text: `${statusEmoji} AI Review: ${prTitle}`,
},
},
{
type: 'section',
fields: [
{ type: 'mrkdwn', text: `*Repository:*\n${repo}` },
{ type: 'mrkdwn', text: `*PR:*\n#${prNumber}` },
{ type: 'mrkdwn', text: `*Score:*\n${result.score}/100` },
{ type: 'mrkdwn', text: `*Issues:*\n${result.comments.length}` },
],
},
{
type: 'section',
text: {
type: 'mrkdwn',
text: result.summary,
},
},
{
type: 'actions',
elements: [
{
type: 'button',
text: { type: 'plain_text', text: 'PRを確認' },
url: `https://github.com/${repo}/pull/${prNumber}`,
},
],
},
],
};
}
OpenClawのSlack連携ガイドも参考にしてください。
レビュールールのカスタマイズ
プロジェクト固有のルール定義
各プロジェクトに合わせたレビュールールをOpenClawのワークスペースに定義できます。
# .openclaw/review-rules.yaml
rules:
naming:
- pattern: "^(get|set|is|has|can|should|will|did)"
scope: "methods"
message: "メソッド名は動詞で始めてください"
severity: "warning"
complexity:
max_function_length: 50 # 行数
max_nesting_depth: 3 # ネストの深さ
max_parameters: 5 # パラメータ数
max_cyclomatic_complexity: 10
security:
banned_functions:
- name: "eval"
message: "eval()の使用は禁止です。代替手段を使用してください。"
- name: "innerHTML"
message: "innerHTMLの使用はXSSリスクがあります。textContentまたはDOMPurifyを使用してください。"
testing:
min_coverage: 80 # %
require_tests_for:
- "src/services/**"
- "src/handlers/**"
exclude:
- "**/*.d.ts"
- "**/index.ts"
documentation:
require_jsdoc_for:
- "exported_functions"
- "exported_classes"
max_description_length: 200
チーム別のレビュー基準
OpenClawのマルチワークスペース機能を使えば、プロジェクトごとに異なるレビュー基準を設定できます。
{
"workspaces": {
"frontend-team": {
"review_focus": ["accessibility", "performance", "responsive"],
"required_reviewers": 1,
"auto_approve_threshold": 90
},
"backend-team": {
"review_focus": ["security", "database", "api_design"],
"required_reviewers": 2,
"auto_approve_threshold": 85
},
"devops-team": {
"review_focus": ["security", "infrastructure", "cost"],
"required_reviewers": 1,
"auto_approve_threshold": 80
}
}
}
OpenClawのワークスペース設計ガイドで、ワークスペースの構成方法を詳しく解説しています。
レビューメトリクスの可視化
レビュー効果の測定
AIコードレビューの効果を測定するためのメトリクスを収集します。
interface ReviewMetrics {
totalPRsReviewed: number;
avgReviewTime: number; // 分
criticalIssuesFound: number;
issuesFixedBeforeHumanReview: number;
falsePositiveRate: number; // %
developerSatisfaction: number; // 1-5
}
// メトリクスの計算例
function calculateReviewROI(metrics: ReviewMetrics): string {
const humanReviewTimeSaved = metrics.totalPRsReviewed * 15; // 1PRあたり15分の節約と仮定
const totalTimeSaved = humanReviewTimeSaved * (metrics.issuesFixedBeforeHumanReview / metrics.totalPRsReviewed);
const hoursPerMonth = totalTimeSaved / 60;
return `
月間レビュー件数: ${metrics.totalPRsReviewed}件
AI事前修正率: ${((metrics.issuesFixedBeforeHumanReview / metrics.totalPRsReviewed) * 100).toFixed(1)}%
月間時間削減: 約${hoursPerMonth.toFixed(1)}時間
Critical検出: ${metrics.criticalIssuesFound}件(本番障害を未然防止)
`;
}
SES案件でのAIコードレビュー導入事例
導入事例:チーム8名のWebアプリ開発
あるSES案件では、8名のチームでWebアプリケーションを開発していました。OpenClawのAIコードレビューを導入した結果:
- レビュー待ち時間: 平均4時間 → 平均30分に短縮
- Critical Bugs: 月3件 → 月0.5件に削減
- レビュー工数: 週20時間 → 週8時間に削減
- 開発者満足度: 3.2/5 → 4.1/5に向上
特に効果が大きかったのは、セキュリティ関連の指摘です。SQLインジェクションの可能性やXSSリスクなど、人間のレビューでは見落としやすい箇所をAIが確実に検出しました。
導入のポイント
- 段階的に導入: 最初はSuggestionのみ表示し、チームの信頼を得てからCritical/Warningを追加
- フォールスポジティブの管理: 誤検知があったらルールを調整し、チームにフィードバック
- ヒューマンレビューとの棲み分け: AIが得意な機械的チェックはAIに任せ、人間は設計判断に集中
OpenClawのセッション・サブエージェントガイドで、サブエージェントを使った高度な自動化パターンを紹介しています。
まとめ:OpenClawでコードレビューを変革する
AIコードレビューは「人間のレビューを置き換える」ものではなく、人間のレビューをより価値の高いものにするツールです。
- 自動化: コーディングスタイル・セキュリティ・パフォーマンスのチェックを自動化
- 標準化: プロジェクト全体で一貫したレビュー基準を適用
- 高速化: PRレビュー待ち時間を大幅に短縮
- 品質向上: 見落としリスクの低減とCritical Bugsの早期検出
OpenClawの柔軟なスキル・cron・GitHub連携機能を活用して、チームの開発効率を最大化しましょう。
OpenClawシリーズの他の記事も読む
👉 OpenClaw GitHub PR自動化ガイド 👉 OpenClaw Slack連携ガイド 👉 OpenClaw スキル開発ガイド 👉 SES BASEで案件を探す