概要
(2025/07/01 追記) DifyのMarketplaceでも公開されました!
DifyのRedmine用のツールプラグインを作成してみて、簡単に作成できたので開発手順について簡単に紹介します。
今回開発したプラグインのリポジトリは下記になります。
今回作成したツールの使い方の一例としてチケット一覧を取得してループして処理することで、各チケットの要約をLLMに行わせるなどできるかなと思います。
(他にも別途Slackのツールなどを使用すればRedmineとSlackの連携なども可能かもしれません)
また公式のドキュメントも充実しており、そちらを参考にすることでより詳細な情報を得ることができます。
Difyのプラグインの種類
Difyでは以下の5種類のプラグインタイプがあります。
- モデル (Models): カスタムLLMやAIモデル
- ツール (Tools): 外部API連携や特定機能の実装
- エージェント戦略 (Agent Strategies): エージェントの行動パターンをカスタマイズ
- エクステンション (Extensions): Dify上にHTTPリクエストを処理するエンドポイントを追加
- バンドル (Bundles): 複数のプラグインのパッケージ化
今回はツール(Tools)プラグインの開発方法について記載します。
ツール(Tools)プラグインの開発方法
開発ツールのセットアップ
初期セットアップにはDify Plugin CLIをインストールする必要があります。
現在はDifyのformulaが用意されているのでbrewでインストールできます。
brew tap langgenius/dify
brew install dify
CLIツールのインストールが完了したら、下記のコマンドでDifyのプラグイン開発環境を作成します。
dify plugin init
基本的にはプロンプトに従って設定していけば大丈夫です。
認証処理
ツールの内容によっては外部のサービスの認証情報を必要とする場合があると思います。
今回作成したRedmineのツールプラグインでは、接続先やAPIキーなどの認証情報が必要です。
このような場合はプロバイダーの設定(今回作成したツールの設定例)を行うことで、下記のようにプラグインに認証処理を組み込むことができます。


公式のドキュメントとしては以下が参考になります。
ツールの入力/ロジック実装
ツールの実装はtools
ディレクトリ内にYAMLとPythonのコードをペアで作成する必要があります(今回作成した各ツールの実装例)。
ツールのYAMLファイルに概要や入力パラメータなどの情報を記載することで、下記のようにノードの入力などを設定することができます。
例えば入力パラメータの設定としては下記のようになります。
parameters:
- name: limit
type: number
min: 1
max: 100
required: false
label:
en_US: Limit
zh_Hans: 限制数量
pt_BR: Limite
ja_JP: 取得件数制限
human_description:
en_US: "Maximum number of issues to retrieve (default: 25, max: 100)"
zh_Hans: 要检索的最大问题数量(默认:25,最大:100)
pt_BR: "Número máximo de issues para recuperar (padrão: 25, máx: 100)"
ja_JP: "取得するチケットの最大数(デフォルト:25、最大:100)"
placeholder:
en_US: "25"
zh_Hans: "25"
pt_BR: "25"
ja_JP: "25"
llm_description: Maximum number of issues to retrieve (default 25, maximum 100)
form: llm
上記の設定をすることで、Pythonのコードで下記のようにパラメータを取得することができます。
class RedmineTool(Tool):
def _invoke(self, tool_parameters: dict[str, Any]) -> Generator[ToolInvokeMessage]:
limit = tool_parameters.get("limit", "25")
あとは入力に応じて処理を実装します。
ツールの出力処理
ツールの出力は下記の3種類がデフォルトで用意されています。
- text: テキスト形式の出力
- json: JSON形式の出力
-
files: ファイル出力
- ファイル出力ではDifyが自動的にファイルをダウンロードして次のワークフローに渡します
テキストやJSONはそれぞれ指定のメソッド(create_text_message()
, create_json_message()
)を呼び出すだけで設定できます。
もう少し細かいところは下記の公式ドキュメントが参考になります。
個人的にファイルのやり取りが簡単にできるところが便利だなと思いました。
今回のRedmineのツールではチケットに添付されているファイルをfiles
に出力するようにしています(実装箇所)。
そのおかげで、例えば次のフローでマルチモーダルなLLMでチケットの要約をする場合に画像の情報も簡単に渡すことができます。
プラグインの公開方法
今回詳しく紹介はしませんが、プラグインの実装が完了したら以下のコマンドでパッケージ化(.difypkg
化)します。
dify plugin package ./your_plugin_project
パッケージ化したファイルは以下の3つの方法で共有することができます。
- Dify Marketplaceへ公開
- GitHubリポジトリに公開
- ファイルをそのまま共有
セルフホストのDifyを使用していてMarketplaceで公開されていないプラグインをインストールする場合に、セキュリティ上の理由からインストール時にエラーになることがありますが設定を変更することでインストールできるようになります。
まとめ
DifyのToolsプラグイン開発は、Dify CLIツールなど環境が整えられているため比較的簡単に実装できます。
- 開発環境の構築が簡単
- 認証情報の管理がプロバイダー設定で統一
- 入力/出力処理が標準化されており実装しやすい
- ファイルのやり取りも簡単に実現可能
既存のDifyのツールのみではちょっと物足りないと感じた方は、ぜひDifyプラグイン開発に挑戦してみてください。