Difyをカスタマイズして、AWSをAIワークフローに組み込む
TL;DR
- Claude Codeを使用して、AWS SNSで通知するDifyプラグインを開発
- DifyプラグインのAI駆動開発の方法
- 今すぐSNS通知のプラグインがほしい方にもプラグイン配布あり
紹介
- 著者:大和総研 井澤
- 2025 Japan AWS Jr. Champions 夏のQiitaリレー 最終回です!
- 2025 Japan AWS Jr. Champions, 2024 - 2025 Japan AWS All Certifications Engineers
- GitHub:
Difyプラグインへ
Difyは、AWSで使用可能な、ノーコード・ローコードAIワークフローツールです。
最近では、多くの日本企業で採用されている傾向もあり、ご存じの方も多いと思います。
提供形態
Difyはコミュニティ版(OSS)、SaaS版に加え、クラウドサービス上での利用という提供形態があります。
プラグイン
ノーコードAIワークフローツール自体は、他の製品もあるため、Difyの専売特許というほどではありません。ただ、使いやすいUI/UXや、モデルプロバイダーに制約がない点、便利なコンポーネントをネイティブサポートする点など、アプリ開発やワークフロー作成の様々な箇所で利便性を感じる方も多いと思います。とりわけ、Difyがプラグイン方式を採用しているため、公式やコミュニティにより開発された非常に便利なツールなどを利用でき、LLMがワークフローで対応できる領域を大きく広げています。
Difyで社内リソースに接続
前述のようにDifyは、SaaSやOSS、クラウドサービスでのライセンス提供がありますが、OSS版やAWS Market Placeでの利用の場合、閉域網的に企業NWで利用することが可能であり、オンプレミスに配置されたGPUでのローカルモデルを活用(以下ポスト参考)したり、社内サーバとの接続、もしくは直通線・VPNで接続されたAWSリソースへのアクセスがシナリオとして浮かんでくるでしょう。既存の企業NW内のデータソースをAIワークフローで簡単に利用できることは、より多くの従業員のAI活用を推進し、AI活用のための開発工数を節約し、AIの業務適用や応用といった、より価値の高いタスクに時間を充てることができるようになるのを意味します。
We've just added @OLLAMA to Dify in the new update, v0.4.6.
— Dify (@dify_ai) January 12, 2024
It's super easy now to set up models like Llama 2 and Code Llama by this local inference framework.
Dify supports integrating LLM and Text Embedding capabilities.
📑Check our docs for guidance:https://t.co/LElkRcrFB6 pic.twitter.com/pV4CZYg1je
プラグイン開発
Difyを実際に様々な業務に活用する場合、既存のプラグインでは対応できない場面も多々あるでしょう。Dify公式からは、AWSのプラグインが公開されていますし、AWS LabのMCPサーバとMCPプラグインを併用すれば、LLMからAWSを操作することも全く困難ではありません。しかし、まだそれらでサポートされていない機能や使用方法が必要となった場合や、企業独自の仕様に対して対応する必要が出てきた場合、プラグイン開発の出番となります。実際にDifyワークフロー作成画面で、AWSやオンプレミスのリソースが一元的に、そして自由に、ワークフローに次々と組み込まれるのを想像すると、いかにプラグイン開発が企業でのAI活用のユースケースを広げるか理解できると思います。
プラグイン開発の課題
プラグイン開発の可能性にも関わらず、開発には多かれ少なかれ、コーディングの知識や環境整備の知識を必要とします。これは、Difyがノーコード・ローコードツールであることを考慮すれば、少し厄介な障壁でしょう。
現代的な解決策
そこで、今の時代の人々に与えられている強力なツールを使用します。Claude Codeは、IDEでの開発をほとんど自動的に行ってくれますし、チャットインターフェイスでの指示に加え、添付ファイルでの文脈の充実、そして、何よりも魅力的な、自律的なコーディングに優れています。最新モデルのClaude Opus 4.1は、ソフトウェア開発においても優れた性能を発揮することが期待できます。
AWSとの統合という観点では、Amazon Q Developerも最適な解決策だと言えます。Amazon Q Developerは、Claude Sonnet 4などを使用し、開発環境からAWS環境へのデプロイまでを一貫して、エージェンティックに行う非常に便利なツールです。また、料金体系についても、Claude Max Planのように高額ではなく、必要な場合には従量課金で使い続けることができるという観点で、検討すべき製品でしょう。
今回は、Claude Codeを選択して、主要なコーディングのタスクは、Claudeに任せることにします。プラグイン開発者が知っておくべきことは、Difyプラグインの開発環境の整備方法と、開発サイクルだけです。
開発するプラグイン
![]() |
AWS Diagram MCP Serverで作成 |
https://awslabs.github.io/mcp/servers/aws-diagram-mcp-server/ |
※ あくまで上図は一つの使用方法を表したもので、任意のDifyプラットフォームでSNSを使用できるようにするプラグインの開発を目指します。
開発環境の整備
今回の開発では、AIにより自由度の高い許可を与えて開発するため、開発サーバをEC2インスタンスなどで新規作成することを推奨します。
Difyの開発には、dify-plugin-daemon
とPython(>=3.12)が必要です。それぞれ、インストールしていきましょう。
Dify CLIの導入
ここでは、Dify CLIの導入方法として、より簡便なbrew
を選択します。
以下を実行します:
brew tap langgenius/dify
brew install dify
バージョンについて
brew --version
Homebrew 4.6.7
dify version
v0.2.0
Pythonの導入
開発者に普及しており、より洗練された方式として、uv
によるPython環境の構築を行います。具体的なコマンドなどについては、後ほどの内容で説明しています。
バージョンについて
uv --version
uv 0.8.13
Claude Codeの導入
Claude Codeを以下のスクリプトで導入します。
# 安定版をインストール(デフォルト)
curl -fsSL https://claude.ai/install.sh | bash
Claude CodeをAnthropicではなく、AWS Bedrockで使用する場合は、以下の指示に従って設定が必要です。
バージョンについて
claude --version
1.0.80 (Claude Code)
AWS 環境の整備
Difyで使用するためのSNSトピックとそれにアクセスするIAMユーザーを作成していきます。
SNSの作成
トピック作成
AWSのコンソールにアクセスし、SNSトピックの作成画面へ移ります。
以下のようにスタンダードタイプのトピックを作成し、名前、表示名を設定します。
それ以外はデフォルト値で検証を行います。
実際の設定値は、社内環境や提供先の要件に則したものとしてください
サブスクリプション作成
作成後、すぐ下の画面にサブスクリプションの作成ボタンが確認できます。
以下の要領でサブスクリプションを作成します。
- 選択されていない場合は、トピックARNで、先程作成したトピックを選択します。
- プロトコルは、Eメールを選択します。
- エンドポイントは、ご自身の検証で使用したいメールアドレスを入力します。
サブスクリプションの作成後、ご自身の指定したメールアドレスに、検証メールが届きますので、URLをクリックして承認しましょう。
※ SNSからのメールは、迷惑メールとして振り分けられる可能性がありますので、届かない場合はそこも確認しておくといいでしょう。
作成したトピックの個別リソースの画面で、サブスクリプションが 「✓確認済み」となれば、SNSの用意は完了です。
IAMユーザーの作成
IAMのサービス画面に行き、IAMユーザーの作成画面に入ります。
IAMユーザーは、SNSのアクセスを許可するためのものなので、「AWS マネジメントコンソールへのユーザーアクセスを提供する - オプション」は無効化(チェックを外す)します。
許可の設定では、簡便のため、「AmazonSNSFullAccess」を付与します。
実際の設定値は、社内環境や提供先の要件に則したものとしてください
認証情報の取得
このユーザーのアクセスキーなどを後ほど取得します。
プラグインプロジェクトの作成
ここからは、本格的にDifyプラグイン開発を進めていきます。
プラグイン開発のチュートリアル自体、Difyから日本語でドキュメントが提供されているため、この記事も概ねそれに即してはいますが、Dify以外の環境のセットアップなどを網羅している点で、より幅広く案内しています。そうはいえども、実際のDifyプラグイン開発には、ある程度のプラグイン開発仕様への理解が役立つので、ぜひ目を通しておくことを推奨します。
プラグインプロジェクトの初期化
開発するディレクトリに移り、以下のコマンドで、プラグインプロジェクトを初期化します。
dify plugin init
インタラクティブに以下の事項を聞かれるので、入力します。
- Plugin name: プラグインの一意の識別子。
例:aws-sns-plugin
制約: 長さ 1~128 文字、小文字の英数字、ハイフン(-)、アンダースコア(_)のみ使用可能。 - Author: プラグイン作者の識別子。
例:beginnersguide138
制約: 長さ 1~64 文字、小文字の英数字、ハイフン(-)、アンダースコア(_)のみ使用可能。 - Description: プラグイン機能の簡単な説明。
例:A plugin that connects to AWS SNS Topic.
※ その他に、リポジトリURLなども聞かれますが、オプショナルなので、スキップできます。 - 開発言語の選択: Select language と表示されたら、
python
を選択してください。 - プラグインタイプの選択: Select plugin type と表示されたら、このチュートリアルでは
tool
を選択してください。 - 追加機能の選択: 次に、プロバイダー認証、永続ストレージなどの追加機能が必要かどうか尋ねられます。今回の開発では、これらは一時的に不要なので、成功メッセージが表示されるまで Enter キー を押してすべてのオプションをスキップできます。
作成成功の確認: ターミナルに以下のような情報が出力されたら、プラグインプロジェクトは正常に作成されています:
[INFO]plugin aws-sns-plugin created successfully, you can refer to 'aws-sns-plugin/GUIDE.md' for more information about how to develop it
参考:
Python仮想環境の作成
cd aws-sns-plugin # 作成されたDifyプラグインディレクトリに移動
uv init --python 3.13 # uv プロジェクトを初期化
実行後、以下のように表示されます。
Initialized project `dify-plugin-aws-sns`
次に、仮想環境の作成などを行います。
uv sync
実行後、以下のように表示されます。
Using CPython 3.13.2
Creating virtual environment at: .venv
Resolved 1 package in 7ms
Audited in 0.00ms
(仮想環境がアクティベーションされない場合、以下を実行します)
. .venv/bin/activate
実行後、以下のようにプロンプトが表示されます。
(dify-plugin-aws-sns)ec2-user@server:~/plugin$
依存関係を設定します。
uv add dify_plugin boto3 botocore
依存関係がいっぱい解決されます
Resolved 49 packages in 247ms
Prepared 8 packages in 222ms
Installed 45 packages in 102ms
+ annotated-types==0.7.0
+ anyio==4.10.0
+ blinker==1.9.0
+ boto3==1.40.21
+ botocore==1.40.21
+ certifi==2025.8.3
+ charset-normalizer==3.4.3
+ click==8.2.1
+ dify-plugin==0.4.4
+ dpkt==1.9.8
+ flask==3.0.3
+ gevent==25.5.1
+ greenlet==3.2.4
+ h11==0.16.0
+ httpcore==1.0.9
+ httpx==0.28.1
+ idna==3.10
+ itsdangerous==2.2.0
+ jinja2==3.1.6
+ jmespath==1.0.1
+ markupsafe==3.0.2
+ multidict==6.6.4
+ packaging==25.0
+ propcache==0.3.2
+ pydantic==2.11.7
+ pydantic-core==2.33.2
+ pydantic-settings==2.10.1
+ python-dateutil==2.9.0.post0
+ python-dotenv==1.1.1
+ pyyaml==6.0.2
+ regex==2025.8.29
+ requests==2.32.5
+ s3transfer==0.13.1
+ setuptools==80.9.0
+ six==1.17.0
+ sniffio==1.3.1
+ socksio==1.0.0
+ tiktoken==0.8.0
+ typing-extensions==4.15.0
+ typing-inspection==0.4.1
+ urllib3==2.5.0
+ werkzeug==3.0.6
+ yarl==1.20.1
+ zope-event==5.1.1
+ zope-interface==7.2
プラグインの開発
Claudeへのプラグイン開発指示の作成
-
dify-plugin-development.md
などの名前で、空ファイルを作成します。 - 以下のリンクで、エージェントへの指示内容をコピーします(コピーボタンがあります)
-
dify-plugin-development.md
を開いて、ペーストします。
CLAUDE.mdの編集
CLAUDE.md
を作成しましょう。このファイルは、Claude Codeで会話を始める時に参照されます。
Claudeが開発環境で操作する時に気をつけるべき点をまとめておくと便利です。
今回の例では、以下のようなものを作成します。
# UVコマンド
- `python` や `python3` の代わりに `uv run python` を使用してください。
- `pip install` や `pip3 install` の代わりに `uv add <モジュール名>` を使用してください。
# コードスタイル
- リンターとフォーマッターのルールを遵守し、すべての警告やエラーを修正してください。
# Difyプラグイン開発
- プロジェクトの背景やガイドラインを理解するために `dify-plugin-development.md` を読んでください。
- 曖昧な点がある場合や、何か質問がある場合は、このドキュメントを参照してください。
Claudeに開発作業を依頼
claude
とコマンドで実行すれば、✻ Welcome to Claude Code!
と歓迎してくれます。
Claudeの挙動に自信のある方は、以下コマンドで起動してみてください。
AWS
もAnthropic
も、Dify
も、井澤
も発生した損害について責任を負いませんが、恐ろしい速度でAI駆動開発ができます。(今回は監視のもと、こちらで実行します)
claude --dangerously-skip-permissions
なお、このモードでの推奨は、インターネットから隔離されたコンテナ内での実行です。
→ https://www.anthropic.com/engineering/claude-code-best-practices
実際に指示した内容
/model
opusを選択
> @GUIDE.md @dify-plugin-development.md\
AWS SNSを使用して、メッセージをメール通知する、Difyプラグインのツールを開発してください。ツールは、Difyの環境変数からIAMの認証情報を取得します。
※ GUIDE.md
は、Difyプラグインプロジェクトの初期化時に自動作成
Claudeが作成したタスクリスト
● DifyプラグインでAWS
SNSを使用したメール通知ツールを開発します。まず、現在のプロジェクト構造を確認し、その後実装を進めていきます。
● Update Todos
⎿ ☐ プロジェクト構造の確認と現状把握
☐ AWS SNS認証情報設定の実装(provider/)
☐ SNSメール送信ツールの実装(tools/)
☐ 依存関係の追加(requirements.txt)
☐ manifest.yamlの更新
☐ テストとデバッグ
☐ 依存関係の追加(requirements.txt)
とありますね。
uv の指示が不足していたようです...
プラグインパッケージにrequirements.txt
は必須です。Claudeが正しかったです。(以下リンクを参考)
以下のコマンドで、uv を依存関係の管理に使用しつつ、requirements.txtを生成できます。
uv pip freeze > requirements.txt
requirements.txtについて
uv pip freezeについて
実行・デバッグ
300秒ほどでOpusはプラグインを開発し終えたので、以下の手順で、デバッグを行っていきます。
.envファイル編集
cp .env.example .env
生成した.envファイルを編集し、Difyプラットフォームでのデバッグを実行します。
クラウドプラットフォーム(https://cloud.dify.ai/
)でテストする場合、以下の通りです。
INSTALL_METHOD=remote
REMOTE_INSTALL_URL=debug.dify.ai:5003
REMOTE_INSTALL_PORT=5003
REMOTE_INSTALL_KEY=*******************
プラグイン実行
次のコマンドを実行すると、デバッグが開始されます。
uv run python -m main
Difyプラットフォームでも、プラグインのデバッグが可能になりますので、スタジオなどで実際に使用してみましょう。
今回のDifyプラグインでは、環境変数に認証情報を入力します。
プラグインでの適切な設定ができていれば、以下のように、APIキー認証設定というボタンなどが表示されます。
IAM ユーザーのアクセスキーとシークレットアクセスキーを発行し、Difyで安全に保管します。
ワークフローでプラグインを使用してみましょう。
※ エラーが発生する場合、開発環境のターミナルに出力されています。
今回の目的である、「DifyからSNSを使用して、メール通知する」が達成されました!
実行・デバッグ
プラグインの配布など
cd .. # プラグインディレクトリの一つ上へ移動
dify plugin package path_to_project
このコマンド実行後、.difypkg
ファイルが作成されます。このファイルは直接Difyプラグインとしてインストールできます。
GitHubで配布する場合も、リリースし、このファイルをアップロードします。
今回作成したプラグインに関しても、以下からインストールできます。
振り返り
- Difyプラグイン開発は、AI駆動開発向けにプロンプトも用意されており、コーディングエージェントを使用すれば、比較的容易に開発できる。
- 初回のデバッグ開始は5分ほどででき、リリースも数時間で完了。
- ただし、Difyプラグインの仕様への理解は必須で、各自ドキュメントを読んでおく必要はある。
- 状況を正確に伝えれば、Claudeがエラーの原因を推測してくれるが、ドキュメントを人間が理解しておくと非常に心強い。
- 環境整備や開発サイクルには大きな障壁はなく、整備されている印象。
- 簡単な実行コマンドでデバッグでき、
dify
コマンドでパッケージまでできる。 - Dify画面からの読み込みもGitHubや.difypkgファイルのオプションもあり、企業内でのカスタマイズ的な開発にも適していると感じた。
- 簡単な実行コマンドでデバッグでき、
-
AWS SNSにパブリッシュできれば、あとはAWSで好き放題できるので、可能性が一気に広がる!!
- SNS → Lambda
- SNS → SQS
- SNS → システム
- ...
他の記事など紹介
AWS Bedrock Converse APIの使用方法を通じて、LLMアプリケーションの開発を紹介しています。AWS Community記事の翻訳+α なので、内容も充実しており、ハンズオンにも適しています。
個人的にブラウザ使用の検証も行っています。
最近では、フルスタックのローカルRAGチャットアプリケーションを24時間でAI駆動開発した話をまとめました。こちらも、パブリックリポジトリとして公開しており、誰でも利用できますので、ぜひお試しください。
記事は以上になります。
非常にボリューミーな記事でしたが、最後までお読みくださった方、大変ありがとうございました。
AIアプリ開発、Difyプラグイン開発の一助となればと思い、記事を公開します。
引き続き、Jr. Championsの貢献にご期待ください!