🧠 ChatGPT自動コードレビュー機能について
✅ 概要
この機能は、GitHubのPull Request(PR)に対して、ChatGPTが自動でコードレビューコメントを投稿するものです。
レビュー観点は「変更内容の要約」「バグ・非効率・改善点の指摘」「問題なしの明示」です。

⚙️ 仕組み(技術構成)
- トリガー:PR作成時または更新時(差分あり)
- 実行環境:GitHub Actions(.github/workflows/chatgpt-review.yml)
- 処理内容:
- git diff origin/main…HEAD で変更差分を取得
- 差分をOpenAI APIへ送信し、レビュー内容を生成
- PRのコメント欄に結果を自動投稿
- 使用技術:
- openai>=1.0.0 に準拠(最新API)
- GitHub Actions(permissions: pull-requests: write)
- chatgpt_review.py スクリプトで差分取得〜投稿まで制御
🎯 主な用途とメリット
用途 | 説明 |
---|---|
✅ PRの初期チェック | 人手レビュー前に構文・ロジック・安全性の粗チェックが可能 |
✅ バグの早期発見 | ChatGPTが 0除算 や 未処理の例外 などを指摘してくれる |
✅ 要約生成で把握が楽になる | ChatGPTが差分の目的を要約 → 内容理解が高速化 |
✅ レビュー工数の削減 | ChatGPTがベースレビュー → 人は最終判断に集中可能 |
🔧 ChatGPT自動コードレビュー 実装手順(GitHub Actions)
🔑 事前準備(1回だけでOK)
① OpenAI APIキーを取得
- OpenAIの APIページ でAPIキーを発行
- セキュリティのため、個人キーではなくチームで管理されたキーを使用推奨
② GitHub Secretsに登録
リポジトリの設定 → 「Secrets and variables」→「Actions」→「New repository secret」
名前 | 値(Value)例 |
---|---|
OPENAI_API_KEY | sk-xxxxxxxxxxxxxxxxxxxxxxxx |
GITHUB_TOKEN | デフォルトで自動付与されてるので設定不要 |
🧾 実装ステップ
③ chatgpt_review.py をプロジェクトルートに追加
# chatgpt_review.py
import os
import subprocess
import requests
from openai import OpenAI
# OpenAI クライアントの初期化
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# GitHub環境変数
github_token = os.environ["GITHUB_TOKEN"]
repo = os.environ["REPO_NAME"]
pr_number = os.environ["PR_NUMBER"]
# 差分取得
result = subprocess.run(
["git", "diff", "origin/main...HEAD"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
diff = result.stdout.strip()
# 長すぎるdiff対策
if len(diff) > 8000:
diff = diff[:8000] + "\n\n...(差分が長いため一部省略)"
# プロンプト生成
if not diff:
review_comment = "✅ 差分がありませんでした。レビュー対象の変更が見つかりません。"
else:
prompt = (
"以下はGitHubのPull Requestのコード差分です。\n"
"- 要約を作成してください。\n"
"- 問題点、非効率なコード、不具合の可能性があれば指摘してください。\n"
"- 問題がなければ『問題なし』と明記してください。\n\n"
"```diff\n"
f"{diff}\n"
"```"
)
try:
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.2,
)
review_comment = response.choices[0].message.content.strip()
if not review_comment:
review_comment = "✅ 問題なし(ChatGPTからの応答が空でした)"
except Exception as e:
review_comment = f"❌ ChatGPT APIエラー: {str(e)}"
# コメント投稿
url = f"https://api.github.com/repos/{repo}/issues/{pr_number}/comments"
headers = {
"Authorization": f"token {github_token}",
"Accept": "application/vnd.github.v3+json"
}
data = {"body": review_comment}
res = requests.post(url, json=data, headers=headers)
print("=== 投稿結果 ===")
print(res.status_code)
print(res.text)
④ GitHub Actionsのワークフローファイル追加
.github/workflows/chatgpt-review.yml に以下を追加:
name: ChatGPT Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
# ✅ PRにコメント投稿するにはこれが必須!
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0 # ✅ 差分取得に必要
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y diffutils
pip install --upgrade pip
pip install openai requests
- name: Run ChatGPT Review
run: python3 chatgpt_review.py
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO_NAME: ${{ github.repository }}
🧪 テスト方法
- main ブランチを作成・更新
- 新しいブランチを切ってファイル変更(例:test.py編集)
- PRを作成
- 数秒後、自動でPRコメントにChatGPTのレビュー結果が投稿される
🔁 よくあるエラー対策
エラー内容 | 対処法 |
---|---|
openai.ChatCompletion は使えない | openai>=1.0.0 では client.chat.completions.create() を使う |
投稿が403で失敗する | permissions: pull-requests: write を明記する |
差分が取得されない | fetch-depth: 0 を必ず checkout に追加 |
📌 備考
- 対応しているのは 差分レビューのみ
- ChatGPTが使うモデルは “gpt-4″(必要に応じて “gpt-4o” などに変更可能)
- chatgpt_review.py をカスタマイズすることで、独自チェック項目も導入可能
✅ シークレット設定(GitHubで1回だけ)
名前 内容
OPENAI_API_KEY sk-xxx... を登録(必須)
GITHUB_TOKEN GitHubが自動で発行するので不要
🔒 登録場所 → GitHubのリポジトリ「Settings」→「Secrets and variables」→「Actions」
📁 プロジェクトルート/
├── chatgpt_review.py 👈 Pythonスクリプト(最新版API使用)
└── .github/
└── workflows/
└── chatgpt-review.yml 👈 このYAMLファイル