Difyは、ローコードでAIアプリケーションを構築できる便利なプラットフォームです。しかし、標準機能だけでは足りないこともありますよね。そんなときに活躍するのがPlugin System(プラグインシステム)です。
この記事は、プログラミング経験が全くない方を対象に、プラグインを使ってDifyの機能を拡張する方法を説明します。難しい言葉は避け、一步一步(少しずつ)一緒に見ていきましょう。
Plugin(プラグイン)とは何か?
まず、プラグインという言葉の意味を理解しましょう。
プラグインは、英语では「差し込み工具」や「拡張機能」という意味があります。ITの世界では、あるシステムに新しい機能を追加できる小さなプログラムのことを言います。
例えるならスマートフォンのアプリのようなものです。スマホ自体にも基本的な機能がありますが、CameraCameraカメラアプリを入れると写真が撮れるようになりますよね?Difyのプラグインも、これと同じ考え方です。
なぜHolySheep AIを使うのか?
DifyでAIモデルを動かすには、APIという仕組みが必要です。私は実際に複数のAIサービスを試しましたが、HolySheep AIが最もコストパフォーマンスに優れています。
HolySheep AIの主なメリット:
- 為替レートが¥1=$1(通常の¥7.3=$1と比較して85%節約)
- WeChat Pay / Alipay対応で日本人でも使いやすい
- 応答速度が50ミリ秒未満(体感では一瞬)
- 登録すると無料クレジット付き
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種類の拡張 가능합니다:
- Tool Plugin(ツールプラグイン):新しいAPI連携や機能追加
- Model Plugin(モデルプラグイン):新しいAIモデルの追加
- Middleware Plugin(ミドルウェアプラグイン):認証やログ記録などの基盤機能
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ダッシュボードでの操作手順:
- Difyダッシュボードにログイン
- 左メニューの「Plugins」をクリック
- 右上の「Install」ボタンをクリック
- 「Upload Plugin」から作成したフォルダを選択
- 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(ワークフロー)で使います。
- Difyダッシュボードで新規アプリケーションを作成
- 「Workflow」タイプを選択
- 左側のブロック一覧から「Tools」→「自作Plugin」を選択
- Pluginブロックをキャンバスにドラッグ
- блокの設定でWebhook URLやパラメータを入力
- 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レジストリに公開できます。公開時には:
- README.mdを作成して使い方を説明
- ライセンス(MIT、Apache 2.0など)を明記
- テストコードを必ず含める
- セキュリティ上の注意点を記載
まとめ
今回はDifyのPlugin Systemについて、以下の内容を学びました:
- PluginはDifyに新機能を追加する拡張機能
- Tool / Model / Middlewareの3種類がある
- manifest.yaml + Pythonコードで作成可能
- HolySheep AIのDeepSeek V3.2($0.42/MTok)を活用すれば低コストでAI機能を実現
Plugin開発が初めての方は、今回のサンプルコードをベースに少しずつカスタマイズしてみてください。、エラー解決のセクションをヒントにいただければ、独学でも必ず動くPluginが作れます。
APIコスト削減を考えている方は、ぜひHolySheep AIの無料クレジットを試してみてください。¥1=$1の為替レートは本当に革新的で、個人開発者でも気軽にAIを活用したPlugin開発を楽しめます。
質問やフィードバックがあれば、コメント欄でお気軽にどうぞ!
👉 HolySheep AI に登録して無料クレジットを獲得