switchノード¶
概要¶
switchノードは、受け取ったデータの内容に応じて、処理の流れを分岐するためのノードです。
ロボシュタインのフローでは、アラート内容、ステータスコード、件名、本文、処理結果などをもとに、後続の処理を分けたい場合があります。
例えば、アラートレベルが「重要」の場合は電話通知へ進む、HTTPステータスコードが 200 の場合は正常処理へ進む、本文に特定の文字列が含まれる場合だけチケット登録へ進む、といった条件分岐を作成できます。

具体的な活用例(アラートレベルに応じて処理を分岐する)¶
監視アラートの内容に応じて、後続の処理を分ける例です。
フローのイメージ図¶

① 判定対象を指定する¶
switchノードでは、まず「プロパティ」に判定対象を指定します。
例:プロパティ msg.payload.text
この場合、メール本文に含まれる文字列をもとに条件分岐します。
② 条件ルールを設定する¶
次に、判定条件(ルール)を設定します。
例:
msg.payload.textに「CRITICAL」を含む → 1番目の出力msg.payload.textに「WARNING」を含む → 2番目の出力- 上記以外 → 3番目の出力
③ 条件に一致した出力へ進む¶
switchノードは、条件に一致した出力へ msg を渡します。
これにより、重要アラート、警告アラート、通常処理など、内容に応じて処理を分けることができます。
設定項目一覧¶
| 必須 | 項目名 | 説明 |
|---|---|---|
| 名前 | フローエディター上で表示されるノード名を任意で指定できます。 | |
| ◯ | プロパティ | 条件判定に使用する値(判定対象)を指定します。初期値は msg.payload です。 |
| ◯ | ルール | 判定条件を設定します。ルールごとに出力先が作成されます。「追加」ボタンでルールを増やせます。 |
| ◯ | 判定方法 | ルール一覧の下のプルダウンで、「全ての条件を適用」(一致したすべてのルールの出力へ渡す)か、「最初に合致した条件で終了」(最初に一致したルールの出力にだけ渡す)かを選択します。 |
| メッセージ列の補正 | 分割されたメッセージ列を扱う場合に使用します。通常は必要な場合のみ有効にします。 |
プロパティ(判定対象)について¶
プロパティでは、どの値をもとに条件分岐するかを指定します。
メール受信ノードから受け取った内容を判定する場合、まずは以下の指定を確認してください。
| 指定例 | 内容 |
|---|---|
msg.payload |
メール受信ノードから渡された主なデータを判定対象にします。 |
msg.payload.text |
メール本文など、payload 内の text を判定対象にします。 |
msg.payload.subject |
メール件名など、payload 内の subject を判定対象にします。 |
例えば、メール本文に含まれる文字列で分岐する場合はプロパティに msg.payload.text を、メール件名に含まれる文字列で分岐する場合は msg.payload.subject を指定します。
ただし、前のノードから渡されるデータの形式によって、本文や件名が格納される場所が異なる場合があります。 判定対象が分からない場合は、switchノードの前にdebugノードを接続し、実際にどのプロパティに値が入っているか確認してください。

デバッグタブでは、msg の構造を確認できます。

確認後、メール本文が msg.payload.text に入っていれば、switchノードのプロパティに msg.payload.text を指定します。メール件名が msg.payload.subject に入っていれば、msg.payload.subject を指定します。
ルールについて¶
ルールでは、判定対象の値に対して、どの条件に一致したらどの出力へ進むかを設定します。 switchノードでは、1つのルールが1つの出力に対応します。
例えば、ルールを3つ設定すると、switchノードの出力も3つになります。
- ルール1 → 1番目の出力
- ルール2 → 2番目の出力
- ルール3 → 3番目の出力
主な条件¶
switchノードでは、以下のような条件を使用できます。
| 条件 | 内容 |
|---|---|
| == | 指定した値と等しい場合に一致します。 |
| != | 指定した値と等しくない場合に一致します。 |
| < | 指定した値より小さい場合に一致します。 |
| <= | 指定した値以下の場合に一致します。 |
| > | 指定した値より大きい場合に一致します。 |
| >= | 指定した値以上の場合に一致します。 |
| キーを含む | オブジェクトに指定したキーが含まれる場合に一致します。 |
| 範囲内である | 指定した2つの値の間にある場合に一致します。 |
| 要素に含む | 指定した文字列を含む場合に一致します。大文字・小文字は区別されます。 |
| 正規表現にマッチ | 正規表現に一致する場合に一致します。「大文字、小文字を区別しない」を選択できます。 |
| trueである | 値が true の場合に一致します。 |
| falseである | 値が false の場合に一致します。 |
| nullである | 値が存在しない、または null の場合に一致します。 |
| nullでない | 値が存在し、null ではない場合に一致します。 |
| 指定型である | 文字列、数値、真偽値、配列、オブジェクトなどの型で判定します。 |
| 空である | 文字列、配列、オブジェクトなどが空の場合に一致します。 |
| 空でない | 文字列、配列、オブジェクトなどが空ではない場合に一致します。 |
| JSONata式 | JSONata式の結果で判定します。 |
| その他 | それまでの条件に一致しなかった場合に一致します。 |
このほか、メッセージ列を扱うための「先頭要素である」「指定添字範囲要素である」「末尾要素である」があります。
通常の分岐では、まず ==、要素に含む、範囲内である、その他 を使うことが多いです。
判定方法について¶
ルール一覧の下のプルダウンで、複数のルールに一致した場合の動作を選択します。
| 判定方法 | 動作 |
|---|---|
| 全ての条件を適用 | 一致したすべてのルールの出力へ msg を渡します。 |
| 最初に合致した条件で終了 | 上から順に判定し、最初に一致したルールの出力にだけ msg を渡します。 |
例えば、ルール1「>= 90」、ルール2「>= 70」の場合、値が 95 だと両方のルールに一致します。 「全ての条件を適用」では1番目と2番目の両方の出力へ渡され、「最初に合致した条件で終了」では1番目の出力にだけ渡されます。
その他について¶
「その他」は、上に設定したどの条件にも一致しなかった場合に使用します。
例えば、以下のように設定できます。
- ルール1:要素に含む CRITICAL
- ルール2:要素に含む WARNING
- ルール3:その他
この場合、CRITICAL にも WARNING にも一致しなかったデータは、3番目の出力へ渡されます。 想定外の値を受けた場合の処理を作るために、最後に「その他」を設定しておくと安全です。
正規表現について¶
正規表現を使用すると、文字列のパターンで条件を判定できます。 例えば、サーバー名やIPアドレス、特定の形式の文字列を判定したい場合に使用します。
例:server[0-9]+
この条件では、server01 や server123 のような文字列に一致します。
「大文字、小文字を区別しない」にチェックを入れると、例えば CRITICAL という条件で critical や Critical にも一致させることができます。
正規表現は便利ですが、条件が複雑になりすぎると分かりにくくなるため、必要な場合のみ使用してください。
利用例¶
例1:HTTPステータスコードで分岐する¶
http requestノードの実行結果をもとに、正常・異常を分岐する例です。

