# プラグイン

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

本セクションでは、プラグインとは何か、そしてそれらがどのように開発、カスタマイズ、管理されるかを紹介します。

EMQX 6.3.0以降、プラグインフレームワークは `plugins` 機能ゲートによって制御されます。`FULL` プリセットではデフォルトで有効になっています。カスタムの `EMQX_FEATURES` リストを使用する場合は、プラグイン機能を利用するために `plugins` を含めてください。`plugins` が無効の場合、EMQXはプラグインフレームワークを起動せず、EMQXダッシュボードはプラグイン管理UIを非表示にし、`/api/v5/plugins/*` および `/api/v5/plugin_api/*` のルートは登録されません。詳細は[機能ゲート](../../get-started/deploy/feature-gates.md)をご参照ください。

## プラグインとは？

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

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

1. **リリースとしてビルドされていること** – コンパイル済みプラグインとメタデータを含む `.tar.gz` パッケージ。
2. **ダッシュボード、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. ダッシュボード、CLI、またはAPIを使ってEMQXにプラグインをインストールおよび起動する。
5. 必要に応じて設定を更新したり、停止・アンインストールを行う。

## 詳細情報

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