![見出し画像](https://assets.st-note.com/production/uploads/images/164077874/rectangle_large_type_2_14fc12133833dfeeccdb3b2caff21de5.png?width=1200)
#7【Dify入門(ノード編)】条件分岐ノード
今回は複雑な処理になると必要となってくる条件分岐ノードについて解説いたします。
条件によってワークフローを分岐させる条件分岐ノードですが、条件の種類も多く混乱する方も多いのではないでしょうか。
条件分岐を使いこなすことで、複雑な要件にも対応ができるようになります。
条件分岐ノードって何?
![](https://assets.st-note.com/img/1733096925-OHRBKSbCEqfNXjdr204J16xt.png)
まずは条件分岐ノードとはどういうものかを解説したいと思います。
条件分岐ノードとは条件に基づいてワークフローの処理を複数に分けることができます。
条件も1種類ではなく複数存在し、組み合わせによって様々な分岐条件を作成することができるのです。
分岐のパターン
分岐のパターンとしては大きく以下の4つです。
例)子供が公園で友達と二人で遊んでいて喉が渇いたシーンを例に条件分岐を考えてみます。
パターン①:IFの条件がTRUEの場合
喉が渇いたー自販機で150円の水を2本買いたいなー…
もし(IF)300円持っていたら・・・300円持っているので自販機で水を2本買おう。
条件:300円を持っていたら
TRUE:自販機で水を2本買う
![](https://assets.st-note.com/img/1729907814-LbsjeaISxPV3dJ1mZ9HvUXQ0.png?width=1200)
パターン②:IFの条件がFALEの場合
喉が渇いたー自販機で150円の水を2本買いたいなー…
もし(IF)300円持っていたらと思いますが・・・さっきお菓子をかったため150円しかもっていません。
300円持っていたらという条件は満たさないので、公園で水を飲むという行動に出ます。
条件:300円を持っていたら
FALSE:水を買えないので公園で水を飲む
![](https://assets.st-note.com/img/1729907603-7dHVRxgXBDC8sQlM0Se35orU.png?width=1200)
パターン②:ELIFの条件がTRUEの場合
喉が渇いたー自販機で150円の水を2本買いたいなー…
もし(IF)300円持っていたらと思いますが・・・さっきお菓子をかったため150円しかもっていません。
この場合、300円を持っているという条件は満たせないためFALSEになります。
しかし、150円を持っているという追加の条件(ELSEIF)に対しては、条件を満たすことになるので、自販機で水を1本買うという行動にでます。
条件:300円を持っていたら
FALSE:水を買えないので公園で水を飲む
条件②:150円を持っていたら
TRUE:自販機で水を1本買う
![](https://assets.st-note.com/img/1729907657-dvWocXzKf8RegEiTM3w10J96.png?width=1200)
パターン②:ELIFの条件がFALSEの場合
喉が渇いたー自販機で150円の水を2本買いたいなー…
もし(IF)300円持っていたらと思いますが・・・さっきお菓子300円分買ったため残金は0円です。
この場合、300円を持っているという条件は満たせないためFALSEになります。さらに、150円を持っているという追加の条件(ELSEIF)に対しても、条件を満たすことができないので、仕方なく公園の水道で水を飲むという行動に出ます。
条件:300円を持っていたら
FALSE:水を買えないので公園で水を飲む
条件②:150円を持っていたら
FALSE:水を買えないので公園で水を飲む
![](https://assets.st-note.com/img/1729907666-c08rySYp5BqF6DbXHgzCs1EK.png?width=1200)
条件の種類
ここまで条件分岐のパターンをみましたが、IFやELIFの判定条件にも7つの種類が存在します。
入力された変数がどういう状態かを条件として判定できます。
条件①:含む(以内)
変数に条件が含まれているかどうかを判定する際に使用します。
変数が文字列「今日は晴れです。」条件が「晴れ」だった場合、
変数に条件が含まれてるのでTRUE、含まれていなければFALSEです。
条件②:含まない(以外)
①とは逆のパターンになります。
変数が文字列「今日は晴れです。」条件が「雨」だった場合。
文字列に「雨」という文字が含まないかどうかを判定する際に使用します。 含まなければTRUE、含まれていればFALSEです。
条件③:始まる
変数が条件で始まっているかどうかを判定する際に使用します。
変数が文字列「今日は晴れです。」条件が「今日は」だった場合。
「今日は」から始まっていればTRUE、始まっていなければFALSEです。
条件④:である
変数と条件がイコール(=)になるかを判定する場合に使用します。
変数が文字列「今日は晴れです。」条件が「今日は晴れです。」だった場合。変数と条件がイコールであればTRUE、そうでない場合はFALSEです。
条件⑤:ではない
条件④とは逆のパターンになります。
変数と条件がノットイコール(≠)になるかを判定する場合に使用します。
変数が文字列「今日は晴れです。」条件が「今日は雨です。」だった場合。
変数と条件がノットイコールであればTRUE、そうでない場合はFALSEです。
条件⑥:空である
変数が空であるかを判定する場合に使用します。
変数が空であればTRUE、そうでない場合はFALSEです。
条件⑦:空ではない
変数が空ではないかを判定する場合に使用します。
変数が空でなければTRUE、そうでない場合はFALSEです。
複数条件
ここまで条件について説明いたしました。
この条件は1つではなく、複数を同時に設定することができます。
パターン①:A and B
![](https://assets.st-note.com/img/1733092089-UX4ABjPN72Qivbm3osODnRpT.png?width=1200)
andで条件と条件を組み合わせるパターンです。
条件Aにも条件Bにもマッチしたパターンが対象となります。
パターン②:A or C
![](https://assets.st-note.com/img/1733092115-jzOXe25ouyWKQRBMEws16kLf.png?width=1200)
パターン①のandとは逆になります。
orで条件と条件を組み合わせるパターン。
条件Aにも条件Bにもマッチしない
パターンが対象となります。
条件分岐ノードの設定
①IFの条件を追加
最初の条件を設定します。
上位のノードで設定している変数を選択することができます。
![](https://assets.st-note.com/img/1733092294-haws4I6kn3cGKMqjzUJFZYVb.png)
②条件の設定
変数に対して条件を設定します。
上で紹介した条件の種類を選択することができます。
![](https://assets.st-note.com/img/1733092432-DydThSUnYE47RZuiPxv93M6H.png)
③条件を追加
条件を追加で、AND条件とOR条件を設定ができます。
必要に応じて追加してください。
![](https://assets.st-note.com/img/1733092562-5IRCrLgKMHAn408mObjkUXPV.png)
④ELIFの設定
①で設定した条件がFALSEの場合、新たな条件を追加することができます。
参考画像では、「今日は晴れです。」または「今日は雨です。」を含まない場合FALSE。
さらにELIFを追加し「今日は曇りです。」が変数に含まれるかどうかという条件を出しています。
![](https://assets.st-note.com/img/1733092818-RcX1T72ro8petQUSFzBwd3si.png)
⑤条件ごとに下流ノードの設定
条件分岐ノードは条件ごとにワークフローを分岐できます。
そのため、各条件の結果ごとに次のブロックを指定する必要があります。
![](https://assets.st-note.com/img/1733092942-zC9UFxPlkTvIdN05K1Whn7Hw.png)
まとめ
この記事では条件分岐ノードについて説明しました。
慣れるまでは少しややこしい部分はありますが、複雑な処理を実施する場合は必要となるケースが多くなります。
条件分岐ノードを使いこなして色々な条件に応じた処理を作成してみましょう。
関連記事
1. 【Dify入門(ノード編)】開始ノード
5. 【Dify入門(ノード編)】ナレッジ検索(知識検索)ノード
7. 【Dify入門(ノード編)】条件分岐ノード
11. 【Dify入門(ノード編)】パラメーター抽出ノード
補足
XではDifyに関するアップデート、最新情報を発信しています。
もしnote内でわかりづらい所や、もっと知りたい箇所があればDMでも構いませんので連絡いただければと思います。
![](https://assets.st-note.com/img/1733093388-2hp1xPHOco4NAvUie8k53jfV.png)