設定例:
- プロパティ:
msg.statusCode - ルール1:== 200
- ルール2:>= 400
- ルール3:その他
この構成にすると、HTTPステータスコードに応じて、正常処理、エラー処理、その他の処理へ分岐できます。
例2:メール本文に含まれる文字列で分岐する¶
監視アラートメールの本文に含まれる文字列をもとに分岐する例です。

設定例:
- プロパティ:
msg.payload.text - ルール1:要素に含む CRITICAL
- ルール2:要素に含む WARNING
- ルール3:その他
重要アラート、警告アラート、その他のアラートで処理を分けられます。
例3:処理結果の有無で分岐する¶
前段のノードで必要な値が取得できたかどうかを判定する例です。

設定例:
- プロパティ:
msg.payload.result - ルール1:nullでない
- ルール2:その他
値が取得できた場合と、取得できなかった場合で処理を分けられます。
例4:数値の範囲で分岐する¶
CPU使用率やディスク使用率など、数値をもとに分岐する例です。

設定例:
- プロパティ:
msg.payload.cpu - ルール1:>= 90
- ルール2:>= 70
- ルール3:その他
- 判定方法:最初に合致した条件で終了
この場合、90%以上は重要、70%以上は警告、それ以外は正常のように分岐できます。 「全ての条件を適用」のままだと、95% のときに1番目と2番目の両方へ渡されてしまうため、このように優先順位がある場合は「最初に合致した条件で終了」を選択してください。
注意点¶
判定対象の指定ミスに注意する¶
msg.payload.text を判定したいのに msg.payload を指定している場合、想定どおりに分岐しないことがあります。
必要に応じて、switchノードの前にdebugノードを接続し、判定対象の値がどこに入っているか確認してください。
文字列と数値の違いに注意する¶
"100" のような文字列と、100 のような数値では、比較結果が想定と異なる場合があります。
数値で大小比較を行う場合は、ルールの値の種類が「数値」になっているか確認してください。
大文字・小文字、空白、改行に注意する¶
文字列を比較する場合、大文字・小文字、前後の空白、改行などにより、条件に一致しない場合があります。
例えば「要素に含む CRITICAL」は、critical には一致しません。大文字・小文字を区別したくない場合は、「正規表現にマッチ」で「大文字、小文字を区別しない」にチェックを入れてください。
メール本文や外部APIのレスポンスを判定する場合は、実際の値を確認してから条件を設定してください。
その他を設定して想定外の値を拾う¶
条件に一致しないデータが発生した場合に備えて、最後に「その他」を設定しておくと、想定外の値を確認しやすくなります。 特に、外部システムやメール本文など、入力内容が変わる可能性がある場合は、その他側にdebugノードや通知処理を接続しておくと便利です。
関連ノード¶
- debugノード:switchノードの前後で判定値や分岐結果を確認する場合に使用します。
- changeノード:switchノードで判定しやすいように値を整える場合に使用します。
- functionノード:switchノードでは表現しづらい複雑な判定を行う場合に使用します。
- templateノード:分岐後に通知文や本文を作成する場合に使用します。
- http requestノード:HTTPステータスコードやAPIレスポンスを判定する場合に組み合わせます。
- catchノード:エラー検知後にエラー内容で分岐する場合に組み合わせます。
まとめ¶
switchノードは、受け取ったデータの内容に応じて、後続処理を分岐するためのノードです。
msg.payload、msg.statusCode、msg.payload.text などを判定対象にして、値の一致、大小比較、文字列の含有、正規表現、null判定、型判定、その他などの条件を設定できます。
複数のルールを設定すると、それぞれに対応する出力が作成されます。
1つの出力だけに進めたい場合は「最初に合致した条件で終了」、複数の条件に同時に一致させたい場合は「全ての条件を適用」を使用します。
フロー作成時は、判定対象の値、ルールの順番、文字列と数値の違いに注意して設定してください。