DifyでGitLabのMRをAIレビューする

AI

はじめに

今回はDifyとGitLabを組み合わせてコードレビューをしてみます。
Dify内でGitLabのREST APIを呼び出し、MRの差分を取得してLLMにレビューさせる構成です。

手順

GitLabの準備

  1. GitLabのプロジェクトを作成します
  2. devブランチを作成します
  3. devブランチに簡単なFlaskアプリを作成してプッシュします
# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run()
  1. mainブランチへのMRを作成します
  2. 以下の情報を控えておきます
    • プロジェクトID: プロジェクトのトップページ > 三点リーダーから確認できます
    • MRのIID: MRのURL末尾の数値(例: /merge_requests/11
  3. パーソナルアクセストークンをread_api権限で作成します
    • 「ユーザー設定」→「パーソナルアクセストークン」から発行します

Difyでアプリを作成する

Difyのスタジオから新規アプリ(チャットボット)を作成します。

ユーザー入力の設定

「スタート」ブロックのユーザー入力に以下の2項目を追加します。

変数名説明
projectIdテキストGitLabのプロジェクトID
mergeRequestIidテキストMRのIID

環境変数の設定

アプリの環境変数に以下を追加します。

変数名
PRIVATE_TOKENSecret発行したパーソナルアクセストークン

HTTPリクエストブロックの追加

HTTPリクエストブロックを追加し、以下のように設定します。

  • メソッド: GET
  • URL:
    Difyの変数参照構文でprojectIdmergeRequestIidをURLに埋め込みます。
https://gitlab.com/api/v4/projects/{{projectId}}/merge_requests/{{mergeRequestIid}}/raw_diffs

ヘッダー:

キー
PRIVATE-TOKENPRIVATE_TOKEN

このAPIは指定したMRのUnified diff形式の差分テキストを返します。

参考: https://docs.gitlab.com/api/merge_requests/#show-merge-request-raw-diffs

LLMブロックの設定

LLMブロックを追加し、以下のように設定します。

システムプロンプト(例):

あなたは優秀なコードレビュアーです。
提供されたコードの差分(diff)を分析し、以下の観点でレビューコメントを日本語で提供してください。

- バグや潜在的な問題点
- セキュリティ上の懸念
- コードの可読性・保守性
- パフォーマンス上の改善点
- 良い点のフィードバック

ユーザーメッセージ:

HTTPリクエストブロックの出力bodyを変数として設定します。

以下のdiffをレビューしてください:

/body

全体のフロー

動作確認

プレビュー画面からprojectIdmergeRequestIidを入力して送信します。
LLMがdiffを解析したレビューコメントを返してくれれば成功です。

まとめ

DifyとGitLabを連携させることで、AIを活用したコードレビューが可能になります。
また、今回は簡単にするためにREST APIを直接呼び出しましたが、MCPサーバーなどを用意しておくとより柔軟にアプリが構築できると思います。

コメント

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