Muleフローの分岐ChoiceとFirst Cuccessful

今回はフローでよく使うであろう分岐処理について、簡単に使い方を纏めました。

スポンサーリンク

今回使うコンポーネント

コンポーネントアイコン用途
ChoiceChoice条件に応じてフロー分岐処理を行う
First SuccessfulFirst Successful複数の処理のうち、最初に正常終了したルートを適用する

Choice

Muleフローを扱う上で、最重要レベルのコンポーネントになります。簡単に言うとif/else if/elseを実現するためのコンポーネントですね。

queryParamsで以下のフルーツ名を渡して、価格を表示するようなフローを作成してみます。

フルーツラベル名価格
appleりんご100円
bananaバナナ120円
orangeオレンジ80円

queryParamsでフルーツを取得後、payloadにセットし、Choiceコンポーネントを使用して分岐処理を追加します。

Choiceコンポーネントの追加

最初のWhenにはその分岐に入るための条件を記載します。まずはpayloadが「apple」であることを条件としてりんごの価格を返したいので、Expressionには以下の内容を記載します。そして、分岐の中に処理したい内容を記載します(ここではSet Payload)。条件式はイコールだけでなく、不等号などの比較も記載可能です。

Choiceコンポーネント分岐処理の設定

デフォルトのChoiceコンポーネントはWhenとDefaultの2つしかなく、Defaultはelseにあたる部分になるため、分岐を増やす必要があります。適当なコンポーネントをWhenとDefautの間くらいにドラッグ&ドロップすると、Choiceと分岐の間に黒い線が現れ、分岐を追加することができます。分岐(When)が追加されますので、あとは同じ要領でバナナとオレンジに対しても分岐処理を実装しましょう。

Choiceコンポーネントの分岐追加

先ほどもちらっと触れましたが、Defaultには上記のWhenで設定した条件が全て該当しない場合に入ります。フルーツ名が一致しなかった場合は、専用のメッセージを入れておきましょう。Defaultルートは省略することはできませんが、中の処理を空にすることは可能です。

実際に実行してみると、フルーツによって出力内容が変わっており、きっちり分岐処理がされていることが分かります。

「apple」の場合

fruitsをappleにしたときの結果

「banana」の場合

fruitsをbananaにしたときの結果

「orange」の場合

fruitsをorangeにしたときの結果

それ以外の場合

fruitsをmelonにしたときの結果

First Cuccessful

こちらのコンポーネントも分岐処理にはなりますが、やや使い所が難しく、Choiceほど重要ではないのかなと思います。

こちらはサラッと紹介だけ。First Cuccessful自体には分岐条件は設けず、First Cuccessfulから枝分かれした状態で以下のように複数の処理を記載するような形になります。

First Successfulの構成

上記の図ではまずFirst Cuccessfulに記載した一番上の処理(処理1)から実行していきます。処理1が正常終了であれば、処理2以降は実施せず後続処理へ。処理1が例外を発生するようなエラーとなる場合は、処理2を実施するような形になります。処理2でも同じように、正常終了すれば後続処理へ、エラーになれば処理3へといった具合で各処理の成功/失敗が判断材料となります。

First Cuccessfulに記載した全ての処理が失敗した場合はエラー(例外スロー)となります。

まだどういう時に使うのか、使ったときのメリットみたいなものが具体的に思いつかず使い所が限られてきそうです。今のところ、分岐処理は全部Choiceで賄えるんじゃないかなという印象ですね。

最後に

分岐処理においてはChoiceが主軸となるため、まずはChoiceの使い方をきっちり押さえておきましょう。分岐処理は実はこの2つだけなので、Choiceさえ使いこなせれば多少複雑なフローでも組めるようになるのではないかと思います。

MuleSoft
スポンサーリンク

コメント