Difyは、ローコードでAIアプリケーションを構築できる便利なプラットフォームです。しかし、標準機能だけでは足りないこともありますよね。そんなときに活躍するのがPlugin System(プラグインシステム)です。

この記事は、プログラミング経験が全くない方を対象に、プラグインを使ってDifyの機能を拡張する方法を説明します。難しい言葉は避け、一步一步(少しずつ)一緒に見ていきましょう。

Plugin(プラグイン)とは何か?

まず、プラグインという言葉の意味を理解しましょう。

プラグインは、英语では「差し込み工具」や「拡張機能」という意味があります。ITの世界では、あるシステムに新しい機能を追加できる小さなプログラムのことを言います。

例えるならスマートフォンのアプリのようなものです。スマホ自体にも基本的な機能がありますが、CameraCameraカメラアプリを入れると写真が撮れるようになりますよね?Difyのプラグインも、これと同じ考え方です。

なぜHolySheep AIを使うのか?

DifyでAIモデルを動かすには、APIという仕組みが必要です。私は実際に複数のAIサービスを試しましたが、HolySheep AIが最もコストパフォーマンスに優れています。

HolySheep AIの主なメリット:

GPT-4.1は$8/MTok、Claude Sonnet 4.5は$15/MTok、Gemini 2.5 Flashは$2.50/MTok、DeepSeek V3.2は$0.42/MTokという破格の安さも魅力ですね。

Dify Plugin Systemの基本概念

Pluginの種類

Difyのプラグインシステムは大きく分けて3種類の拡張 가능합니다:

Pluginの構造

プラグインは geralmente以下のようなファイル構成になっています:

my-plugin/
├── manifest.yaml          # プラグインの設定ファイル
├── plugin.py              # メインの処理ファイル
├── requirements.txt       # 必要なライブラリ一覧
└── assets/                # 画像やアイコンのフォルダ
    └── icon.png

実践:最初のPluginを作成しよう

では、実際に簡単なプラグインを作成してみましょう。最初は「Webhook通知プラグイン」というものを作ります。これは、Difyのワークフローで特定の処理が完了したときに、LINEやSlackに通知を送る機能です。

ステップ1:環境準備

Difyをローカル環境で動かす場合は、Dockerが必要です。Dockerのインストールが初めての方は、「Docker Desktop インストール 方法」などで検索して先にインストールしておいてください。

💡 スクリーンショットヒント:Difyのダッシュボード左側のメニューに「Plugins」という項目があることを確認してください。

ステップ2:Pluginのコードを書く

"""
HolySheep AI × Dify Webhook通知プラグイン
通知先にHTTPリクエストを送る簡単なプラグインです
"""

import requests
import json
from typing import Any, Optional

class WebhookNotifier:
    """
    Webhookを使って通知を送るクラス
    初心者でもわかるように一つ一つ説明します
    """
    
    def __init__(self, webhook_url: str):
        """
        初期化メソッド:webhook_urlは通知を送る先のURL
        """
        self.webhook_url = webhook_url
        self.api_key = "YOUR_HOLYSHEEP_API_KEY"
        self.base_url = "https://api.holysheep.ai/v1"
    
    def send_notification(self, message: str, status: str = "success") -> dict:
        """
        通知送るためのメソッド
        message: 送りたいメッセージ
        status: 処理の結果(successまたはerror)
        """
        # HolySheep AIを使ってAI分析結果も同時に取得
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        # DeepSeek V3.2是目前最安価なモデル($0.42/MTok)
        ai_payload = {
            "model": "deepseek-chat",
            "messages": [
                {
                    "role": "user",
                    "content": f"次の通知メッセージを簡潔に summarizまとめ: {message}"
                }
            ],
            "temperature": 0.3
        }
        
        # AIでメッセージを分析
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=headers,
                json=ai_payload,
                timeout=10
            )
            response.raise_for_status()
            ai_result = response.json()
            summarized = ai_result["choices"][0]["message"]["content"]
        except Exception as e:
            summarized = message  # AI失敗時は元のメッセージを使用
        
        # Webhookで通知
        webhook_payload = {
            "text": summarized,
            "status": status,
            "model_used": "deepseek-chat",
            "latency_ms": response.elapsed.microseconds / 1000 if response else 0
        }
        
        webhook_response = requests.post(
            self.webhook_url,
            json=webhook_payload,
            timeout=5
        )
        
        return {
            "success": webhook_response.status_code == 200,
            "summarized_message": summarized,
            "webhook_status": webhook_response.status_code
        }

Dify Plugin用デコレーター

def register_tool(): """ Difyにこのプラグインを登録するための関数 Difyはこの関数を自動的に呼び出してツールを認識します """ return { "name": "Webhook通知", "description": "HolySheep AIでメッセージを分析し、Webhookで通知を送ります", "parameters": { "webhook_url": { "type": "string", "required": True, "description": "通知先のWebhook URL" }, "message": { "type": "string", "required": True, "description": "通知したいメッセージ" } } }

