# ルール

EMQXは強力かつ効率的な組み込みデータ処理機能であるルールエンジンを提供しています。SQLライクな構文を活用することで、ユーザーはさまざまなソースからデータを簡単に抽出、変換、拡張できます。処理されたデータは、ルールによってトリガーされるアクション（組み込みアクションやSink/Sourceを含む）を通じて外部システムに配布または統合できます。また、処理済みデータをMQTTクライアントやデバイスに再パブリッシュすることも可能です。

ルールエンジンはEMQXのデータ統合機能の中核コンポーネントです。データ統合を用いた柔軟なビジネス統合ソリューションを提供し、ビジネス開発プロセスを簡素化し、ユーザーの利便性を向上させ、ビジネスシステムとEMQX間の結合度を低減します。詳細は[ルールエンジン](../../develop/data-integration/rules.md)をご参照ください。

ルールの作成および管理は、左メニューの **Integration** -> **Rules** をクリックして **Rules** ページにアクセスします。

## ルールの作成

ルールを作成するには、Rulesページ右上の**Create**をクリックします。また、Connectorページの既存コネクターの**Action**列にある**Create Rule**をクリックして素早くルールを作成することも可能です。

### SQL エディター

Create RuleページにはSQLエディターがあり、SQL文を用いてルールロジックを定義できます。これにより、クライアントやシステム間で交換されるデータのリアルタイムな操作（クエリ、フィルタリング、変換、拡張など）が可能です。

ルールの識別と整理のために、ルールIDと任意のノートを入力します。ルールIDは自動的に一意のものが生成されますが、任意で指定することもできます。ノート欄はルールの目的を明確にするための簡単な説明を記入できます。

SQLエディター下の**SQL Examples**をクリックすると、右側に一般的なSQL例が表示されます。以下のSQL例を参照して素早くルールを作成できます。

<img src="./assets/rule-sql.png" alt="画像" style="zoom:67%;" />

デフォルトのSQL文は `SELECT * FROM "t/#"` で、これはクライアントがトピック`t/#`にメッセージをパブリッシュした際に、ルールエンジンがそのイベント配下のすべてのデータを取得することを意味します。

`SELECT`キーワードはメッセージ内のすべてのフィールドを取得できます。例えば、現在のメッセージの`Payload`のみを取得したい場合は、`SELECT payload from "t/#"`と変更します。データは[組み込み関数](../../develop/data-integration/rule-sql-builtin-functions.md)を使って処理・変換可能です。

`FROM`キーワードの後には1つ以上のデータソースが続きます。利用可能なイベントトピックを確認するには、SQLエディター下の**Try It Out**エリアで選択可能なデータソースイベントを閲覧できます。`WHERE`キーワードを用いて条件フィルタリングを追加できます。詳細なSQL構文の使い方は[SQL構文と例](../../develop/data-integration/rule-sql-syntax.md)をご参照ください。

### Try It Out

SQL文を完成させたら、ページ下部の**Try It Out**トグルスイッチをオンにして、このエリアでルールのテストを実行できます。

SQLテストでは、**Data Source**ドロップダウンからイベントやデータソースを選択し、シミュレーション用のテストデータを入力して**Run Test**をクリックすると、右側の**Output Result**に実行結果データが表示されます。

SQL文を変更するたびにこのSQLテストでルールの出力データを検証し、ルールの正確性を確認できます。

::: tip

SQL実行時に`412`エラーコードが表示される場合、テストデータとの不一致が原因の可能性があります。データソースがSQL文に合致しない場合は、対応するイベントやデータソースの選択を促されます。更新されたデータソースイベントはテストデータに自動反映されます。

:::

シミュレーション用のデータソースは実際のシナリオと同様で、一部MQTTイベントを含みます。メッセージ部分では、以下の異なるメッセージイベントを選択してデータをシミュレートできます。

- メッセージパブリッシュ（mqttトピック）
- メッセージ配信済み（$events/message/delivered）
- メッセージアック済み（$events/message/acked）
- メッセージ破棄（$events/message/dropped）

その他のイベントでは、以下のクライアントおよびセッションイベントを選択してデータをシミュレートできます。

- クライアント接続（$events/client_connected）
- クライアント切断（$events/client_disconnected）
- クライアント connack（$events/client_connack）
- クライアント認可チェック完了（$events/client_check_authz_complete）
- クライアント認証チェック完了（$events/client_check_authn_complete）
- サブスクライブ済み（$events/session_subscribed）
- サブスクライブ解除済み（$events/session_unsubscribed）

対応するデータソースはSQLエディター内のSQL文と一致させる必要があります。メッセージイベントを利用してデータを取得する場合は、`FROM`キーワードの後に対応するイベントトピック（括弧内の内容）をSQL文に記入してください。ルールは複数イベントの利用をサポートしています。データソースやイベントの詳細は[SQLデータソースとフィールド](../../develop/data-integration/rule-sql-events-and-fields.md)をご参照ください。

テストエリアでルールを検証することも可能です。詳細なテスト手順は[Test Rule](../../develop/data-integration/rule-get-started.md#test-rule)をご覧ください。

<img src="./assets/rule-test.png" alt="画像" style="zoom:67%;" />

### アクション出力

SQL文の編集とルールのデバッグが完了し、要件を満たす出力データが得られたら、ページ右側の**Action Outputs**タブでルールがトリガーされた後に実行するアクションを選択できます。**Add Action**ボタンをクリックすると、2つの組み込みアクションおよび各種Sink/Sourceからアクションの種類を選択し、ルールの出力データをさらに処理できます。アクション作成の詳細は[アクションの追加](../../develop/data-integration/rule-get-started.md#add-action)をご参照ください。

## ルールの閲覧

ルール作成後は、ルール一覧でルールID、ルールがアクセスするデータのソース（イベント、トピック、データブリッジなど）、ルールノート、有効状態、作成日時などの基本情報を確認できます。ルールは設定、削除、有効化、無効化などの操作が可能です。アクションバーからルールの複製や修正もでき、ルールの再利用性を向上させます。

一覧上部には検索バーがあり、ルールID、トピック、有効状態、ノートを複数条件で検索できます。これにより条件に合致するルールを素早く見つけて閲覧・設定できます。なお、ルールIDとノートはあいまい検索に対応し、トピックはワイルドカード検索をサポートします。

![image](./assets/rule-list.png)

## ルール実行統計

ルール一覧ページでルールIDをクリックすると、ルール概要ページに素早く移動できます。ルール概要ページにはルールの基本的なデータ統計が含まれ、ルールの実行統計や当該ルール下のアクション実行統計が表示されます。例えば、マッチ数、通過数、失敗数、ルールの実行率、アクションの成功・失敗実行数などです。右上の**Refresh**ボタンをクリックすると、現在のルールのリアルタイム実行データ統計を確認できます。

![image](./assets/rule-overview.png)

## 設定

ルール一覧の**Action**列にある**Settings**ボタン、または**Settings**タブをクリックすると設定ページに入れます。ここにはルールの基本情報が表示され、ルール作成ページと同様の内容です。このページでルールの修正やデバッグが可能です。例えば、現在のルール下の実行アクションの変更、ルールノートの修正、SQL文の再編集などが行えます。

![image](./assets/rule-settings.png)
