7-6. 【実務・CI/CD】Micro-SaaS型 コード自動レビュー&品質チェッカー

第6章(プロフェッショナルエンジニアリング、テスト自動化、CI/CD・チーム開発)で学んだ知識の集大成として、チーム開発の品質を爆発的に高める「Micro-SaaS型 コード自動レビュー&品質チェッカー」を構築します。

プルリクエスト(PR)が作成された際、GitHub Actionsが自動でコードの静的解析(flake8)と単体テスト(pytest)を実行し、さらにLLM(生成AI)APIを用いてコードの改善点を自動でレビューしてPRにコメント投稿する仕組みです。

1. システムの設計と要件

本自動化パイプラインが満たす実務クオリティの要件は以下の通りです。

  1. 静的解析 & 単体テストの自動実行: コミットやPR作成のたびに品質基準を自動チェック。
  2. AI自動コードレビュー: コードの臭い(Smell)やセキュリティ上の脆弱性をLLMが検出してコメント。
  3. CI/CDパイプライン(GitHub Actions): 外部サーバーを自前で用意せず、GitHub上で完結する堅牢なワークフロー構築。

2. 自動レビュー用スクリプトの実装(ai_code_reviewer.py)

GitHub Actionsのワークフローから呼び出され、変更されたPythonファイルを解析してLLMにレビューを依頼するスクリプトをプロジェクトのルートに配置します。

Python

import os
import sys
import google.generativeai as genai

def review_code(file_path: str):
    """指定されたPythonファイルのコードをLLMにレビューさせる"""
    if not os.path.exists(file_path):
        print(f"❌ ファイルが見つかりません: {file_path}")
        return

    with open(file_path, "r", encoding="utf-8") as f:
        code_content = f.read()

    api_key = os.environ.get("GEMINI_API_KEY")
    if not api_key:
        print("⚠️ GEMINI_API_KEY が設定されていないため、AIレビューをスキップします。")
        return

    genai.configure(api_key=api_key)
    model = genai.GenerativeModel("gemini-1.5-flash")

    prompt = f"""
あなたはシニアPythonソフトウェアエンジニアです。以下のコードをレビューし、
1. バグやセキュリティの脆弱性
2. 可読性や保守性の改善提案(SOLID原則の観点など)
3. 具体的なリファクタリング後のコード例
をマークダウン形式で簡潔に出力してください。

【対象コード: {file_path}】
```python
{code_content}

“””

try:
    response = model.generate_content(prompt)
    print(f"\n=== 🤖 AI Code Review Result for [{file_path}] ===")
    print(response.text)
    print("="*50)
except Exception as e:
    print(f"❌ AIレビューの生成中にエラーが発生しました: {e}")

if name == “main“: # コマンドライン引数で渡されたファイルをレビュー target_file = sys.argv[1] if len(sys.argv) > 1 else “main.py” review_code(target_file)


---

## 3. GitHub Actions ワークフローの設定(`.github/workflows/ci_review.yml`)

GitHub上でCI/CDパイプラインを動かすための設定ファイルを作成します。プロジェクト内に `.github/workflows/` ディレクトリを作成し、その中に `ci_review.yml` を配置します。

```yaml
name: CI & AI Code Review Pipeline

on:
  pull_request:
    branches: [ main, master ]
  push:
    branches: [ main, master ]

jobs:
  quality-check-and-review:
    runs-on: ubuntu-latest

    steps:
      - name: 1. リポジトリのチェックアウト
        uses: actions/checkout@v4

      - name: 2. Python環境のセットアップ
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
          cache: 'pip'

      - name: 3. 依存ライブラリのインストール
        run: |
          python -m pip install --upgrade pip
          pip install pytest flake8 google-generativeai requests

      - name: 4. 静的解析 (flake8) の実行
        run: |
          # 構文エラーやスタイル違反をチェック(最大行数などのルール設定も可能)
          flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics

      - name: 5. 単体テスト (pytest) の実行
        run: |
          pytest -v

      - name: 6. 生成AI (Gemini) による自動コードレビューの実行
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: |
          # 変更された主要なファイルを対象にAIレビューを実行
          python ai_code_reviewer.py main.py

4. GitHub シークレットの設定手順

AIレビュー機能をGitHub Actions上で安全に動作させるため、APIキーを暗号化して保存します。

  1. ご自身のGitHubリポジトリの [Settings](設定)タブを開きます。
  2. 左メニューの [Secrets and variables] > [Actions] を選択します。
  3. [New repository secret] をクリックし、以下のように登録します。
    • Name: GEMINI_API_KEY
    • Secret: ご自身のGoogle AI Studio等で取得したGemini APIキーの文字列
  4. [Add secret] をクリックして保存します。

これで、次回以降プルリクエストを作成した際に、自動でテストとAIによるコードレビューがバックグラウンドで走り、結果がアクションログに記録されるようになります!

まとめ

本記事では、第6章で習得したプロフェッショナルな品質管理(flake8、pytest)と、GitHub Actionsを組み合わせたCI/CDパイプラインの構築、さらにLLMを活用した自動コードレビュー基盤の構築を学びました。

コメント

タイトルとURLをコピーしました