ステップ3:manifest.yamlを作成

# Plugin設定ファイル

このファイルを見れば、Difyは「このプラグインが何者か」を理解します

version: "1.0.0" name: webhook-notifier display_name: "Webhook通知プラグイン" description: "HolySheep AIでメッセージを分析し、LINE/Slack/Discordに通知を送ります" author: "HolySheep User"

何を拡張するか(tool = ツール.plugin)

extends: tool

必要な設定項目(ユーザーが入力する項目)

credentials: - name: webhook_url type: string label: "Webhook URL" required: true placeholder: "https://hooks.slack.com/services/xxx" - name: channel_type type: select label: "通知先" options: ["Slack", "LINE", "Discord", "Generic Webhook"] default: "Slack"

実行時に必要なパラメータ

parameters: message: type: string required: true description: "送信するメッセージ" status: type: string required: false default: "success" description: "通知の状態"

最小Difyバージョン

min_dify_version: "0.6.0"

ステップ4:Pluginをインストール

Difyダッシュボードでの操作手順:

  1. Difyダッシュボードにログイン
  2. 左メニューの「Plugins」をクリック
  3. 右上の「Install」ボタンをクリック
  4. 「Upload Plugin」から作成したフォルダを選択
  5. Plugin一覧に追加されたことを確認

💡 スクリーンショットヒント:Pluginカード右下に「Installed」と表示されたら成功です。ステータス badgeが緑色になります。

実践編:HolySheep AI × Difyで翻訳Pluginを作る

もう一つ、実践的な例を見てみましょう。DeepSeek V3.2を使って文章を翻訳するPluginを作成します。DeepSeek V3.2は$0.42/MTokという破格の安さなので、個人開発者でも気軽に使えます。

#!/usr/bin/env python3
"""
Dify × HolySheep AI 翻訳Plugin
DeepSeek V3.2を使用して高精度な翻訳を実現
"""

import requests
from typing import Literal

class TranslationPlugin:
    """
    翻訳 Plugin本体
    """
    
    def __init__(self):
        self.api_key = "YOUR_HOLYSHEEP_API_KEY"
        self.base_url = "https://api.holysheep.ai/v1"
    
    def translate(
        self, 
        text: str, 
        target_lang: Literal["ja", "en", "zh", "ko", "es", "fr"] = "ja",
        source_lang: str = "auto"
    ) -> dict:
        """
        翻訳を実行するメイン関数
        
        引数:
            text: 翻訳したい文章
            target_lang: 目標言語(デフォルトは日本語)
            source_lang: 原文の言語(auto で自動検出)
        
        戻り値:
            翻訳結果とメタデータを含む辞書
        """
        # HolySheep AIのDeepSeekで翻訳
        system_prompt = f"""あなたは専門的な翻訳者です。
{source_lang}から{target_lang}へ、准确に翻訳してください。
専門用語は適切に处理し、読者が理解しやすい文体にしてください。"""
        
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": "deepseek-chat",  # DeepSeek V3.2($0.42/MTok)
            "messages": [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": text}
            ],
            "temperature": 0.3,  # 翻訳は低温度の方が安定
            "max_tokens": 2000
        }
        
        # HolySheep AI API呼び出し
        # 遅延測定のために時間を記録
        import time
        start_time = time.time()
        
        response = requests.post(
            f"{self.base_url}/chat/completions",
            headers=headers,
            json=payload,
            timeout=30
        )
        
        elapsed_ms = (time.time() - start_time) * 1000
        
        if response.status_code != 200:
            return {
                "success": False,
                "error": f"APIエラー: {response.status_code}",
                "details": response.text
            }
        
        result = response.json()
        translated_text = result["choices"][0]["message"]["content"]
        
        # 使用量の取得
        usage = result.get("usage", {})
        
        return {
            "success": True,
            "original": text,
            "translated": translated_text,
            "target_lang": target_lang,
            "source_lang": source_lang,
            "latency_ms": round(elapsed_ms, 2),
            "usage": {
                "prompt_tokens": usage.get("prompt_tokens", 0),
                "completion_tokens": usage.get("completion_tokens", 0),
                "total_tokens": usage.get("total_tokens", 0)
            },
            "cost_usd": round(usage.get("total_tokens", 0) * 0.42 / 1_000_000, 6)
        }

インスタンス作成とテスト

if __name__ == "__main__": translator = TranslationPlugin() # テスト実行 test_text = "Hello, this is a test message for translation." result = translator.translate(test_text, target_lang="ja") print("=== 翻訳結果 ===") print(f"原文: {result['original']}") print(f"翻訳: {result['translated']}") print(f"処理時間: {result['latency_ms']}ms") print(f"コスト: ${result['cost_usd']}")

