🧠 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ファイル



