コンテンツにスキップ

switchノード

switchノード

概要

switchノードは、受け取ったデータの内容に応じて、処理の流れを分岐するためのノードです。

ロボシュタインのフローでは、アラート内容、ステータスコード、件名、本文、処理結果などをもとに、後続の処理を分けたい場合があります。

例えば、アラートレベルが「重要」の場合は電話通知へ進む、HTTPステータスコードが 200 の場合は正常処理へ進む、本文に特定の文字列が含まれる場合だけチケット登録へ進む、といった条件分岐を作成できます。

switchノード設定画面

具体的な活用例(アラートレベルに応じて処理を分岐する)

監視アラートの内容に応じて、後続の処理を分ける例です。

フローのイメージ図

switchノードのフローイメージ

① 判定対象を指定する

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ノードを接続し、実際にどのプロパティに値が入っているか確認してください。

switchノードのフローイメージ

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

debugノードでメール受信データを確認

確認後、メール本文が 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ノードの実行結果をもとに、正常・異常を分岐する例です。

例1:HTTPステータスコードで分岐する

設定例:

  • プロパティ:msg.statusCode
  • ルール1:== 200
  • ルール2:>= 400
  • ルール3:その他

この構成にすると、HTTPステータスコードに応じて、正常処理、エラー処理、その他の処理へ分岐できます。

例2:メール本文に含まれる文字列で分岐する

監視アラートメールの本文に含まれる文字列をもとに分岐する例です。

例2:メール本文に含まれる文字列で分岐する

設定例:

  • プロパティ:msg.payload.text
  • ルール1:要素に含む CRITICAL
  • ルール2:要素に含む WARNING
  • ルール3:その他

重要アラート、警告アラート、その他のアラートで処理を分けられます。

例3:処理結果の有無で分岐する

前段のノードで必要な値が取得できたかどうかを判定する例です。

例3:処理結果の有無で分岐する

設定例:

  • プロパティ:msg.payload.result
  • ルール1:nullでない
  • ルール2:その他

値が取得できた場合と、取得できなかった場合で処理を分けられます。

例4:数値の範囲で分岐する

CPU使用率やディスク使用率など、数値をもとに分岐する例です。

例4:数値の範囲で分岐する

設定例:

  • プロパティ: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つの出力だけに進めたい場合は「最初に合致した条件で終了」、複数の条件に同時に一致させたい場合は「全ての条件を適用」を使用します。

フロー作成時は、判定対象の値、ルールの順番、文字列と数値の違いに注意して設定してください。


解説動画

基礎編

応用編