0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

microCMS × Dify連携プラグインを、コードを1行も書かずに開発した話

Posted at

はじめに

こんにちは、ショウです。
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 時代において、開発者の価値は「コードを書く」ことから「リソースを統合する」「問題を解決する」ことへシフトしています。

正しい方法論を身につければ、半分の労力で倍の成果を得られます。

参考リンク


最後まで読んでいただきありがとうございました!
質問やフィードバックがあれば、コメントでお知らせください 🙏

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?