コンテンツにスキップ

コードレビューとPR支援の自動化

7.1 Copilot Code Reviewの概要と活用方法

Section titled “7.1 Copilot Code Reviewの概要と活用方法”

Copilot Code Reviewは、プルリクエスト(PR)に対してAIがレビューコメントを自動生成する機能である。
セキュリティ上の懸念、バグの可能性、パフォーマンスの問題、コーディング規約への違反などを指摘し、改善提案を提供する。

人間のレビュアーを置き換えるものではなく、レビューの初期段階でAIが明らかな問題を検出し、人間のレビュアーがより本質的な設計判断やビジネスロジックの妥当性に集中できるようにすることを目的としている。

Copilot Code Reviewは以下の方法でPRに対して実行できる。

手動リクエスト: PRページのレビュアー欄で「Copilot」を選択してレビューを依頼する。

自動レビュー: リポジトリまたはOrganizationの設定でCopilot Code Reviewの自動実行を有効にすると、PRが作成されるたびに自動的にレビューが実行される。

flowchart LR
    A["`PR作成`"] --> B{"`自動レビュー
    設定済み?`"}
    B -->|Yes| C["`Copilotが自動レビュー
    コメントを投稿`"]
    B -->|No| D["`レビュアーに
    Copilotを手動追加`"]
    D --> C
    C --> E["`人間レビュアーが
    Copilotコメントと
    コード本体を確認`"]
    E --> F{"`承認?`"}
    F -->|修正要| G["`開発者が修正
    Copilotが再レビュー`"]
    G --> E
    F -->|承認| H["`マージ`"]

Copilot Code Reviewは、PRの差分に対して以下の種類のコメントを生成する。

セキュリティ: SQLインジェクション、XSS、認証バイパスなどの脆弱性パターンの検出。

バグの可能性: null参照、off-by-oneエラー、未処理の例外パスなどの論理的な誤り。

パフォーマンス: N+1クエリ、不要な再レンダリング、メモリリークの可能性など。

コーディング規約: 命名規則の違反、未使用のインポート、不適切なエラーハンドリングパターンなど。

改善提案: より読みやすい書き方、モダンなAPI・構文の利用提案など。

7.2 プルリクエストサマリーの自動生成

Section titled “7.2 プルリクエストサマリーの自動生成”

Copilotは、PRの変更内容を分析して自動的にサマリー(要約)を生成する機能を持つ。
PRのdescriptionフィールドに変更の概要、影響を受けるファイル、レビュアーが注目すべきポイントを自動記入する。

PRサマリーには通常、以下の要素が含まれる。

  • 変更の概要: 何が変更されたかの1〜2文の要約
  • 影響範囲: 変更が影響するファイルやモジュールの一覧
  • レビューの焦点: レビュアーが特に注意すべき箇所の指摘
  • テストへの影響: テストの追加・変更が必要かどうかの示唆

PRサマリーの自動生成は、特に以下の場面で効果的である。

大規模なPR: 多数のファイルが変更された場合、サマリーによって変更の全体像を素早く把握できる。

オンボーディング: プロジェクトに不慣れなレビュアーに対して、変更のコンテキストを提供する。

履歴の追跡: マージ後にPRの意図を振り返る際の参照情報として機能する。

7.3 レビューに対するカスタム指示の設定

Section titled “7.3 レビューに対するカスタム指示の設定”

カスタム指示によるレビューのカスタマイズ

Section titled “カスタム指示によるレビューのカスタマイズ”

Copilot Code Reviewは、カスタム指示ファイルを使ってレビューの基準をプロジェクトごとに設定できる。
チーム固有のコーディング規約やアーキテクチャルールを定義しておくことで、プロジェクトに即した的確なレビューコメントが得られる。

Copilot Code Reviewは2種類の指示ファイルを参照する。

リポジトリ全体の指示copilot-instructions.md): すべてのファイルに適用されるレビュールール。

パス固有の指示*.instructions.md): 特定のファイルやディレクトリにのみ適用されるレビュールール。
言語やレイヤーごとに異なるルールを設定できる。

効果的なレビュー指示の書き方

Section titled “効果的なレビュー指示の書き方”

簡潔に書く: 指示が多すぎるとCopilotが重要なルールを見落とす可能性がある。
最も重要なルールに絞る。

具体例を示す: 「良いコード」と「悪いコード」の具体例を含めると、Copilotの判断精度が向上する。

パス固有の指示を活用する: 言語固有のルール(例: Pythonのdocstring形式)はパス固有の指示ファイルに分離し、リポジトリ全体の指示との競合を避ける。

---
applyTo: "src/**/*.ts"
---
# TypeScriptレビュー指示
- `any` 型の使用は原則禁止。やむを得ない場合はコメントで理由を明記すること
- 非同期関数は必ずエラーハンドリングを含めること(try-catch または Result型)
- 外部APIのレスポンスには必ずZodスキーマでバリデーションを行うこと
## 悪い例
```typescript
const data: any = await fetchUser(id);
```
const result = userSchema.safeParse(await fetchUser(id));
if (!result.success) {
return err(new ValidationError(result.error));
}
:::tip
レビュー指示はイテレーティブに改善するのが効果的である。最初は少数のルールから始め、実際のPRに対するレビュー結果を確認しながら、指示の追加・修正を繰り返す。AIの応答には一定のばらつきがあるため、すべてのルールが100%適用されることは期待しない。
:::
## 7.4 CI/CDパイプラインとの統合
### Copilot Code ReviewとCIの連携
Copilot Code Reviewは、CIパイプラインの一部として組み込むことで、コードの品質ゲートとして機能させることができる。PRが作成されるとCopilotが自動レビューを実行し、重大な問題が検出された場合はCIを失敗させる、といったワークフローが構築可能である。
```mermaid
flowchart TD
A["`PR作成`"] --> B["`CI パイプライン起動`"]
B --> C["`ビルド`"]
B --> D["`テスト実行`"]
B --> E["`Copilot Code Review`"]
B --> F["`lint / 静的解析`"]
C --> G{"`すべて成功?`"}
D --> G
E --> G
F --> G
G -->|Yes| H["`レビュー可能`"]
G -->|No| I["`開発者に通知
修正を要求`"]

コーディングエージェントとの連携

Section titled “コーディングエージェントとの連携”

コーディングエージェントが作成したPRに対しても、Copilot Code Reviewは自動的にレビューを実行する。
エージェントが生成したコードに対してAIレビューが行われ、問題が検出された場合はエージェントが自動修正を試みる。
このフローにより、エージェントが生成するコードの品質が担保される。

GitHub Advanced Securityとの組み合わせ

Section titled “GitHub Advanced Securityとの組み合わせ”

Copilot Code Reviewは、CodeQL(コードスキャン)やDependabot(依存関係の脆弱性検出)といったGitHub Advanced Securityの機能と組み合わせて利用できる。
Copilotが論理的な問題やコーディング規約の違反を検出し、CodeQLがセキュリティ脆弱性を検出するという役割分担で、PRの品質を多層的にチェックする。