# プラグイン

EMQXのプラグインは、ユーザーがErlangを用いてブローカーのコア機能を拡張したり、カスタムロジックを統合したりするための仕組みです。このシステムは、カスタム認証、認可、ログ記録、メトリクス取得、プロトコル変換などの機能を実装するのに最適です。

本節では、プラグインとは何か、どのように開発・カスタマイズ・管理するかを紹介します。

## プラグインとは？

EMQXにおけるプラグインは、EMQXノード内で動作するErlang/OTPアプリケーションです。プラグインは、クライアント接続、メッセージパブリッシュ、認証などの事前定義されたイベントであるフックポイントを通じてEMQXコアと連携します。

EMQXで使用するためには、プラグインは以下の条件を満たす必要があります。

1. **リリースとしてビルドされていること** – コンパイル済みプラグインとメタデータを含む `.tar.gz` パッケージ。
2. **Dashboard、REST API、またはCLIを通じてインストールされること**。
3. **設定やライフサイクル操作（起動、停止、アンインストール）で管理されること**。

起動時に、プラグインは通常、自身の関数の一部をEMQXの*コールバック*として登録し、EMQXの動作を変更または拡張します。プラグインはEMQXコアや他のプラグインから独立して動作し、互いに干渉しないよう設計されています。また、インストール、起動、停止、削除の明確なプロセスに従うため、運用環境での安全かつ容易な管理が可能です。

## 主要な概念

- **フックポイント**：EMQXのワークフローにおける拡張ポイントで、プラグインがカスタムロジックを挿入できる場所。
- **コールバック**：プラグインモジュール内の関数で、フックポイントに登録されるもの。
- **設定スキーマ**：プラグイン設定の検証やEMQXダッシュボードでのUIフォームの動的生成に用いる、オプションの[Avroベースのスキーマ](https://avro.apache.org/)。

## プラグインのワークフロー概要

1. 公式の[プラグインテンプレート](https://github.com/emqx/emqx-plugin-template)を使ってプラグインを開発する。
2. 認証など、用途に合わせてロジックをカスタマイズする。
3. `make rel` コマンドでプラグインをビルドし、`.tar.gz`ファイルにパッケージングする。
4. Dashboard、CLI、またはAPIを使ってEMQXにプラグインをインストール・起動する。
5. 必要に応じて設定を更新したり、停止・アンインストールを行う。

## 詳細情報

- [**EMQXプラグインの開発**](./plugin-development.md)：公式テンプレートを使ったプラグインのゼロからの構築方法を学べます。
- [**プラグインロジックのカスタマイズ**](./plugin-example.md)：認証、認可などのフックコールバック実装例を紹介します。
- [**プラグインの管理**](./plugin-management.md)：EMQXノードやクラスター上でのプラグインのインストール、設定、起動・停止、アンインストール方法を解説します。
- [**プラグインカタログ**](./plugin-catalog.md)：データ連携、ガバナンス、アクセス制御など、すぐに利用できるプラグインを一覧できます。
