GitLabのイシュー作成時にDifyでレビューする

AI

はじめに

ホームサーバーで運用している GitLab に Dify を連携させて、イシュー作成時に自動でレビューコメントを投稿できないか試してみました。GitLab の Webhook と Dify のワークフロー機能を組み合わせることで、LLM によるイシューレビューを自動化できます。

本記事では、Dify のセットアップから GitLab への Webhook 設定、ワークフローの構築までの手順を紹介します。

使用環境 / 前提

  • GitLab(セルフホスト)
  • Dify(セルフホスト)
  • Dify と GitLab は同一ネットワーク上で稼働していることとします

手順

1. Difyのセットアップ

Dify の公式ドキュメント を参考に Dify をセットアップします。

Webhook のベース URL を設定するため、.envTRIGGER_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 をコピーしておきます。

Difyのワークフロー作成 - Webhookブロック設定
Difyのワークフロー作成 – Webhookブロック設定

3. GitLabのWebhook設定

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

GitLabのWebhook設定画面
GitLabのWebhook設定画面

注意:GitLab のセルフホスト環境では、デフォルトでローカルネットワーク向けの Outbound リクエストがブロックされています。以下の手順でホワイトリストに追加してください。

  1. Admin Area > Settings > Network > Outbound requests を開く
  2. Allowlist に Dify サーバーの IP アドレス(例:192.168.10.141)を追加する
GitLabのOutbound Webhookホワイトリスト設定
GitLabのOutbound Webhookホワイトリスト設定

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"
    }
  }
}

ボディにはプロジェクト情報やイシューのタイトル・説明が含まれているため、後続のブロックでこれらを利用してレビューを行うことができます。

Difyでリクエストを受信した様子
Difyでリクエストを受信した様子

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
URLhttp://<GitLabのIP>/api/v4/projects/{projectId}/issues/{issueIid}/notes
ヘッダー PRIVATE-TOKENシークレット変数に保存したアクセストークン
ボディ bodyLLM ブロックの出力

設定後、ワークフローを保存して有効化します。

完成したワークフロー全体像
完成したワークフロー全体像

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

GitLabイシューにレビューコメントが投稿された様子
GitLabイシューにレビューコメントが投稿された様子

まとめ

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

コメント

タイトルとURLをコピーしました