Dify初心者が2~3時間でAIコードレビュアーをつくってみた

この記事はFindy Advent Calendar 2024 17日目の記事です。

![サムネイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/de677412-6d07-6488-856e-b58b71fb1b28.png)

https://adventar.org/calendars/10599

# はじめに

100番煎じぐらいですが、Difyを使ってGitHub上で自動的にコードレビューをしてくれる「AIコードレビュアー」を作ってみました。

実際のコードレビューのコメント 👇️
RAGの機能を使って、チームのコーディングガイドにそってレビューをしてもらっています。

![スクリーンショット 2024-12-04 23.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/77c739dc-ad75-3007-cdc5-0b097c1446f2.png)

AIコードレビュー自体は [CodeRabbit](https://www.coderabbit.ai/) や [GitHub Copilot code review](https://docs.github.com/en/copilot/using-github-copilot/code-review/using-copilot-code-review) (24年12月時点ではウエイトリストでのパブリックプレビュー）などがあり、斬新なアイデアというわけではありません。

この記事で伝えたいことは、

- 基礎知識があれば、Dify初心者でも数時間で生成AIアプリが作れるよー
- 生成AIは日々進化しており、アイデアを気軽に試せて面白い！

です。

そのため、この記事では、Difyの簡単な説明から、Difyを使ったAIコードレビュアーをどのように実装したかを紹介します。

少しでもDifyに興味を持っていただけたら嬉しいです。

では、はじめていきますー

# Difyとは

Dify（ディファイ）は、生成AIアプリを開発・運用できるプラットフォームです。

https://dify.ai/jp

AIチャットボット、AIエージェント、LLMやRAGを組み込んだワークフローをノーコードで簡単につくれます。

![スクリーンショット 2024-12-04 23.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/1ed28302-2b3a-db62-8eaf-41f7f316e4e8.png)

使えるLLMのモデルは、gpt、claude、Llama、Gemini、Bedrock など主要なモデルは一通り使えます。

![スクリーンショット 2024-12-04 23.39.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/d9c13109-05ad-7b3e-b23c-0fd69559a166.png)

さらに、検索、画像生成、Youtube、Webスクレイピングツールなど多くのサービスと接続することもできます。

これらのサービスとLLMを組み合わせて自分だけのAIエージェントも簡単につくれます。

もちろんHTTPリクエストも簡単に追加できるので、自前のAPIとの連携も簡単です。

![スクリーンショット 2024-12-04 23.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/fedb3ff0-ecd9-d8e8-0ff7-3dc5820ba54f.png)

とても便利なDifyですが１つデメリットをあげるとすると、24年12月時点だとバージョンが0系（v0.13.0）ということもありかゆいところに手が届きません。

例えば、LLMアプリを公開したら非公開にできない、Dify上で認証機能がないなどあたりは少し困ります。

# 今回作ったAIコードレビュアー

今回は、GitHubでレビュー依頼すると、自社のコーディングガイドにそってプルリクにレビューをしてくれるLLMアプリを作りました。

実際のコードレビューのコメント👇️

![スクリーンショット 2024-12-04 23.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/77c739dc-ad75-3007-cdc5-0b097c1446f2.png)

2~3時間ぐらいで作れたので、DifyはさくっとLLMアプリを作って検証するには適していると感じました。

補足：UdemyのでDifyの基本的な使い方は学習しており、その学習時間は2~3時間に含んでいません。

UdemyでDifyの基礎を学んだコースはこちら

[【AI初心者向け】Difyマスター講座 - 今日から高度なAIアプリ開発ができるようになる！【ITが苦手でも大丈夫】 | Udemy](https://www.udemy.com/course/dify-master-course/)



## AIコードレビューの全体像

大まかな、AIコードレビューの全体的なフローは次のとおりです。

```
1. GitHubでレビュアー指定
↓
2. GitHub Actions がトリガーされ、DifyのAPIをリクエスト
↓
3. AIがコードレビュー（Difyのワークフロー）して、GitHubのレビュー作成APIをリクエスト
↓
4. GitHubにレビューコメントが表示
```

## GitHubからDifyのAPIリクエスト

GitHubでレビュー依頼時にDifyのAPIをリクエストするには、GitHub Actionsを使っています。

次のようにレビューリクエストをトリガーにして、DifyのAPIをリクエストしています。

```yml
name: AI Review α

on:
  pull_request:
    types: [review_requested]

jobs:
  request_ai_review:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    if: ${{ github.event.requested_reviewer.login == 'xxxxxx' }}

    steps:
      - uses: actions/checkout@v4

      - name: POST Dify API
        env:
          API_URL: "https://api.dify.ai/v1/workflows/run"
          API_KEY: ${{ secrets.DIFY_AI_REVIEW_API_KEY }}
        run: |
          response=$(curl -s -X POST "$API_URL" \
            -H "Authorization: Bearer $API_KEY" \
            -H "Content-Type: application/json" \
            -d '{
              "inputs": { "url": "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}" },
              "response_mode": "blocking",
              "user": "xxxxxx"
            }')

          echo "Response: $response"
```


## DifyでLLMを使ったコードレビュー

次に、DifyでLLMを使ってコードレビューを実施します。

Difyのワークフローの機能を使うと、ノーコードでLLMを利用したフローを作れます。

さらに、Dify上でAPIキーを発行することで、ワークフローをAPIとしてすぐに公開することができます。

このおかげで、DifyではLLMアプリをAPIとしてすぐに公開できるので、既存アプリケーションに組み込むのがとても簡単です。（※本番利用時はセキュリティなどに気をつけてください🛡️）

今回作ったAIコードレビューでは次のようなワークフローを作りました。

![スクリーンショット 2024-12-04 23.57.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62416/6879d54e-7005-5b05-6a5e-6d6aea7f67de.png)

画像が小さくて見づらいですが、ワークフローの流れとしては次のとおりです。

1. レビュー対象のプルリクのURLを入力値として受け取る
2. GitHub APIを使ってプルリクのコード差分を取得
3. 事前に学習していた自社のコーディングガイドを参考にしながら、LLM (gpt-4o) を使ってコードレビューを実施
4. コードレビュー結果をGitHub APIを使ってプルリクにコメントする

2~3時間ぐらいでとても簡単に生成AIができました🎉🎉🎉

## AIコードレビュアーを使ってみての感想

今回作ったAIコードレビュアーを特定のリポジトリで2週間ほど使ってみました。

感想としては、たまに的確な指摘ををいってくれますが、まだまだ嘘をいったり、同じような内容で言わなくても...というコメントもあります。

Difyを使うことでそれぽいものは簡単に作れますが、実際に生産性を高めるために活用していくにはプロンプトや仕組みの高度化は必要かなと感じました。

自分で作ることのメリットの1つとして、LLMのプロンプトで語尾を変えて楽しんだり、レビューコメントで結構褒めてくれるのはAIといえど嬉しかったりしました。

# まとめ

今回はDifyを使って、GitHub上でコードレビューを自動でしてくれる「AIコードレビュアー」を作ってみました。

Dify初心者でも2~3時間でAIコードレビュアーを作ることができたのでDifyはとても便利だと感じました。

生成AIは動きが早くてフォローするのが大変かもしれませんが、興味があれば気軽にDifyをさわって遊んでみてください！