GitLab Duo Agent は開発者の相棒になれるか? AIエージェントにコード修正からMR作成まで丸投げしてみた

はじめに
対象とする読者
本記事は、GitLabを利用しており、最新のAI支援機能(Duo Chat / Duo Agent)で何ができるか知りたい方を対象としています。
前提知識として、Git、Terraform、AWS Lambdaを使用したアプリ開発の流れの基礎知識があることを想定しています。
記事のゴール
この記事は以下の点を達成することを目指したいと思います。
- GitLab Duo Chat と Duo Agent の役割の違い(チャットか、実行まで行うか)を理解する。
- Agentic mode を利用した、コード修正~マージリクエスト作成の一連の流れをイメージできる。
- AIへの指示が一度でうまくいかなくても、対話(フィードバック)によって精度を高められることを知る。
この記事を書こうと思ったきっかけ
先日、チーム内の勉強会で、GitLab の Duo Chat (AIチャット)と、Duo Agent (AIエージェント) に触れる機会がありました。
Duo Chat は名前の通りAIチャット機能で、対話的にGitLab操作方法を質問したり、コードレビューやコード提案などをしてくれます。
それに加えて Duo Agent は実際の作成・変更作業を行う機能で、コードを実際に修正してくれたり、イシューやマージリクエストの作成などをしてくれます。
ソフトウェア開発ライフサイクルの中で、Duo Chat や Duo Agent がどのようにサポートしてくれるか色々試していたのですが、今回は Duo Agent にアプリのコード修正をしてもらったらどうなるか試してみたので、それについて書いていきたいと思います。
GitLab Duo Agent の実力を検証!AIはどこまで自律的に動けるのか
【前提】サンプルアプリとプロジェクト(リポジトリ)について
まず前提として、今回サンプルのアプリとして使用するのは、Slackの投稿に対して任意のリアクションをした際に、投稿内容をスレッドでそのまま返すLambdaアプリです。

次にリポジトリの構成は以下のようにしています。
リポジトリルート/
├ src/
│ └ lambda_function.py ←Lambdaコード
├ terraform/
│ ├ main.tf ←LambdaやIAMロールなどをデプロイするTerraformコード
│ └ その他.tf
└ .gitlab-ci.yml ←CI/CDパイプラインのスクリプト
何のリアクション(Reacji)に反応するかはLambdaの環境変数としてTerraformコード側に定義されており、この時点では以下のように eyes が設定されています。
resource "aws_lambda_function" "func_helloworld" {
function_name = "${local.project_name}-${terraform.workspace}-func-helloworld"
role = aws_iam_role.func_helloworld.arn
filename = data.archive_file.func_helloworld.output_path
source_code_hash = data.archive_file.func_helloworld.output_base64sha256
runtime = "python3.13"
handler = "lambda_function.lambda_handler"
memory_size = 512
timeout = 30
ephemeral_storage {
size = 512
}
environment {
variables = {
SLACK_TOKEN = data.aws_ssm_parameter.func_helloworld_slack_token.value
REACJI = "eyes" ←★ここ
}
}
tags = {
Name = "${local.project_name}-${terraform.workspace}-func-helloworld"
}
}
また、環境変数として定義されたリアクション(Reacji)かを判定するロジックは、Lambdaコード内にあります。
...
import os
reacji = os.environ.get('REACJI')
slack_token = os.environ.get('SLACK_TOKEN')
...
event = request_body['event']
if event['type'] == 'reaction_added':
if event['reaction'] == reacji: ←★ここ
channel = event['item']['channel']
ts = event['item']['ts']
# Slack APIを使用してメッセージを取得
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {slack_token}"
}
payload = {
"channel": channel,
"oldest": ts ,
"latest": ts ,
"inclusive": "True",
"limit": 1
}
response_body = http_request('POST', 'slack.com', '/api/conversations.history', headers, payload)
text = response_body['messages'][0]['text']
...
以上の前提で説明を進めていきます。
【実践】Duo Agent でアプリを自動修正してみる
Step 1:まずはAIにざっくりと修正を指示
アプリのプロジェクト(リポジトリ)を開き、右側の[+]アイコン(New GitLab Duo Chat)をクリックしてチャットウインドウを開きます。

チャットウインドウが表示されたら「Agentic mode (Beta)」をオンにします。

少し余談となりますが、「Beta」と記載がある通り、Duo Agent の機能は2026年1月現在 GitLab Premium 以上のプランを対象に、ベータ版として提供されている機能となります。
今後 Duo Agent Platform アドオンとして正式リリースされた際には、ベータ版として利用できなくなる可能性もありますので、あらかじめご了承ください。
アプリの動作を変更してみたいので、チャットに試しに以下のように入力して送信してみます。
このプロジェクトのアプリが反応するreacjiを eyes と white_check_mark の2つにしたいので、関連した箇所を修正して。

するとエージェントが動き出し、しばらくすると以下のような状態になりました。

この状態は、Duo Agent が動作変更の内容を理解して作業ブランチでコードを自動で修正し、そのコミットをPUSHして良いか承認を求めている状態です。
「> Read commit message」と「> Expand file changes」でコミットの詳細が確認できるので見ていきましょう。