Dify WorkflowでのPlugin使い方

Pluginを作成したら、次はDifyのWorkflow(ワークフロー)で使います。

  1. Difyダッシュボードで新規アプリケーションを作成
  2. 「Workflow」タイプを選択
  3. 左側のブロック一覧から「Tools」→「自作Plugin」を選択
  4. Pluginブロックをキャンバスにドラッグ
  5. блокの設定でWebhook URLやパラメータを入力
  6. Startノードと繋いで実行

💡 スクリーンショットヒント:Pluginブロックは紫色で識別できます。Startブロックの右側の●からドラッグして繋いでください。

Pluginのデバッグ方法

Pluginが期待通りに動かないときには、以下の方法で問題を探します:

# ターミナル(コマンドプロンプト)で直接テスト

まず requirements.txt を作成

requirements.txt

requests>=2.28.0 pyyaml>=6.0

インストール

pip install -r requirements.txt

テストスクリプトを実行

python translate_plugin.py

エラーが出たら-python -v で詳細表示

python -v translate_plugin.py

よくあるエラーと対処法

Plugin作成中に遭遇する可能性が高いエラーと、その解決策をまとめます。

エラー1:ImportError: No module named 'requests'

原因:必要なライブラリがインストールされていない

解決方法:

# ターミナルで以下のコマンドを実行
pip install requests pyyaml

requirements.txtがある場合は一括インストール

pip install -r requirements.txt

それでもエラーが出る場合はpipをアップグレード

python -m pip install --upgrade pip pip install requests pyyaml

エラー2:requests.exceptions.SSLError / Connection Error

原因:APIエンドポイントに接続できない(ネットワーク問題またはURL間違い)

解決方法:

# 正しいベースURLを確認(api.openai.com は使用しないこと)

正:http://api.holysheep.ai/v1 ではなく https://api.holysheep.ai/v1

import requests

SSL警告を無視する場合(開発時のみ)

import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) response = requests.post( "https://api.holysheep.ai/v1/chat/completions", headers={"Authorization": f"Bearer YOUR_HOLYSHEEP_API_KEY"}, json={"model": "deepseek-chat", "messages": [{"role": "user", "content": "test"}]}, verify=False # SSL検証をスキップ(開発時のみ) )

本番環境では正しい証明書を設定

import certifi

response = requests.get(url, verify=certifi.where())

エラー3:manifest.yaml の構文エラー

原因:YAMLファイルのインデントや構文が不正

解決方法:

# YAMLの構文チェック(Pythonの場合)
import yaml

try:
    with open('manifest.yaml', 'r', encoding='utf-8') as f:
        config = yaml.safe_load(f)
    print("✅ YAML正常:", config)
except yaml.YAMLError as e:
    print(f"❌ YAMLエラー: {e}")
    

よくあるミスを修正

1. タブではなくスペースを使用(半角スペース2個が一般的)

2. コロンの後にスペースを入れる(name: value)

3. リスト項目はハイフンの後にスペース(- item)

エラー4:Plugin認識されない

原因:DifyがPluginファイルを正しく読み込めていない

解決方法:

# ディレクトリ構造を確認
import os

def check_plugin_structure(plugin_dir):
    """Pluginの構造をチェック"""
    required_files = ['manifest.yaml', 'plugin.py']
    
    for filename in required_files:
        filepath = os.path.join(plugin_dir, filename)
        if os.path.exists(filepath):
            print(f"✅ {filename} あり")
        else:
            print(f"❌ {filename} なし - 必須ファイルです")
    
    # manifest.yamlの必須フィールド確認
    import yaml
    with open(os.path.join(plugin_dir, 'manifest.yaml')) as f:
        manifest = yaml.safe_load(f)
    
    required_fields = ['version', 'name', 'extends']
    for field in required_fields:
        if field in manifest:
            print(f"✅ {field}: {manifest[field]}")
        else:
            print(f"❌ {field} が必要です")

使用例

check_plugin_structure('./my-plugin')

Plugin公開与国际分享

自作のPluginを共有したい場合、DifyのコミュニティPluginレジストリに公開できます。公開時には:

まとめ

今回はDifyのPlugin Systemについて、以下の内容を学びました:

Plugin開発が初めての方は、今回のサンプルコードをベースに少しずつカスタマイズしてみてください。、エラー解決のセクションをヒントにいただければ、独学でも必ず動くPluginが作れます。

APIコスト削減を考えている方は、ぜひHolySheep AIの無料クレジットを試してみてください。¥1=$1の為替レートは本当に革新的で、個人開発者でも気軽にAIを活用したPlugin開発を楽しめます。

質問やフィードバックがあれば、コメント欄でお気軽にどうぞ!


👉 HolySheep AI に登録して無料クレジットを獲得