ToC
PR-Agentとは
マージリクエストの作成やレビューは開発フローの重要な部分ですが、しばしば時間のかかる作業でもあります。 PR-Agent(現在は、Qodo Mergeが正式名称となっているようです)は、AIを活用してマージリクエストの作成から、レビュー、改善提案まで自動化するツールです。 GitHubやGitLabと連携し、開発チームの生産性を大幅に向上させることができます。
主な機能と対応プラットフォーム
PR-Agentは、以下のような機能を提供しています。
プラットフォームもGitLabをはじめ、GitHubやAzure DevOpsなどにも対応しているようです。
- 自動PR説明生成: マージリクエストの変更内容を解析し、詳細で読みやすい説明を自動生成
- コードレビュー: AIによる自動コードレビューと改善提案
- 問題点の検出: セキュリティやパフォーマンスの問題を早期発見
- 質問応答: PRに関する質問に対する自動回答
- 改善提案: コード品質向上のための具体的な提案
導入手順
GitLabを使った導入
GitHubを使った開発のパターンも多くあるかと思いますが、今回はローカルの閉じた環境で機能を確認してみました。
Dockerにて、GitLabを構築してさらにpr-agentを連携して動作させる環境にて試してみます。
以下のdocker-compose.yamlを使用してGitLabとPR-Agentを同時に起動します。
PR-Agentは /webhook エンドポイントでGitLabからのWebhookを受信します。
なお、各設定のプロセスで取得した値をとdocker-compose.yamlファイルに反映する必要がある箇所では、都度、コンテナの再起動が必要です。
docker-compose.yamlのファイル
services:
gitlab:
image: gitlab/gitlab-ce:18.1.0-ce.0
container_name: gitlab-18-1
restart: always
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
gitlab_rails['registry_enabled'] = true
registry_external_url 'http://localhost:5005'
registry['enable'] = true
registry['registry_http_addr'] = "0.0.0.0:5000"
registry['storage_delete_enabled'] = true
registry['log_level'] = 'debug'
gitlab_rails['allowed_hosts'] = ['localhost', 'gitlab', '127.0.0.1']
nginx['listen_port'] = 8929
nginx['listen_addresses'] = ['*']
GITLAB__KEEP_BASE_URL: 'true'
ports:
- '8929:8929'
- '5005:5000'
- '443:443'
- '2424:22'
volumes:
- '../data/config:/etc/gitlab'
- '../data/logs:/var/log/gitlab'
- '../data/data:/var/opt/gitlab'
networks:
- mynet
shm_size: '256m'
pr-agent:
build:
context: ./pr-agent
dockerfile: ./docker/Dockerfile
target: gitlab_webhook
env_file:
- .secrets.env #AWSのBedrockのシークレットは別ファイルにしています
environment:
# GitLab configuration
CONFIG__GIT_PROVIDER: gitlab
GITLAB__URL: 'http://gitlab:8929'
GITLAB__PERSONAL_ACCESS_TOKEN: 'gitlab-access-token-is-here'
GITLAB__KEEP_BASE_URL: 'true'
# PR Agent behavior settings
CONFIG__PUBLISH_OUTPUT_TO_COMMENTS: 'true'
CONFIG__PUBLISH_OUTPUT: 'true'
PR_DESCRIPTION__PUBLISH_DESCRIPTION: 'false'
PR_DESCRIPTION__ENABLE_AUTO_DESCRIPTION: 'false'
PR_DESCRIPTION__PUBLISH_DESCRIPTION_AS_COMMENT: 'true'
PR_DESCRIPTION__PUBLISH_DESCRIPTION_AS_COMMENT_PERSISTENT: 'true'
# Webhook configuration
GITLAB__SHARED_SECRET: 'shared-secret-is-here'
# Server configuration
PORT: '3000'
HOST: '0.0.0.0'
# Logging
LOG_LEVEL: 'DEBUG'
# Locale setting for English
LANG: 'en_US.UTF-8'
LC_ALL: 'en_US.UTF-8'
# AI Model
CONFIG__MODEL: 'bedrock/amazon.nova-pro-v1:0'
CONFIG__MODEL_TURBO: 'bedrock/amazon.nova-pro-v1:0'
CONFIG__FALLBACK_MODELS: '["bedrock/anthropic.claude-3-haiku-20240307-v1:0"]'
# English output configuration
CONFIG__LANGUAGE: 'english'
# Enable essential PR commands
CONFIG__ENABLE_PR_REVIEWER: 'true'
CONFIG__ENABLE_PR_DESCRIPTION: 'true'
CONFIG__ENABLE_PR_IMPROVE: 'true'
CONFIG__ENABLE_PR_ASK: 'true'
CONFIG__ENABLE_PR_CODE_SUGGESTIONS: 'true'
CONFIG__ENABLE_PR_UPDATE_CHANGELOG: 'true'
# Optional: Configuration file path
CONFIG_FILE: '/app/config/.pr_agent.toml'
restart: always
ports:
- '3002:3000'
volumes:
- '../data/pr-agent:/app/data'
- './.pr_agent_en.toml:/app/.pr_agent.toml'
- './.pr_agent_en.toml:/app/config/.pr_agent.toml'
networks:
- mynet
depends_on:
- gitlab
networks:
mynet:
driver: bridge
.pr_agent_en.tomlのファイル
[config]
model = "anthropic.claude-3-haiku-20240307-v1:0"
language = "english"
# Essential commands only
enable_pr_reviewer = true
enable_pr_description = true
enable_pr_improve = true
enable_pr_ask = true
enable_pr_code_suggestions = true
enable_pr_update_changelog = true
[pr_reviewer]
num_code_suggestions = 6
[pr_description]
publish_description_as_comment = true
環境変数の設定
PR-Agentを動作させるために、今回はAWSのBedrockにてAmazon Nova Proを利用しました。
検証用のためBedrockの実行権限があるIAMユーザーを作成し、そのユーザーのシークレット情報を別ファイル .secrets.envとして保存しています。
- AWS_ACCESS_KEY_ID: AWSのアクセスキーID
- AWS_SECRET_ACCESS_KEY: AWSのアクセスキー
- AWS_DEFAULT_REGION: モデルの利用リージョン
GitLabでWebhookの許可設定
GitLabは、初期状態ではWebhookが有効になっていません。そのため管理者ユーザーでログイン後に許可設定が必要です。
Settings>Network>Outbound requestsを展開- 以下の項目を有効化
- ☑ Allow requests to the local network from web hooks and services
- ☑ Allow requests to the local network from system hooks
- 許可するIPアドレス範囲を追加 Local IP addresses and domain names that hooks and services may access に以下を追加する
172.0.0.0/8
10.0.0.0/8
192.168.0.0/16
pr-agent
localhost
127.0.0.1
GitLabからPR AgentへのWebhookの設定
GitLabプロジェクトにWebhookを設定して、PR-Agentサーバーに自動的にイベントを送信します。
対象プロジェクトの設定画面へ移動
- GitLabプロジェクトページで
Settings>Webhooksを選択
- GitLabプロジェクトページで
Webhookの基本設定
- URL:
http://pr-agent:3000/webhook(Docker環境の場合) - Secret token: 前述のdocker-compose.yamlで設定した
GITLAB__SHARED_SECRETの値を入力
- URL:
トリガーの設定 以下のイベントを有効化します:
- ☑ Push events
- ☑ Tag push events
- ☑ Comments
- ☑ Merge request events
SSL verification
- ローカル環境では
Enable SSL verificationのチェックを外します
- ローカル環境では
Webhookのテスト
Add webhookをクリックして保存TestボタンでWebhookが正常に動作することを確認- PR-Agentのログに接続確認のメッセージが表示されれば成功
PR AgentからGitLabへのコメント作成設定
起動したGitLab上にPR-Agentのユーザー(pr-agent)を作成します。
ユーザーを作成後にGitLabのコメントへの書き込みができるように対象プロジェクトにReporter権限で参加します。
また、API経由のコメントができるように下記の設定を行います。
PR-Agent用ユーザーの作成
- GitLab管理者で
Admin Area>Users>New userを選択 - ユーザー名:
pr-agent - Email:
pr-agent@example.net(実在するメールアドレスでなくても可) - ユーザーを作成後、パスワードを設定
- GitLab管理者で
Personal Access Tokenの作成
- PR-Agentユーザーでログイン
Preferences>Access Tokensを選択- Token名:
pr-agent-token - Expiration date: 適切な期限を設定
- 以下のスコープを選択:
- ☑ api
- ☑ read_user
- ☑ read_repository
- ☑ write_repository
Create personal access tokenをクリック- 生成されたトークンをコピーし、docker-compose.yamlの
GITLAB__PERSONAL_ACCESS_TOKENに設定
プロジェクトメンバーへの追加
- 対象プロジェクトページで
Project information>Membersを選択 Invite membersからpr-agentユーザーを検索- Role:
Reporter以上を選択(コメント権限が必要) Inviteをクリックして追加
- 対象プロジェクトページで
API アクセスの有効化
- GitLab管理者で
Admin Area>Settings>Networkを選択 Outbound requestsセクションで以下を有効化:- ☑ Allow requests to the local network from web hooks and services
- ☑ Allow requests to the local network from system hooks
- GitLab管理者で
実際に使ってみた
設定が正しく行われるとGitLabとPR Agentが連携した状態になります。
マージリクエストのコメントとして、下記のコマンドを実行するとPR Agentが各種の対応を実施してくれます。
利用可能なコマンドとしては、下記を利用して動作の確認ができました。(2025/7現在)
| コマンド | 説明 |
|---|---|
/describe | マージリクエストの説明を生成 - タイトル、種類、要約、コードウォークスルー、ラベル |
/review | マージリクエストに関する調整可能なフィードバック、潜在的な問題、セキュリティ上の懸念、レビュー工数など |
/improve | マージリクエストを改善するためのコード提案 |
/update_changelog | 変更履歴を自動更新 |
/ask | PRに関する自由形式の質問への回答 |
今回はサンプルとして、pr-agentのv0.29からv0.30にバージョンアップした差分をマージリクエストした際にどのように振る舞うかを確認してみました。
describeコマンド
reviewコマンド
improveコマンド
update_changelogコマンド
マージリクエストの内容のChange Logを作成してくれます。
askコマンド
コスト管理の注意点
PR-Agentは、LLMのAPIを使用するため、使用量に応じてコストが発生します。 特に大きなマージリクエストや頻繁な実行は、予想以上のコストになる可能性があります。
まとめ
PR Agentは、マージリクエストワークフローの自動化において強力なツールです。
適切に設定すれば、開発チームの生産性を大幅に向上させることができる可能性があります。類似のツールも多く出てきている中でオープンソースで対応できるPR-Agent(Qodo Merge)はここまで対応できるんですね。
今回試した中では、日本語化はうまくいかなかった部分もありましたが、モデルを変更したりプロンプトを改良することで実現可能だと思います。さらにAIの進化でますます精度も向上してゆくと考えられますので、精度の高いコードが作成できる良い時代になってきましたね。



