取り組みの背景 — なぜ AI で PR レビューを自動化するのか
チーム開発でもっとも時間がかかる工程のひとつが、Pull Request(PR)のコードレビューです。レビュー待ちの間に作業が止まり、マージまでのリードタイムが伸びてしまう——多くの開発者が経験している課題ではないでしょうか。
Antigravity の AI エージェントと GitHub を組み合わせると、PR が作成された瞬間にコードの品質チェック、セキュリティリスクの検出、改善提案の生成を自動で行えます。人間のレビュアーは AI が見つけた問題点をベースに確認するだけでよくなり、レビュー時間を大幅に短縮できます。
初めて AI コードレビューに取り組む方でも安心して進められる内容です。
前提環境と準備するもの
AI による PR レビュー自動化を始めるために、以下の環境を準備しましょう。
- Antigravity IDE(最新版を推奨)
- GitHub アカウント(リポジトリへの書き込み権限)
- Node.js 18 以上(スクリプト実行用)
- Git(ローカル環境にインストール済み)
まず、Antigravity から GitHub に接続します。Antigravity のターミナルで以下を実行してください。
# GitHub CLI のインストール確認
gh --version
# gh version 2.x.x
# GitHub 認証(初回のみ)
gh auth login
# ブラウザが開くので GitHub アカウントで認証する認証が完了すると、Antigravity のエージェントが GitHub の PR 情報を直接取得できるようになります。
Antigravity エージェントで PR の差分を自動解析する
Antigravity の最大の強みは、AI エージェントがリポジトリ全体のコンテキストを理解した上でコードレビューを行える点です。単なる静的解析ツールとは異なり、プロジェクトの設計方針や既存コードとの整合性まで考慮した指摘が可能です。
基本的な PR レビューの流れ
Antigravity のエージェントチャットで、以下のようにリクエストします。
このリポジトリの PR #42 をレビューしてください。
特に以下の観点で確認をお願いします:
1. 型安全性に問題がないか
2. エラーハンドリングが適切か
3. パフォーマンスに影響する変更がないか
エージェントは gh pr diff 42 を実行して差分を取得し、変更されたファイルを1つずつ読み込みながらレビューコメントを生成します。
diff を取得してレビューするスクリプト例
手動でも自動でも使える、PR レビュー補助スクリプトを作成しましょう。
// scripts/ai-pr-review.ts
// Antigravity × GitHub PR レビュー自動化スクリプト
import { execSync } from "child_process";
interface ReviewComment {
file: string;
line: number;
severity: "error" | "warning" | "info";
message: string;
}
function getPRDiff(prNumber: number): string {
// PR の差分を取得
const diff = execSync(`gh pr diff ${prNumber}`, {
encoding: "utf-8",
});
return diff;
}
function parseDiffFiles(diff: string): string[] {
// 変更されたファイル名を抽出
const files = diff
.split("\n")
.filter((line) => line.startsWith("diff --git"))
.map((line) => {
const match = line.match(/b\/(.+)$/);
return match ? match[1] : "";
})
.filter(Boolean);
return files;
}
function generateReviewPrompt(
diff: string,
files: string[]
): string {
return `
以下の PR 差分をレビューしてください。
## レビュー観点
- 型安全性(TypeScript の型エラーの可能性)
- エラーハンドリング(未処理の例外、エッジケース)
- セキュリティ(インジェクション、認証漏れ)
- パフォーマンス(不要な再レンダリング、N+1クエリ)
- コード品質(命名規則、関数の責務分離)
## 変更ファイル
${files.map((f) => `- ${f}`).join("\n")}
## 差分
\`\`\`diff
${diff}
\`\`\`
各ファイルについて、問題があれば具体的な行番号と改善案を提示してください。
問題がない場合は「LGTM」と記載してください。
`.trim();
}
// メイン処理
const prNumber = parseInt(process.argv[2] || "0");
if (!prNumber) {
console.error("使い方: npx tsx scripts/ai-pr-review.ts <PR番号>");
process.exit(1);
}
const diff = getPRDiff(prNumber);
const files = parseDiffFiles(diff);
const prompt = generateReviewPrompt(diff, files);
console.log("📝 レビュー対象ファイル:");
files.forEach((f) => console.log(` - ${f}`));
console.log("\n🤖 Antigravity エージェントに以下のプロンプトを渡してください:\n");
console.log(prompt);
// 期待される出力:
// 📝 レビュー対象ファイル:
// - src/components/UserProfile.tsx
// - src/lib/api.ts
//
// 🤖 Antigravity エージェントに以下のプロンプトを渡してください:
// (レビュープロンプトが表示される)このスクリプトを npx tsx scripts/ai-pr-review.ts 42 のように実行すると、PR の差分とレビュー用プロンプトが自動生成されます。
GitHub Actions で PR 作成時に自動レビューを実行する
手動でのレビューだけでなく、PR が作成されるたびに自動でレビューを実行する仕組みを構築しましょう。GitHub Actions を使えば、CI/CD パイプラインの一部としてコードレビューを組み込めます。
# .github/workflows/ai-review.yml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
permissions:
contents: read
pull-requests: write
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changed files
id: changed
run: |
FILES=$(gh pr diff ${{ github.event.pull_request.number }} --name-only)
echo "files<<EOF" >> $GITHUB_OUTPUT
echo "$FILES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run lint and type check
run: |
npm ci
npm run lint -- --format json > lint-results.json || true
npx tsc --noEmit 2> type-errors.txt || true
- name: Post review summary
if: always()
run: |
LINT_ERRORS=$(cat lint-results.json | jq '[.[] | .messages | length] | add // 0')
TYPE_ERRORS=$(wc -l < type-errors.txt | tr -d ' ')
BODY="## 🤖 AI Code Review Summary\n\n"
BODY+="| Check | Result |\n"
BODY+="| --- | --- |\n"
BODY+="| Lint Errors | ${LINT_ERRORS} |\n"
BODY+="| Type Errors | ${TYPE_ERRORS} |\n\n"
if [ "$LINT_ERRORS" -gt 0 ] || [ "$TYPE_ERRORS" -gt 0 ]; then
BODY+="⚠️ 自動チェックで問題が検出されました。詳細は各ステップのログを確認してください。"
else
BODY+="✅ 自動チェックをパスしました。"
fi
gh pr comment ${{ github.event.pull_request.number }} --body "$(echo -e "$BODY")"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}このワークフローでは、PR の作成・更新時に自動で lint チェックと型チェックを実行し、結果を PR コメントとしてポストします。
GitHub Actions を活用した CI/CD パイプラインの構築についてさらに詳しく知りたい方は、Antigravity × GitHub Actions 上級CI/CDパイプライン構築ガイド で、マトリクスビルドやセキュリティスキャンを含む本格的な構成を解説しています。
AGENTS.md でレビュー基準をカスタマイズする
Antigravity のエージェントに一貫したレビュー基準を守らせるには、AGENTS.md ファイルにレビューポリシーを明記するのが効果的です。
# AGENTS.md — PR レビューポリシー
## コードレビュー基準
### 必ず確認する項目(ブロッカー)
- 未処理の Promise / async-await エラー
- ユーザー入力のバリデーション不足
- ハードコードされた秘密情報(API キー等)
- 型アサーション(as any)の不適切な使用
### 推奨事項(改善提案)
- 関数が 50 行を超える場合は分割を提案する
- マジックナンバーは定数に切り出す
- コメントは「なぜ」を説明するものを推奨する
### レビュー対象外
- フォーマット(Prettier で自動整形済み)
- import 順序(ESLint ルールで強制済み)この設定をリポジトリのルートに配置しておくと、Antigravity のエージェントがレビュー時に自動的に参照し、プロジェクト固有の基準に沿ったコメントを生成してくれます。
レビュー結果を GitHub コメントに自動投稿する
レビュー結果を手動でコピーするのは手間がかかります。GitHub API を使って、レビューコメントを自動投稿する仕組みを作りましょう。
// scripts/post-review-comment.ts
// レビュー結果を GitHub PR にコメントとして投稿する
import { execSync } from "child_process";
interface ReviewResult {
summary: string;
issues: Array<{
file: string;
line: number;
message: string;
}>;
approved: boolean;
}
function postReviewComment(
prNumber: number,
review: ReviewResult
): void {
const body = formatReviewBody(review);
// gh コマンドで PR コメントを投稿
execSync(
`gh pr comment ${prNumber} --body '${body.replace(/'/g, "'\\''")}'`,
{ stdio: "inherit" }
);
console.log(`✅ PR #${prNumber} にレビューコメントを投稿しました`);
}
function formatReviewBody(review: ReviewResult): string {
let body = "## 🤖 Antigravity AI Review\n\n";
body += `**判定**: ${review.approved ? "✅ LGTM" : "⚠️ 要修正"}\n\n`;
body += `### サマリー\n${review.summary}\n\n`;
if (review.issues.length > 0) {
body += "### 検出された問題\n\n";
for (const issue of review.issues) {
body += `- **${issue.file}:${issue.line}** — ${issue.message}\n`;
}
}
return body;
}
// 使用例
const sampleReview: ReviewResult = {
summary:
"全体的にコード品質は良好です。エラーハンドリングの改善点が1件あります。",
issues: [
{
file: "src/lib/api.ts",
line: 45,
message:
"fetch のエラーハンドリングが不足しています。ネットワークエラー時の処理を追加してください。",
},
],
approved: false,
};
const prNumber = parseInt(process.argv[2] || "0");
if (prNumber) {
postReviewComment(prNumber, sampleReview);
}
// 期待される出力:
// ✅ PR #42 にレビューコメントを投稿しました実践的なワークフロー設計のポイント
AI による PR レビューを効果的に運用するために、いくつかの実践的なポイントをお伝えします。
レビューの段階を分ける
すべてを AI に任せるのではなく、段階的にレビューを行うのが効果的です。
- 第1段階(AI 自動): lint、型チェック、セキュリティスキャン
- 第2段階(AI 補助): コードの設計妥当性、パフォーマンス影響の分析
- 第3段階(人間): ビジネスロジックの正しさ、UX への影響確認
レビューコメントの質を高める
Antigravity のエージェントに具体的なコンテキストを渡すことで、より有益なレビューコメントが得られます。
PR #42 をレビューしてください。
このPRの目的は「ユーザー認証フローの刷新」です。
既存の session ベース認証から JWT ベースに移行しています。
特に認証トークンの取り扱いとセキュリティ面を重点的に確認してください。
背景情報を添えることで、エージェントは変更の意図を理解し、的確なフィードバックを返してくれます。
GitHub 連携の基礎について
Antigravity と GitHub の基本的な連携方法については Antigravity × GitHub 連携の基本設定ガイド で解説しています。また、日常の Git 操作を効率化するテクニックは Antigravity で Git ワークフローを効率化する方法 も参考になります。
まとめ
Antigravity × GitHub の PR レビュー自動化は、開発チームの生産性を大きく向上させる実践的なアプローチです。この記事で紹介した内容を振り返ります。
- Antigravity のエージェントで PR 差分を自動解析し、型安全性・セキュリティ・パフォーマンスの観点からレビューを行う
- GitHub Actions と連携して、PR 作成時に自動で品質チェックを実行する
AGENTS.mdでプロジェクト固有のレビュー基準を定義し、一貫した品質を保つ- AI と人間の役割を明確に分け、効率的なレビューワークフローを設計する
まずは小さなプロジェクトから試してみて、チームに合ったレビュー基準を育てていくのがおすすめです。セキュリティ面の自動監査にも興味がある方には、Antigravity × AI駆動セキュリティ監査自動化ガイド で、脆弱性検出から自動修正までのパイプラインを詳しく解説していますので、あわせてご覧ください。