GitHub Copilotを活用した開発効率化(プロンプトファイルの利用及びGitLabのMR作成、レビュー実施)

こんにちは。デジタルソリューション開発部の長谷川です。
JDEPでは、GitHub Copilot(以下Copilot)を利用した開発効率化を実施しています。 今回は、以下3点についてご紹介します。

  • エージェントモードを活用したMergeRequest(以下MR)自動生成による省力化
  • エージェントモードを活用したレビューコメント自動付与による省力化
  • プロンプトファイルを利用した定型作業の再利用性の向上
    ※プロンプトファイルは執筆時点の2025/6/10でパブリックプレビュー

前提

  • GitLabでコード管理している環境で、手元のクライアントPCからMRを作成し、Copilotによるレビュー及びMRへのコメント付与を行うケースを考えます
  • GitLabの操作はGitLab CLIツールのglabコマンドを利用します
  • MRの作成ではテンプレートファイルを利用します
  • copilot-instructionsを導入してプロジェクト最適なCopilotの設定を実施しています(本記事では設定内容は割愛)

エージェントモードを活用したMR自動生成による省力化

レビュアが効率的かつ質の高いレビューを実施できるように、レビュイはMRに変更概要や特に注意してレビューして欲しい点などを記載します。
Copilotが適切にMRを生成できるように、以下のようなガイドラインを作成しました。

パス及びファイル名: doc/guideline/create-mr-guideline.md

# MR作成ガイドライン

1. diffコマンドでブランチの差分の内容を分析してください。 = {diff_target}
2. MRのタイトルは `{現在のブランチ名}: {概要}` の形式で作成してください。 = {mr_title}
    - 例: `JDEP-1234: ユーザ登録機能の実装`
3. MRのDescriptionについて
    - .gitlab/merge_request_templates/Default.md の内容を記載してください。 = {mr_description}
    - 「対応概要」欄に{diff_target}の概要を記載してください。
    - レビュアに特に注意して確認してほしい内容を{diff_target}を元に考え、「その他特記事項」に記載してください。
4. MR作成コマンド実行
    - `glab mr create --source-branch {現在のブランチ名} --target-branch {target_branch} --title "{mr_title}" --description "{mr_description}"  --squash-before-merge --remove-source-branch` コマンドでMRを作成してください。
        - 例:

glab mr create --source-branch JDEP-823 --target-branch sprint13 --title "JDEP-823: GitLab Pagesの自動化(WEBアプリ生成もCIで実行)" --description "## Jiraチケット/GitLab Issue
- JDEP-823: GitLab Pagesの自動化(WEBアプリ生成もCIで実行)

## 対応概要

- pages用のWEBアプリの一部生成ツール(シーケンスファイルの追加・削除、ファイル名変更の反映を自動化する目的)を実装
- CIのpagesジョブ改修
  - ツールの実行・コミットを実行する処理を追加
  - 発火条件を修正
    - Sprintブランチへのマージはマニュアル
    - developブランチへのマージは自動

## レビュイからレビュアへ確認依頼

- [ ] 生成物(pages)に問題がないか
- [ ] 本対応実施者以外でもPagesを扱えるか、扱うためのreadmeが足りているか

## その他特記事項

- 特になし

## レビュイ確認事項

- [ ] マージ先(develop,develop-2nd)が適切であること
- [ ] 作成・修正対象内でlinterの警告が表示されていないこと
- [ ] コーディング規則に準拠していること
- [ ] 対象となるDoneの定義を満たしていること
- [ ] PBIの受け入れ条件を確認し、不足がないこと

## レビュア確認事項

- [ ] マージ先(develop,develop-2nd)が適切であること
- [ ] 作成・修正対象内でlinterの警告が表示されていないこと
- [ ] コーディング規則に準拠していること
- [ ] 対象となるDoneの定義を満たしていること
- [ ] PBIの受け入れ条件を確認し、不足がないこと" --squash-before-merge --remove-source-branch

5. MRを作成したら、作成したMRの番号を出力してください。

エージェントモードを活用したレビューコメント自動付与による省力化

タイポやコーディング規約違反、UTの実装不足など、単純な不備不足は生成AIにレビューを実施してもらってから人間がレビューを実施することで、品質向上や開発効率化が期待できます。
Copilotが適切にレビューを実施できるように、以下のようなガイドラインを作成しました。

パス及びファイル名: doc/guideline/review-guideline.md

# マージリクエストレビューの依頼

## レビュー観点

以下の観点からレビューをお願いします:

1. **機能性**: 意図した機能を正しく実装できているか
2. **コード品質**:
   - 命名規則(特にGoの慣習に沿っているか)
   - SOLID原則などのベストプラクティス
3. **Go特有の実践**:
   - ゼロ値の活用
   - インターフェースの適切な設計