おっと、reacjiをハードコードしちゃいましたね。最初の指示が雑すぎたのかも知れません。
Step 2:AIへのフィードバックで精度を上げる「対話型開発」
しかし、こんな時でも対話形式でやり取りできるのが便利な点です。とりあえず「Deny」をクリックしてから、Reject reason に理由を書いて、もう一度「Deny」をクリックします。

元のコードにある通り、反応するreacjiはハードコードするのではなく、Lambdaの環境変数を参照するようにして。

再び自動でコード修正をして承認待ちの状態になったので、結果を見てみます。

今度は、ハードコードは解消されましたが、Lambdaの環境変数側へのreacjiの追加を忘れているようです。
Step 3:インフラ(Terraform)側の修正も忘れずに指示
先ほどと同様に「Deny」をクリックしてから、Reject reason にその旨を書いて、もう一度「Deny」をクリックします。
環境変数が定義されているTerraformコード側も修正して。

また自動でコード修正をして承認待ちの状態になったので結果を見てみると、ついに期待する修正内容になりました。
そのまま「Approve」をクリックします。

マージリクエスト作成もレビューも Duo Agent にお任せ!
説明文まで自動生成、マージリクエスト作成の手間を大幅削減
エージェントが動き出し、しばらくすると以下のような状態になりました。
この状態は、マージリクエストを作成して良いか承認を求めている状態です。
「> Read description」で詳細を確認してみましょう。

マージリクエストの説明文も自動生成してくれました。これならレビュアーにも分かりやすいですね。
特に問題なさそうなので、このまま「Approve」をクリックします。

しばらくすると以下の状態になりました。

マージリクエストを作成したとのことなので確認してみると、実際に以下のようなマージリクエストが作成されていました。


二通りのAIレビュー手法(Duo Agent と Duo Chat)
次のステップはレビューになるわけですが、これも Duo Agent (Chat) に任せることができます。
方法1. Duo Agent を Reviewer に追加する ※ベータ版では利用不可
マージリクエストの Reviewer に、GitLab Duo というユーザーを追加するだけで、自動でレビューが始まり、レビュー結果をコメントに書き込んでくれます。

※デフォルトではコメントは英語になりますので、必要に応じてブラウザの翻訳機能など日本語に翻訳してください。

今回の指摘事項はそもそも意図した仕様通りなので、対話形式でその旨をコメントすると返事が返ってきます。

今回のケースでは修正の必要はありませんでしたが、もし指摘事項を受けてさらにコード修正が必要な場合は、Duo Agent に対話形式でお願いすると、作業ブランチのコードを自動修正してくれます。
方法2. チャットウインドウからレビューを指示する
この方法は、実際には Duo Agent の機能ではなく、Duo Chat の機能となります。
マージリクエスト画面を表示した状態で、チャットウインドウに以下のよう入力して送信します。
このMRをレビューして。

レビューが始まり、レビュー結果が返ってきました。

こちらの方法でも、さらにコード修正が必要な場合は、チャットウインドウに対話形式でお願いすると、以下のようにコードを自動修正してくれます。(※修正は Duo Agent の機能になります。)

このように2通りのレビュー方法がありますが、前者の方がマージリクエストにレビュー履歴が残りますので、Duo Agent Platform アドオンがある場合はそちらの方法がおすすめです。
マージ ~ 自動デプロイ、そして動作確認
あとは、第三者にもレビューしてもらい承認が得られたら、マージしていきます。
このサンプルアプリのプロジェクトでは、マージ後に自動でデプロイがされるようにCDパイプラインを組んであるので、マージするだけでAWS上のLambdaに対して更新が反映されます。



コード変更後の動作確認をしてみると、eyes と white_check_mark の両方のリアクションに反応するようになりました。


まとめ
今回、GitLab Duo Agent を試してみて最も印象的だったのは、Duo Agent が「開発の流れ」というものを理解している点です。単なるコードの書き換えに留まらず、インフラ定義の修正やマージリクエスト作成までサポートしてくれる姿は、まさにチームの新しいメンバーが増えたような感覚でした。
AIにすべてを丸投げするのではなく、適切にフィードバックを送りながら共創していく。そんな新しい開発スタイルが、すぐそこまで来ていることを実感できる体験でした。
学んだことの整理
- Duo Agent は「思考」して「実行」する: 単なるチャットではなく、自ら作業ブランチを作成し、複数のファイル(LambdaコードとTerraformなど)を横断して修正・PUSHする実行力が非常に強力です。
- 「対話」による軌道修正が鍵: 一度の指示で完璧な回答が得られなくても、人間がレビューして「環境変数を参照して」などの具体的なフィードバックを与えることで、意図に沿ったゴールへ導くことができます。
- 開発サイクル全体の自動化: コード修正からマージリクエストの作成、さらには AI ユーザーによる自動レビューまで、開発ライフサイクルの大部分を GitLab 上で完結できる可能性を感じました。
- ベータ版ゆえの注意点と期待: 現時点では挙動にムラがある場面もありますが、今後のさらなる精度向上によって、チーム開発における強力な武器になることは間違いありません。
皆さんもぜひ、ベータ版が提供されているうちに、この「相棒」との共同作業を試してみてください。
