はじめに
ホームサーバーで運用している GitLab に Dify を連携させて、イシュー作成時に自動でレビューコメントを投稿できないか試してみました。GitLab の Webhook と Dify のワークフロー機能を組み合わせることで、LLM によるイシューレビューを自動化できます。
本記事では、Dify のセットアップから GitLab への Webhook 設定、ワークフローの構築までの手順を紹介します。
使用環境 / 前提
- GitLab(セルフホスト)
- Dify(セルフホスト)
- Dify と GitLab は同一ネットワーク上で稼働していることとします
手順
1. Difyのセットアップ
Dify の公式ドキュメント を参考に Dify をセットアップします。
Webhook のベース URL を設定するため、.env の TRIGGER_URL を以下のように設定します。192.168.10.141 は Dify が動作しているサーバーの IP アドレスに置き換えてください。
# Trigger external URL
# Dify のフロントエンドに表示される Webhook エンドポイントのベース URL
TRIGGER_URL=http://192.168.10.141
この設定によって、Dify の管理画面に表示される Webhook の URL が以下のような形式になります。
http://192.168.10.141/triggers/webhook-debug/syx6H_mwcUdH3bZkc7dgCy8Q
2. Difyのワークフロー作成
Dify の管理画面から新しいワークフローを作成します。スタートブロックの種類として 「Webhook」 を選択し、表示されたテスト用 Webhook の URL をコピーしておきます。

3. GitLabのWebhook設定
GitLab のプロジェクト設定から Webhook を追加します。URL には手順 2 でコピーした Dify の Webhook URL を指定します。

注意:GitLab のセルフホスト環境では、デフォルトでローカルネットワーク向けの Outbound リクエストがブロックされています。以下の手順でホワイトリストに追加してください。
- Admin Area > Settings > Network > Outbound requests を開く
- Allowlist に Dify サーバーの IP アドレス(例:
192.168.10.141)を追加する

4. テスト実行
Dify のワークフロー画面で 「テスト実行」 を押して Webhook を待ち受けます。GitLab のプロジェクトから Webhook のテスト送信を実行します。
注意:イシューが一件もない状態で Webhook のテストを実行するとエラーになります。事前にダミーのイシューを作成してからテストを実行してください。
テストが成功すると、Dify の管理画面でリクエストが受信され、以下のようなボディが確認できます。(抜粋)
{
"method": "POST",
"body": {
"object_kind": "issue",
"event_type": "issue",
"user": {
"name": "shutils",
"username": "shutils"
},
"project": {
"id": 2,
"name": "sandbox"
},
"object_attributes": {
"iid": 1,
"title": "test",
"description": "",
"state": "opened",
"action": "open"
}
}
}
ボディにはプロジェクト情報やイシューのタイトル・説明が含まれているため、後続のブロックでこれらを利用してレビューを行うことができます。

5. ワークフローの構築
受信したリクエストをもとに、イシューをレビューしてコメントを投稿するワークフローを構築します。
コード実行ブロックでパラメータを抽出する
Webhook で受け取ったリクエストボディからイシュー情報を抽出するコード実行ブロックを追加します。
function main({webhookRaw}) {
const body = webhookRaw['body']
const projectId = body['project']['id']
const issueIid = body['object_attributes']['iid']
const title = body['object_attributes']['title']
const description = body['object_attributes']['description']
return {
projectId,
issueIid,
title,
description,
}
}
LLMブロックでレビューする
LLM ブロックを追加し、コード実行ブロックの出力を入力として接続します。システムプロンプトに以下を設定することで、イシューの内容をレビューさせることができます。title,descriptionは変数として設定してください。
以下は GitLab のイシューの内容です。内容を確認して、問題がないかレビューしてください。
タイトル: {title}
説明: {description}
GitLab APIでコメントを投稿する
GitLab の Issue Notes API を使用して、LLM のレビュー結果をイシューのコメントとして投稿します。
まず GitLab のプロジェクトのアクセストークンを発行し、Dify のシークレット変数に保存します。その後、HTTP リクエストブロックを追加して以下のように設定します。
| 項目 | 設定値 |
|---|---|
| メソッド | POST |
| URL | http://<GitLabのIP>/api/v4/projects/{projectId}/issues/{issueIid}/notes |
ヘッダー PRIVATE-TOKEN | シークレット変数に保存したアクセストークン |
ボディ body | LLM ブロックの出力 |
設定後、ワークフローを保存して有効化します。

イシューを作成すると、しばらくしてレビューコメントが自動投稿されることが確認できます。

まとめ
GitLab の Webhook と Dify のワークフローを組み合わせることで、イシュー作成時に LLM によるレビューコメントを自動投稿する仕組みを構築できました。 ほかの API と組み合わせることで、マージリクエストのレビューやコードの静的解析など、さまざまな自動化が可能になります。ぜひ試してみてください。


コメント