概要
クエリルール(フィルタ)は、トリガーが成立したときにアクションを実行するかどうかを判定する条件式です。トピックが持つフィールド(震度、対象市町村、警報種別など)に対する条件を組み合わせて定義します。
ルールの基本形
1つのルールは「フィールド・演算子・値」の3点セットです。
例:
最大震度≥5弱
ルールは AND / OR で組み合わせられ、ルールセットの入れ子と NOT(否定)も使えるため、複雑な条件も表現できます。
使える演算子
| 分類 | 演算子 |
|---|---|
| 比較 | = ≠ > ≥ < ≤ |
| 集合 | IN(いずれかに一致) / NOT IN |
| 範囲 | BETWEEN / NOT BETWEEN |
| 文字列 | CONTAINS / DOES NOT CONTAIN / STARTS WITH / ENDS WITH / LIKE |
| 存在 | EXISTS / NOT EXISTS / IS NULL / IS NOT NULL(値の指定は不要) |
値の指定方法
固定値のほかに、次の指定ができます。
| 指定方法 | 説明 | 例 |
|---|---|---|
| 地域指定 | 地域を階層から選択して指定(後述) | 対象市町村 IN(千代田区、港区) |
| 登録拠点の参照 | 組織に登録した拠点の地域コードを参照。拠点を追加すると条件も自動的に追従します | 対象市町村 IN(登録拠点) |
| 他フィールドとの比較 | 同じ電文内の別フィールドの値と比較 | — |
地域指定の階層
地域は市町村を1つずつ列挙するだけでなく、階層の任意の単位で選択できます。
- 全国
- 都道府県(例: 東京都)
- 市町村等をまとめた地域(例: 23区西部、23区東部、多摩北部、多摩南部、多摩西部、大島、新島、三宅島、八丈島、小笠原諸島)
- 市町村等(例: 千代田区、港区、八丈町、青ヶ島村)
上位の単位(全国・都道府県・まとめた地域)で指定しておくと、配下の市町村の合併や区域の分割などの変更に自動的に追従します。個別の市町村を列挙した場合はその市町村のみが対象になるため、広い範囲を意図する条件は上位の単位での指定を推奨します。
地域を固定値で列挙すると、拠点の開設・移転のたびにワークフローの修正が必要になります。「登録拠点」を参照しておけば、資産管理側で拠点を更新するだけで全ワークフローに反映されます。
スコープ — 「同じ地域の行」で条件を評価する
スコープは、クエリルールの中で最も重要かつ間違えやすい概念です。順を追って説明します。
スコープを指定しない場合の動作
地震情報の電文には、複数の地域の震度が一覧(配列)として含まれています。
| 地域 | 最大震度 |
|---|---|
| 茨城県南部 | 震度5弱 |
| 埼玉県南部 | 震度4 |
| 東京都千代田区 | 震度2 |
ここで、スコープを使わずに次の2つの条件を AND で並べたとします。
最大震度IN震度5弱,震度5弱以上未入電,震度5強,震度6弱,震度6強,震度7対象市町村IN千代田区
それぞれの条件は電文全体に対して独立に評価されます。つまり「電文のどこかに震度5弱以上の地域がある」かつ「電文のどこかに千代田区が含まれる」で成立してしまいます。上の例では、千代田区は震度2なのにワークフローが起動します。
スコープを使うと
スコープは「この条件は、同じ行(配列の同じ要素)の中で評価する」という指定です。
スコープ: 地域ごとの震度一覧 のうち
対象市町村IN千代田区の行について 条件:最大震度IN震度5弱,震度5弱以上未入電,震度5強,震度6弱,震度6強,震度7
とすると、「千代田区の行の震度が5弱以上」という本来の意図どおりの条件になります。上の例の電文では起動しません。
使い分けの目安
| 意図 | 書き方 |
|---|---|
| 全国で震度6弱以上が発生した場合に通知(全社の情報収集) | スコープ不要。最大震度 IN 震度6弱,震度6強,震度7 のみ |
| 自拠点の市町村で震度5弱以上の場合に初動を起動 | スコープ必須。拠点の地域で行を絞り、その行の震度を判定 |
「地域の条件」と「強度・レベルの条件」を1つのワークフローで組み合わせる場合は、原則としてスコープが必要です。スコープなしの AND では、遠方の強い揺れ+自拠点の弱い揺れの組み合わせで意図しない起動が発生します。逆に、この誤起動が実際に起きた場合は、まずスコープの設定を確認します。

