😎

Github Copilotに「日本語+独自コーディング規約」でレビューしてもらう

に公開

2025年4月に一般公開されたGitHub Copilotの「プルリクエストのコードレビュー」機能、もう試しましたか?弊社ではAIコードレビューツールにCodeRabbitを利用していますが、Copilotに移行できるかを検証中です。

Copilotに 「日本語+プロジェクト独自のコーディング規約」でレビューをしてもらうために行った手順を記事にしました。

こんな人向けの記事です

  • Copilotの有料プラン利用者
    (Copilot Freeプランではプルリクエストのレビュー機能が利用できません)
  • Copilotに、日本語+独自コーディング規約でプルリクエストのレビューをしてもらいたい人

対象機能と対象プラン

Copilotのコードレビュー機能には、Visual Studio Code上でレビューしてくれる機能と、GitHubサイト上でプルリクエストに対してレビューしてくれる機能の2つがあります。
この記事で書いたのは、GitHubサイト上のプルリクエストに対してレビューをしてもらう機能の方です。

また、GitHub上でのコードレビュー機能を使えるのは、Copilotの有料プラン利用者です。Copilot Freeプランでは、Visual Studio Code上でレビューしてくれる機能のみ利用可能で、GitHubサイト上でのレビュー機能は使えません。

Copilotにレビュールールを指示する方法

Copilotにプルリクエストのレビューをお願いするには、プルリクエストのReviewersにCopilotを指定するだけです。

ですが、デフォルトではコメントは英語で生成されてしまうのと、レビュー観点は一般的なものになっています。

やりたいこと

  • 日本語でレビューしてほしい
  • プロジェクト固有のコーディング規約に沿ってレビューしてほしい

そこで、レビュールールを指示する方法を調べました。

レビュールールを指示する方法の現状(2025年4月時点)

公式ドキュメント[1]を見ると、現時点(2025年4月)では、コーディングガイドラインを設定する機能はGitHub Copilot Enterpriseプランでしか提供されていないようです。Businessプランなど他の有料プランではこの機能は使えません。

現時点では、プルリクエストの本文に指示を書く方法が有効でした。こちらに書いたテキストは常にCopilotが読んでくれるので、そこに指示を書けば多少なりとも振る舞いを変えられる、ということのようです。
こちらの方法で検証・運用されている方の記事[2]やポスト[3]を参考にさせていただきました🙇‍♀️

やってみた

私が携わっているプロジェクトには、エラーログ出力のルールがあります。今回は、わざとその方針に沿わない変更をして、Copilotが指摘してくれるか実験してみました。

実験手順

  1. 方針に反するログ出力を含むブランチをpushし、Draftプルリクエストを作成
  2. プルリクエストの本文に、レビュールールの指示を書く(指示の全文は次のセクションにあります)
  3. レビュー担当者にCopilotを選択して、レビューしてもらう
  4. 修正を加えて再度pushした場合は自動で再レビューは走らないので、Copilotアイコン横の更新ボタンを押して再レビューしてもらう
  5. 結果...日本語で、エラーログ出力ルールに反した箇所に指摘コメントをしてくれました🎉
  6. 最後に、今後のプルリクエストにも適用するため、今回のプルリクエスト本文の内容をPULL_REQUEST_TEMPLATE.mdに追記して、push & マージ

PULL_REQUEST_TEMPLATE.mdの内容

レビュー指示に成功したPULL_REQUEST_TEMPLATE.mdの内容は以下です。
日本語でレビューしてほしいことと、copilotへの指示であることをコメントアウトで書き、指示部分全体を囲んでいます。最初の数行が最重視されるため、指示はテンプレートの冒頭に書いてください。

また、今回は以下のようにしてみました。ご参考まで。

  • 「1. レビュー対象と範囲」は一般的なコーディングルールの指示、「2. エラーログ出力ルール」はプロジェクト独自のエラーログ出力方針の指示です。
  • 初めの<!-- I want to review in Japanese. -->だけでも日本語でレビューしてくれますが、生成される概要(Overview)や変更内容(Reviewed Changes)も必ず日本語で書いてもらいため、ダメ押しで「お願い」として書いてみました。
  • 指示は英語でした方がCopilotに伝わりやすい説はありますが、今回は人間のわかりやすさのため日本語で指示しました。問題なくレビューしてくれています。
  • 人間も画面上で見やすいように、detailsとsummaryで折りたたみ表示にしました。
<!-- I want to review in Japanese. -->
<!-- for GitHub Copilot review rule -->

<details>
<summary>for GitHub Copilot review rule</summary>

### お願い

- Pull Request Overview、Reviewed Changes、コメントは全て必ず日本語で書いてください

### 1. レビュー対象と範囲

- 次の観点でコード品質の改善提案を行ってください
  - ロジックの正確性
  - セキュリティ上の問題
  - パフォーマンスの最適化
  - データ競合の可能性
  - 一貫性の維持
  - エラーハンドリング
  - 保守性の向上
  - モジュール性の確保
  - コードの複雑性軽減
  - 最適化の可能性
  - ベストプラクティス(DRY, SOLID, KISS)の適用
- 重大な問題(例:テスト失敗、脆弱性、O(n²) 以上のボトルネック)に絞ってレビューしてください
- 以下についてはコメントしないでください
  - 軽微なコードスタイルの問題
  - コメント/ドキュメントの不足
  - `db/**`, `**/*.lock`
  - 自動生成されたコード(l10n, freezedなど)

### 2. エラーログ出力ルール

#### Repository 層

- ログレベルは `warn` 固定
- 読み書き時は検索条件を出力
- 例:
    ```go
    zap.L().Warn("failed to get project",
        zap.String("project_id", projectID.String()),
        zap.Error(err),
    )
    ```

#### Usecase 層

- ログレベルは `warn` 固定
- Repository 層のエラーを wrap し、期待処理を示すメッセージを付与
- 例:
    ```go
    zap.L().Warn("failed to get projects", zap.Error(err))
    ```

#### Handler 層

- ステータス別ログレベル
  - 401 / 403 → warn
  - 400 / 404 / 500 → error
- Usecase層から受け取ったエラーを wrap し、`zap.S().Warn(err)` または `zap.S().Error(err)` を使用

</details>
<!-- for GitHub Copilot review rule -->
<!-- I want to review in Japanese. -->

以下に、プルリクエスト本文用のテンプレートが続く

注意:プレミアムリクエストについて

GitHub Copilotに2025年5月からプレミアムリクエストという概念が加わり、コードレビュー機能も対象になります。
レビューコメント単位でリクエストが消費されますが、指示によってはコメントが大量に生成されてしまう可能性があるため注意が必要そうです。詳細は公式ドキュメント[4]をご確認ください。

脚注
  1. GitHub Copilot コード レビューの使用 ↩︎

  2. 【日本語対応】GitHub Copilot コードレビュー機能のTips ↩︎

  3. PRのテンプレートに以下を追加するとGitHub Copilotが日本語でレビューしてくれて、愛嬌も出るコポ! ↩︎

  4. Premium リクエストについて ↩︎

dotD Tech Blog

Discussion