はじめに
今回はDifyとGitLabを組み合わせてコードレビューをしてみます。
Dify内でGitLabのREST APIを呼び出し、MRの差分を取得してLLMにレビューさせる構成です。
手順
GitLabの準備
- GitLabのプロジェクトを作成します
devブランチを作成しますdevブランチに簡単なFlaskアプリを作成してプッシュします
# app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run()mainブランチへのMRを作成します- 以下の情報を控えておきます
- プロジェクトID: プロジェクトのトップページ > 三点リーダーから確認できます
- MRのIID: MRのURL末尾の数値(例:
/merge_requests/1→1)
- パーソナルアクセストークンを
read_api権限で作成します- 「ユーザー設定」→「パーソナルアクセストークン」から発行します

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

ユーザー入力の設定
「スタート」ブロックのユーザー入力に以下の2項目を追加します。
| 変数名 | 型 | 説明 |
|---|---|---|
projectId | テキスト | GitLabのプロジェクトID |
mergeRequestIid | テキスト | MRのIID |


環境変数の設定
アプリの環境変数に以下を追加します。
| 変数名 | 型 | 値 |
|---|---|---|
PRIVATE_TOKEN | Secret | 発行したパーソナルアクセストークン |

HTTPリクエストブロックの追加
HTTPリクエストブロックを追加し、以下のように設定します。
- メソッド:
GET - URL:
Difyの変数参照構文でprojectIdとmergeRequestIidをURLに埋め込みます。
https://gitlab.com/api/v4/projects/{{projectId}}/merge_requests/{{mergeRequestIid}}/raw_diffs
ヘッダー:
| キー | 値 |
|---|---|
PRIVATE-TOKEN | PRIVATE_TOKEN |

このAPIは指定したMRのUnified diff形式の差分テキストを返します。
参考: https://docs.gitlab.com/api/merge_requests/#show-merge-request-raw-diffs
LLMブロックの設定
LLMブロックを追加し、以下のように設定します。
システムプロンプト(例):
あなたは優秀なコードレビュアーです。
提供されたコードの差分(diff)を分析し、以下の観点でレビューコメントを日本語で提供してください。
- バグや潜在的な問題点
- セキュリティ上の懸念
- コードの可読性・保守性
- パフォーマンス上の改善点
- 良い点のフィードバック
ユーザーメッセージ:
HTTPリクエストブロックの出力bodyを変数として設定します。
以下のdiffをレビューしてください:
/body

全体のフロー

動作確認
プレビュー画面からprojectIdとmergeRequestIidを入力して送信します。
LLMがdiffを解析したレビューコメントを返してくれれば成功です。
まとめ
DifyとGitLabを連携させることで、AIを活用したコードレビューが可能になります。
また、今回は簡単にするためにREST APIを直接呼び出しましたが、MCPサーバーなどを用意しておくとより柔軟にアプリが構築できると思います。


コメント