プラグインシステムの概要
N.E.K.O. のプラグインシステムは、プロセス隔離と非同期 IPC に基づく Python プラグインフレームワークです。package type は、製品機能向けの Plugin と外部プロトコルブリッジ向けの Adapter の 2 種類です。旧 Extension package type は削除され、PluginRouter は通常 Plugin 内部でのみ利用できます。
アーキテクチャ
┌────────────────────────────────────────────────────┐
│ Main Process (Host) │
│ ┌──────────────────────────────────────────────┐ │
│ │ Plugin Host (core/) │ │
│ │ - プラグインライフサイクル管理 │ │
│ │ - バスシステム(メモリ、イベント、メッセージ)│ │
│ │ - ZMQ IPC トランスポート │ │
│ └──────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Plugin Server (server/) │ │
│ │ - HTTP API エンドポイント (FastAPI) │ │
│ │ - プラグインレジストリ │ │
│ │ - メッセージキュー │ │
│ └──────────────────────────────────────────────┘ │
└────────────────────┬───────────────────────────────┘
│ ZMQ IPC
┌──────────────┼──────────────┐
▼ ▼ ▼
Plugin A Plugin B Adapter D
(プロセス) (プロセス) (プロセス)パッケージ種別
| パラダイム | インポート元 | ユースケース | 実行方法 |
|---|---|---|---|
| Plugin | plugin.sdk.plugin | 独立した機能(検索、リマインダーなど) | 別プロセス |
| Adapter | plugin.sdk.adapter | 外部プロトコル(MCP、NoneBot)を内部プラグイン呼び出しにブリッジ | ゲートウェイパイプライン付き別プロセス |
どれを使うべきか?
- 「新しいスタンドアロン機能を追加したい」 → Plugin を使用
- 「既存機能の周辺にコマンドを追加したい」 → 通常の Plugin を使う。host を所有しコードが大きい場合は host 内で
PluginRouterを使う - 「MCP/NoneBot/外部プロトコルの呼び出しを受け付けてプラグインにルーティングしたい」 → Adapter を使用
Plugin から始めてください。旧 Extension は Router を所有する Plugin に統合するか、独立した Plugin に変換します。
開発を始める
まずプラグイン開発入門ガイドでディレクトリ構成と制作の流れを確認してください。その後、クイックスタートに沿って作成し、実装中はプラグイン機能と SDK リファレンスを参照します。
クイックリンク
- プラグイン開発入門ガイド — プラグインの構成と、最初のプラグインを作る流れを理解する
- クイックスタート — 手順に沿って最初のプラグインを作成
- プラグインを公開 — GitHub へ upload し、審査提出と新 version の公開を行う
- v0.9 移行 — 削除済み API と正確な移行先
- SDK リファレンス — ベースクラス、コンテキスト API、Result 型
- デコレーター — 利用可能なすべてのデコレーター
- サンプル — 完全に動作するサンプル
- Adapter と並行処理 — Adapter ゲートウェイ、非同期エントリー、スレッドセーフティ
- LLM ツール呼び出し — LLM が会話中に呼び出せるツールをプラグインから登録する
- ベストプラクティス — エラーハンドリング、テスト、コード構成
