はじめに
こんにちは、ショウです。
Difyを使って、作成した記事です!
今回、microCMS と Dify を連携するプラグインを開発しました。面白いのは、開発中に自分でコードを一行も書いていないということです。
「え、それって開発と言えるの?」と思うかもしれませんが、これが AI 時代の効率的な開発スタイルだと考えています。
この記事では、その開発プロセスと学んだことを共有します。
TL;DR
- ✅ 3つのツール実装:Get Content List / Get Content Detail / Get Full Contents
- ✅ 4言語対応:英語・中国語・ポルトガル語・日本語
- ✅ Dify SaaS 環境でテスト完了
- ✅ v0.0.1 リリース済み
ポイント:優秀な参考プロジェクトを見つけ、AI ツールを適切に使い分けることで、効率的に開発できました。
開発環境
- Dify: SaaS 版
-
プラグイン開発ツール:
dify-plugin-cli - 参考プロジェクト: dify-plugin-database(作者:hjlarry さん)
- AI ツール: ChatGPT、Claude Code、Manus
開発アプローチ
Step 1:最適な参考プロジェクトを探す
まず、dify-plugins リポジトリから、CRUD 機能を持つ高品質なプラグインを探しました。
選んだプロジェクト:dify-plugin-database
選定理由:
- 明確なコード構造(tools/provider 分離)
- 完全なツール実装(sql_execute、table_schema、text2sql、csv_query)
- 規範的な manifest.yaml 設定
- 多言語対応のテンプレート
- v0.0.6 の成熟したバージョン
Step 2:コンテキストを分離する
ここが最も重要なポイントです。
一つの AI に全てを任せると、混乱した回答が返ってきます。そこで、役割を分けました:
| AI ツール | 役割 |
|---|---|
| ChatGPT | microCMS API の理解に特化 |
| Claude Code | Dify プラグイン実装に特化 |
| Manus | GitHub での情報検索 |
# ChatGPT への質問例
「microCMS API でコンテンツ一覧を取得する方法は?」
「filters パラメータの使い方を教えて」
「レスポンスの JSON 構造は?」
ChatGPT は Dify プラグインの開発フローを知らないので、純粋な microCMS の知識だけを得られます。これが重要です。
⚠️ ハマったポイント:公式ツールをスキップした失敗
問題:最初、AI に参考プロジェクトの構造を「真似して」と指示しました。
結果:
- AI が独自のディレクトリ構造を「想像」して作成
- ファイル名や設定が Dify の規範と不一致
- デバッグ不可能な状態に…
原因:Dify プラグインには公式の CLI ツール dify plugin init があり、これを使うべきでした。
解決策:
# 正しいやり方:まず公式ツールで初期化
dify plugin init microcms
教訓:
参考プロジェクトを真似するのは正しい。でも、公式ツールチェーンは飛ばしてはいけない。まずスケルトンを生成し、その上で参考実装を取り入れる。
Step 3:実装パターンをマッピング
dify-plugin-database の実装を microCMS 向けに変換しました:
| Database Plugin | microCMS Plugin | 変更点 |
|---|---|---|
| sql_execute | get_content_list | SQL → microCMS クエリ構文 |
| table_schema | get_content_detail | テーブル構造 → コンテンツ詳細 |
| - | get_full_contents | 新規追加(バッチ取得) |
プロジェクト構成
microcms/
├── manifest.yaml # プラグイン設定
├── main.py # エントリーポイント
├── requirements.txt # 依存関係
├── provider/ # プロバイダー実装
│ ├── microcms.py
│ └── microcms.yaml
└── tools/ # ツール実装
├── get_content_list.py
├── get_content_list.yaml
├── get_content_detail.py
├── get_content_detail.yaml
├── get_full_contents.py
└── get_full_contents.yaml
技術的なポイント
1. 並行処理の最適化
# レート制限付きの並行 API 呼び出し
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# コンテンツ詳細を並行取得
futures = [executor.submit(fetch_content, id) for id in content_ids]
results = [f.result() for f in futures]
2. microCMS API の完全サポート
- 全てのクエリパラメータ対応(limit、offset、filters、fields など)
- 全てのフィルター演算子実装
- ドラフトコンテンツへのアクセス対応
3. 多言語対応
# 例:tools/get_content_list.yaml
identity:
name: get_content_list
author: suzulang
label:
en_US: Get Content List
zh_Hans: 获取内容列表
pt_BR: Obter Lista de Conteúdo
ja_JP: コンテンツ一覧取得
学んだこと
1. 研究してから実装する
- 80% の時間を「理解」に使う
- 適切な参考プロジェクトを見つけることが最重要
- dify-plugin-database は完璧な出発点だった
2. コンテキスト分離が成功の鍵
❌ 悪い例:
「microCMS と Dify を連携するプラグインを作って」
→ AI が曖昧で不正確な回答を返す
✅ 良い例:
1. ChatGPT:microCMS API のコンテキストに特化
2. Claude Code:Dify プラグイン実装に特化
3. 参考プロジェクト:ベストプラクティスのテンプレート
3. 巨人の肩に乗る
- ゼロから作らない
- 成熟したプロジェクトを参考にする
- コミュニティの規範に従う
プロジェクト統計
| 項目 | 値 |
|---|---|
| 参考プロジェクト | 1(dify-plugin-database) |
| コード行数 | 約 1,563 行(22 ファイル) |
| テスト結果 | 100% パス |
| Git コミット | 10 回 |
まとめ
この開発経験から学んだことは:
賢い開発者は全てを自分でやらない。既存のリソースを上手く活用する。
AI 時代において、開発者の価値は「コードを書く」ことから「リソースを統合する」「問題を解決する」ことへシフトしています。
正しい方法論を身につければ、半分の労力で倍の成果を得られます。
参考リンク
- microCMS 公式ドキュメント
- Dify プラグイン開発ガイド
- dify-plugin-database(hjlarry さんに感謝!)
- 本プロジェクト
最後まで読んでいただきありがとうございました!
質問やフィードバックがあれば、コメントでお知らせください 🙏