4. **パフォーマンス**:
   - 不必要なメモリ割り当てはないか
   - N+1問題など効率的なデータアクセスになっているか
5. **セキュリティ**:
   - 入力バリデーション
   - SQLインジェクションなどの脆弱性対策
6. **テスト**:
   - テストカバレッジは85%以上か
   - エッジケースはカバーされているか
   - テストの可読性と保守性
7. **可読性・保守性**:
   - コードは明確で理解しやすいか
   - コメントは適切か
8. **関数の引数の妥当性**:
   - 無駄な引数がないか(例:レシーバオブジェクトから取得できる値が関数の引数に含まれていないか)
   - 引数の数や型は適切か
9. **エラーハンドリング**:
   - 例外処理は適切か
   - エラーログは有用か
10. **実装レイヤ**:
    - 適切なレイヤでの実装が行われているか
    - DIが適切なレイヤで行われているか
    - 依存関係の方向性は適切か
    - サイクリック依存はないか

## DIに関する特別なチェック

- インターフェースと実装の分離は適切か
- モックのしやすさは考慮されているか
- DIコンテナの構成は明確で保守しやすいか

## 出力フォーマット

以下の形式でレビュー結果を提供してください:

1. **概要評価**: 変更全体の質と主要な所見(5段階評価と理由)
2. **改善推奨事項**: 優先度順(重要/中程度/軽微)に具体的な改善提案(コードサンプル含む)
3. **質問**: 明確にすべき点や懸念事項
4. **ポジティブなフィードバック**: 良い実装や改善点
5. **DIに関するフィードバック**: 依存性注入に関する特別なフィードバック

## 特記事項

- **無視してほしい変更**: `*yo.go`(自動生成コード)
- **特に詳しく見てほしい部分や懸念点**: [もしあれば記載]
- **プロジェクト特有の制約**: [もしあれば記載]

プロンプトファイルを利用した定型作業の再利用性の向上

先に紹介した MR自動生成 及び レビューコメント自動付与 は、プロンプトファイルを利用して再利用性を高めることができます。

MR自動生成のプロンプトファイル

パス及びファイル名: .github/prompts/create-mr.prompt.md

---
mode: 'agent'
---

現在の作業ブランチから指定のブランチへのMRを作成することが目的です。

下記に従ってMR作成を行ってください。

1. {target_branch} は対話式で指定させてください。
2. {target_diff} を確認するために、 `git --no-pager diff origin/{target_branch}..HEAD` を実行してください。
3. {target_diff} を確認したら、 #file:../../doc/guideline/create-mr-guideline.md に従ってMRを作成してください。

レビューコメント自動付与のプロンプトファイル

パス及びファイル名: .github/prompts/review-mr.prompt.md

---
mode: 'agent'
---

現在の作業ブランチから指定のブランチへのMRについて、差分レビューを実施しMRにコメントを付与することが目的です。

下記に従ってMRのレビュー及びMRへのコメント付与を行ってください。

1. {target_branch} は対話式で指定させてください。
2. {mr_number} を確認するために、 `glab mr list --source-branch $(git branch --show-current) --target-branch {target_branch}` を実行してください。
3. {target_diff} を確認するために、 `glab mr diff {mr_number}` を実行してください。
4. {target_diff} を確認したら、 #file:../../doc/guideline/review-guideline.md に従って {target_diff} に対してレビューを行ってください。
5. レビューが完了したら、 `glab mr note {mr_number} -m "{review_comment}"` を実行してMRにレビュー内容をコメントしてください。

実行方法

MacOSでの実行方法を例に説明します。

  1. cmd + shift + p でコマンドパレットを開く
  2. 「Chat: Run Prompt...」を選択
  3. 任意のプロンプトを選択

prompt選択

以下はcreate-mrを選択し、create-mr.prompt.mdのプロンプトが実行され、エージェントモードでMR生成を実施しているCopilotチャットの画面です。

MR生成時のcopilotチャット画面

実行結果

実際にCopilotによって生成されたMR及びレビューコメントは以下のようになります。

MR
レビューコメント

特にレビューコメントは、copilot-instructionsの設定や各種ドキュメントの内容によって変化するため、読者の皆さんの実行環境では出力内容が異なるかもしれませんが、参考にしていただければと思います。

おわりに

生成AIの利活用は日進月歩であり、本記事の内容はすぐに古くなる可能性がありますが、この記事が少しでも皆さんの興味を引くものになれば幸いです。

最後になりますが、JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページをご覧下さい。
www.saiyo.jcb.co.jp


本文および図表中では、「™」、「®」を明記しておりません。 記載されているロゴ、製品名は各社及び商標権者の登録商標あるいは商標です。

©JCB Co., Ltd. 20︎21