Skip to Content

条件分岐

条件分岐(コンディション)は、「ある条件を満たすときだけ処理する」「満たさないときは別の処理をする」といった処理の流れの枝分かれを作る機能です。たとえば「コマンドを使った人が管理者のときだけ実行する」「30%の確率でレアな結果を出す」「平日だけ受け付ける」といった動きを、線でつなぐだけで組み立てられます。

このページでは、コマンドビルダーで使える条件分岐の置き方と、7種類の条件の設定方法をまとめて説明します。

条件分岐は、コマンドビルダーの編集画面で使います。コマンドビルダーの基本的な開き方や操作は コマンドビルダーの概要ノードの種類リファレンス を先にご覧ください。

条件分岐とは

コマンドビルダーでは、処理の一つひとつを「ブロック(ノード)」として置き、ブロック同士を線でつないで流れを作ります。条件分岐のブロックを置くと、その先で流れが枝分かれします。

  • 条件に一致したときに通る枝
  • どの条件にも一致しなかったとき(Else)に通る枝
  • どの枝を通っても最後に必ず合流する枝(条件後)

この3つを組み合わせて、「もし〜なら A、そうでなければ B、そのあと共通で C」という流れを表現します。

7種類の条件

条件分岐には、判定の仕方が違う7つの種類があります。やりたいことに合わせて選んでください。サイドバー(画面左のブロック一覧)の「条件」タブにすべて並んでいます。

ブロック名どんな判定をするか
「確率による条件分岐」指定した確率(%)で、ランダムに分岐します
「比較による条件分岐」2つの値を比べて(等しい・より大きい など)分岐します
「チャンネルによる条件分岐」コマンドが使われたチャンネルなどを比べて分岐します
「権限による条件分岐」ユーザーが特定の権限を持っているかで分岐します
「ロールによる条件分岐」ユーザーが特定のロールを持っているかで分岐します
「ユーザーによる条件分岐」特定のユーザーかどうかで分岐します
「時刻による条件分岐」現在の曜日・時刻・日時で分岐します

それぞれの詳しい設定方法は、後半の「条件の種類ごとの設定」で説明します。

条件ブロックを置くと自動で付くもの

条件のブロックをキャンバスに置くと、次の3つの行き先がセットで用意されます。

自動で作られるもの役割
条件一致の枝(If)「条件ノードを追加」ボタンで追加する、条件に一致したときの行き先です
「Else(それ以外)」どの条件にも一致しなかったときに通る行き先です
「条件後」すべての分岐の判定が終わったあと、最後に必ず通る合流地点です

「Else(それ以外)」と「条件後」のブロックは、条件ブロックを置いた瞬間に自動で作られ、最初から線でつながっています。これらは単独では削除できません。条件ブロックを削除すると、ひもづいたこれらのブロックも一緒に消えます。「Else(それ以外)」や「条件後」につながっている線(構造線)も、手動では取り外せないようになっています。

条件分岐を作る基本の流れ

ここでは「比較による条件分岐」を例に、置いてから設定し、線をつなぐまでの基本の流れを説明します。他の種類でも、設定する項目が違うだけで流れは同じです。

サイドバーの「条件」タブを開く

画面左のブロック一覧で「条件」タブを選びます。

使いたい条件をキャンバスにドラッグする

使いたい条件(例: 「比較による条件分岐」)をつかんで、右側のキャンバス上にドラッグ&ドロップします。条件ブロックと一緒に、「Else(それ以外)」と「条件後」のブロックも自動で配置されます。

前のブロックから条件ブロックへ線をつなぐ

それまでの処理の出力から、置いた条件ブロックの入り口へ線をつなぎます。これで、その流れが条件ブロックまで進むようになります。

条件ブロックをクリックして条件の内容を設定する

条件ブロックをクリックすると、右側に設定パネルが開きます。ここで判定の中身(例: 「基準値」「比較演算子」「比較する値」)を入力します。

「条件ノードを追加」をクリックして一致したときの枝を作る

設定パネルの一番下にある「条件ノードを追加」ボタンをクリックすると、その条件が一致したときに通る枝(If ノード)がキャンバスに追加されます。

それぞれの枝に行いたい処理をつなぐ

  • 条件に一致したときの処理は、追加された一致の枝(If ノード)につなぎます。
  • 一致しなかったときの処理は、自動で作られた「Else(それ以外)」につなぎます。
  • どの枝を通っても最後に共通で行う処理は、「条件後」につなぎます。

条件が一致したときの処理をつなぐ

「条件ノードを追加」で作られた枝(If ノード)は、その条件が成り立ったときだけ通る道です。この枝の先に、一致時にやりたい処理(メッセージ送信・ロール付与など)のブロックをつなぎます。

枝(If ノード)をあとからクリックすると、設定パネルでその条件の中身を細かく見直し・変更できます。たとえば「比較による条件分岐」から作った枝では「基準値」「比較演算子」「比較する値」を編集できます。

「Else(それ以外)」に一致しなかったときの処理をつなぐ

「Else(それ以外)」は、その条件ブロックに設定したどの条件にも当てはまらなかったときに通る道です。「一致しなかったときはこうする」という処理を、この枝の先につなぎます。クリックすると説明パネルに次の案内が表示されます。

  • このブロックは、親の条件ブロックに設定されたすべての条件に当てはまらなかった場合に実行されます。
  • 「Else(それ以外)」は条件ブロックにひもづいているため、単独で削除できません。親の条件ブロックを削除すると、このブロックも自動的に削除されます。

一致しなかったときに何もしなくてよい場合は、「Else(それ以外)」に何もつながなくても構いません。その場合、一致しなかったときはそのまま「条件後」へ進みます。

「条件後」 どの枝を通っても最後に合流する処理

「条件後」は、条件分岐のすべての判定が終わったあとに必ず通る合流地点です。一致の枝を通っても「Else(それ以外)」を通っても、最終的にこの「条件後」へ流れが合流します。

「分岐のあとに、共通で必ずやりたいこと」(例: 「最後に必ずログを残す」「処理完了のメッセージを送る」)は、この「条件後」の先につなぎます。クリックすると説明パネルに次の案内が表示されます。

  • このブロックに接続されたブロックは、条件分岐のすべての評価が終了した後に実行されます。どの分岐(条件一致 / Else)を通っても最終的にこのブロックへ合流します。
  • このブロックは条件分岐ノードにひもづいているため、単独で削除できません。親の条件分岐ノードを削除すると、このブロックも自動的に削除されます。

複数の条件を組み合わせる(条件の追加)

1つの条件ブロックには、一致の枝を複数作ることができます。条件ブロックの設定パネルで内容を変えながら「条件ノードを追加」をクリックするたびに、新しい一致の枝が追加されます。これにより「A のとき」「A でなく B のとき」「どちらでもないとき(Else)」といった、複数段階の振り分けが作れます。

条件ブロックは複数の出力線をつなげます(一致の枝・「Else(それ以外)」・「条件後」など)。1つの条件ブロックから複数の行き先へ枝分かれするのが正常な状態です。

「Else(それ以外)」は「設定したどの一致条件にも当てはまらなかったとき」に通ります。一致の枝を複数追加した場合、上から順に判定され、いずれにも当てはまらなかったものが「Else(それ以外)」に進みます。

値の入力欄について

各条件の入力欄の多くには、変数を差し込むボタンが付いています。コマンドのオプションや、途中で作った変数の値を条件に使いたいときは、このボタンから変数を選んで挿入できます。変数の作り方や使い方は 変数の使い方 を参照してください。

また、どの条件ブロックの設定パネルにも一番下に「ノードタイトル」の入力欄があります。ここに分かりやすい名前を入れておくと、キャンバス上でそのブロックが何の判定なのか見分けやすくなります(任意です)。

条件はどう判定されるか(実際の動作)

コマンドが実行されると、各条件は次の共通ルールで判定されます。種類ごとの細かい違いは、後半の「条件の種類ごとの設定」と「条件の種類ごとの判定の決まり方」で説明します。

  • 判定できないときは「成り立たなかった」扱い(フェイルクローズ)。入力した値が解決できない、形式が不正、想定外の状況などで判定がうまくできなかった場合、その条件は成り立たなかった(false) とみなされ、流れは「Else(それ以外)」へ進みます。条件ブロックが誤って一致して意図しない処理が走ることはありません。
  • 判定中にエラーが起きても、コマンドは止まりません。条件の判定で内部的に問題が起きた場合でも、エラーはコマンド全体には伝わらず、その条件は成り立たなかった扱いになって流れは続きます。ユーザーにエラーメッセージは表示されません。
  • 値の中の変数は判定のたびに展開されます。「基準値」「比較する値」などに差し込んだ変数や永続変数は、判定の直前に現在の値へ置き換えられてから比較されます。コマンドのオプション・途中で作った変数・永続変数のいずれも利用できます。
  • どの枝を通っても最後は「条件後」に合流します。一致の枝・「Else(それ以外)」のどちらを通っても、判定が終わると必ず「条件後」につながった処理へ流れが合流します。

時刻・日時に関する判定はすべて UTC(協定世界時) を基準に行われます。日本時間とは時差があるため、「日本の○時」で分岐させたいときは、その分だけずらした時刻を指定してください(例: 日本の 21:00 は UTC では 12:00 です)。

条件の種類ごとの設定

ここからは、7種類それぞれの設定パネルにある項目を説明します。設定したあとに「条件ノードを追加」をクリックすると、その条件の一致の枝が作られる点はすべて共通です。

比較による条件分岐

2つの値を比べて分岐します。設定パネルの見出しは「条件分岐設定」です。

設定項目説明
「基準値」比較の左側になる値です。変数の差し込みに対応しています
「比較演算子」どう比べるかを選びます(下表)
「比較する値」比較の右側になる値です。変数の差し込みに対応しています

選べる「比較演算子」:

選択肢意味
等しい (==)基準値と比較する値が同じとき
等しくない (!=)同じでないとき
より大きい (>)基準値が比較する値より大きいとき
より小さい (<)基準値が比較する値より小さいとき
以上 (>=)基準値が比較する値以上のとき
以下 (<=)基準値が比較する値以下のとき
含む (contains)基準値の中に比較する値が含まれているとき
含まない (not contains)含まれていないとき

確率による条件分岐

指定した確率(%)で、ランダムに分岐します。設定パネルの見出しは「確率条件分岐設定」です。

設定項目説明
「確率」この枝が選ばれる確率を 0〜100 の数値で入力します。変数の差し込みに対応しています

設定パネルの上部には「現在の合計: ○% / 100%(残り: ○%)」という表示があり、その条件ブロックにつながっている確率の枝の合計が確認できます。

すべての確率の合計は 100% 以下にしてください。合計が 100% を超えると警告が表示され、「条件ノードを追加」ボタンがクリックできなくなります。確率の値が空のときや、0 以下のときも追加できません。

チャンネルによる条件分岐

コマンドが実行されたチャンネルなどを比べて分岐します。設定パネルの見出しは「チャンネル条件分岐設定」です。

設定項目説明
比較するチャンネルの種類「現在のチャンネル」/「チャンネルID」/「チャンネル変数」から選びます
チャンネルID / チャンネル変数名種類で「チャンネルID」または「チャンネル変数」を選んだときに表示され、対象を入力します
「比較演算子」「等しい (==)」/「等しくない (!=)」から選びます
「比較する値」比較先の値を入力します。変数の差し込みに対応しています

権限による条件分岐

ユーザーが特定の権限を持っているかどうかで分岐します。設定パネルの見出しは表示上「チャンネル条件分岐設定」となっていますが、ここで判定するのは権限です。

設定項目説明
ターゲットユーザー「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます
ユーザーID / ユーザー変数名ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます
基準となる権限確認したい権限を選びます(複数選択できます)
条件タイプどう判定するかを選びます(下表)

選べる「条件タイプ」:

選択肢意味
すべての権限を持っている指定した権限をすべて持っているとき一致
すべての権限を持っていない指定した権限をすべて持っていないとき一致
いずれか1つ以上の権限を持っている指定した権限のうち1つでも持っていれば一致

ロールによる条件分岐

ユーザーが特定のロールを持っているかどうかで分岐します。設定パネルの見出しは「ロール分岐設定」です。

設定項目説明
ターゲットユーザー「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます
ユーザーID / ユーザー変数名ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます
ロールIDまたはロール変数確認したいロールの ID、またはロール変数名を入力します。変数の差し込みに対応しています

ロールIDの欄のヘルプには、入力例として 123456789012345678 のようなロールID、またはロール変数名を入れる旨が案内されます。

ユーザーによる条件分岐

実行者などが特定のユーザーかどうかで分岐します。設定パネルの見出しは「ユーザー分岐設定」です。

設定項目説明
ターゲットユーザー「コマンド実行者」/「ユーザーID」/「ユーザー変数」から選びます
ユーザーID / ユーザー変数名ターゲットで「ユーザーID」または「ユーザー変数」を選んだときに表示されます
ユーザーIDまたはユーザー変数比較したいユーザーの ID、またはユーザー変数名を入力します。変数の差し込みに対応しています

追加された一致の枝(ユーザー分岐の If ノード)では、「である」/「ではない」の比較演算子を選んで、一致・不一致のどちらで判定するかを切り替えられます。

時刻による条件分岐

現在の曜日・時刻・日時で分岐します。設定パネルの見出しは「時刻条件分岐設定」です。

まず「比較対象」で、何と比べるかを選びます。

比較対象内容
曜日現在の曜日で判定します
時刻 (HH:mm)現在の時刻(時:分)で判定します
日時現在の日付と時刻で判定します

次に「比較演算子」を選びます。選べる内容は「比較対象」によって変わります。

  • 曜日のとき: 「いずれかである」/「いずれでもない」
  • 時刻日時のとき: 「より前」/「より後」/「等しい」/「等しくない」/「範囲内」/「範囲外」

選んだ「比較対象」と「比較演算子」に応じて、入力欄が切り替わります。

入力欄表示される条件
曜日(複数選択)「比較対象」が「曜日」のとき
「時刻」(HH:mm)「比較対象」が「時刻」で、範囲以外の演算子のとき
「時刻の範囲」「比較対象」が「時刻」で、「範囲内」/「範囲外」のとき。終了が開始より小さい場合は深夜をまたぐ範囲として扱われます
「日時」「比較対象」が「日時」で、範囲以外の演算子のとき
「日時の範囲」「比較対象」が「日時」で、「範囲内」/「範囲外」のとき

入力が足りないと「条件ノードを追加」ボタンはクリックできません。曜日なら1つ以上の曜日を選ぶ、範囲なら開始と終了の両方を入れる、それ以外なら値を1つ入れる必要があります。

条件の種類ごとの判定の決まり方(実際の動作)

設定した条件が実行時にどう判定されるか、種類ごとに具体的な決まり方を説明します。いずれも判定できないときは前述のとおり「成り立たなかった」扱いになり、「Else(それ以外)」へ進みます。

比較による条件分岐の決まり方

「基準値」と「比較する値」は、変数を展開したうえで次のように比べられます。

  • 両方が数値として読めるときは、数として比較されます。たとえば文字の 5 と数値の 5 は、どちらも数として扱われるため「等しい (==)」で一致します。値の見た目(文字か数字か)に左右されず、数の大小・等価で判定できます。
  • どちらかが数値として読めないときは、文字列として比較されます。「等しい (==)」「等しくない (!=)」は文字どうしの一致で判定します。
  • 「より大きい (>)」「より小さい (<)」「以上 (>=)」「以下 (<=)」は、両方が数値のときだけ判定できます。どちらかが数値に変換できない場合、その条件は成り立たなかった扱いになります。数の大小で分岐したいときは、両側に数値(または数値に展開される変数)を入れてください。
  • 「含む (contains)」「含まない (not contains)」は、文字列の中に含まれるかどうかで判定します。

チャンネルによる条件分岐の決まり方

  • 「現在のチャンネル」を選ぶ、または ID・変数名を空にすると、コマンドが実行されたチャンネルが比較元になります。
  • チャンネルは、変数・<#123...> 形式のチャンネルメンション・数字だけの ID・サーバー内のチャンネル名のいずれでも指定できます。指定した値はこれらの順で解決され、最終的にチャンネルの数字 ID に変換されてから比較されます。
  • 比較元・比較先の両方が数字 ID に解決できたときだけ「等しい (==)」「等しくない (!=)」で判定されます。どちらかが解決できなかった場合は成り立たなかった扱いになります。

権限による条件分岐の決まり方

  • 判定対象のユーザーがそのサーバーの**管理者(administrator)権限を持っている場合、どの権限チェックも常に「持っている」**と判定されます。これは Discord の標準的な扱いで、管理者はすべての権限を含むためです。
  • 管理者でない場合は、対象ユーザーが実際に持っている権限と「基準となる権限」を照らし合わせて判定します。
    • すべての権限を持っている: 指定した権限をすべて持っていれば一致します。
    • すべての権限を持っていない: 指定した権限をどれも持っていなければ一致します。
    • いずれか1つ以上の権限を持っている: 指定した権限のうち1つでも持っていれば一致します。
  • 「基準となる権限」を1つも選んでいない場合: 「すべての権限を持っている」「すべての権限を持っていない」は一致(条件なしのため常に成り立つ扱い)、「いずれか1つ以上の権限を持っている」は不一致になります。
  • 権限による条件分岐はサーバー内での利用が前提です。対象ユーザーをサーバーのメンバーとして特定できないときは、成り立たなかった扱いになります。

ロールによる条件分岐の決まり方

  • 判定対象のユーザーをサーバーのメンバーとして特定し、指定したロールを持っているか(または持っていないか)で判定します。
  • ロールは ID またはロール変数で指定します。指定した値が最終的にロールの数字 ID に解決できなかった場合(たとえば存在しないロール名など)は、誤った一致を防ぐため成り立たなかった扱いになります。
  • 一致の枝(If ノード)では「持っている」「持っていない」のどちらで判定するかを切り替えられます。

ユーザーによる条件分岐の決まり方

  • ターゲットと比較相手のユーザー ID どうしを比べて判定します。「コマンド実行者」を選ぶと、コマンドを使った本人の ID になります。
  • ユーザー ID の比較だけで判定するため、サーバー外(ダイレクトメッセージ)でも利用できます。どちらかの ID が特定できないときは成り立たなかった扱いになります。
  • 一致の枝(If ノード)では「である」「ではない」を切り替えられます。

時刻による条件分岐の決まり方

判定はすべて UTC を基準に、現在の曜日・時刻・日時と比べて行われます。

  • 曜日: 日曜=0、月曜=1、…、土曜=6 として扱われ、選んだ曜日に「いずれかである」「いずれでもない」で判定します。
  • 時刻: HH:MM または HH:MM:SS の形式で指定します。HH023MMSS059 の範囲です。25:0010:60 のような不正な形式は成り立たなかった扱いになります。
    • 「範囲内」「範囲外」では、終了が開始より小さいとき(例: 22:0002:00)は深夜をまたぐ範囲として扱われ、早朝の時刻も範囲に含まれます。
  • 日時: ISO 8601 形式(例: 2026-06-01T12:00:00Z)で指定します。末尾の Z は UTC を表します。タイムゾーンを書かない日時は UTC として扱われます。不正な形式は成り立たなかった扱いになります。
    • 日時の「範囲内」「範囲外」は、開始から終了までの通常の区間として扱われます(時刻の範囲のように深夜またぎにはなりません)。開始より後の終了を指定してください。

確率による条件分岐の詳しい動き(実際の動作)

確率による条件分岐は、置き方や枝の数によって挙動が変わります。

1つの確率の枝だけのとき

設定した確率(%)に応じて、0100 の範囲で毎回ランダムに判定します。

  • 確率が 0 のときは常に成り立たない(常に「Else(それ以外)」へ進む)。
  • 確率が 100 以上のときは常に成り立つ
  • 入力が数値として読めないときは、成り立たない扱いになります。

設定パネルでは確率に 0100 以外を入れても、実行時は次のように扱われます。0 未満は 0(常に成り立たない)、100 を超える値は 100(常に成り立つ)として扱われます。

確率の枝を複数置いたとき(重み付き抽選)

1つの条件ブロックに確率の枝を2つ以上つなぐと、それぞれの確率を「持ち分」とした1回の抽選でどの枝を通るかが決まります。たとえば「30% の枝」「20% の枝」を置くと、30% で1つ目、20% で2つ目、残りの 50% は「Else(それ以外)」へ進みます。

  • 各枝の確率を順に積み上げて割り当てるため、合計は 100% 以下にしてください。合計が 100% 未満のとき、足りない分は「Else(それ以外)」へ進みます。
  • 確率が 0 の枝は抽選から外され、後ろの枝の選ばれ方に影響しません。

確率の枝の合計が 100% を超えると、後ろの枝が絶対に選ばれない状態になります。設定パネルでは合計が 100% を超えると「条件ノードを追加」ボタンがクリックできなくなるため、設定段階で防げるようになっています。

重み付き抽選は、1つの条件ブロックにつないだ一致の枝がすべて「確率による条件分岐」のときだけ働きます。確率の枝と、ほかの種類(ロール・ユーザーなど)の枝を同じ条件ブロックに混在させた場合は、上から順に最初に成り立った枝を通る「先勝ち」の判定に切り替わり、混在したほかの枝は無視されます。確率分岐は確率分岐だけ、ほかの判定はほかの判定だけでまとめるのがおすすめです。

上限と制約

ここに記載の上限は、現在のベータ運用では全ユーザーに余裕のある範囲で適用され、通常の使い方で問題になることはまずありません。

項目上限・制約
コマンド1回の実行時間約 30 秒。条件の判定もこの時間内に収まる必要があります
コマンド1回で処理できるブロック数約 5000 ステップ。条件・ループなどすべてのブロックの通過がこの数に含まれます
確率の枝の合計100% まで(超過分の枝は選ばれません)

ループの中で条件を判定することもできます。その場合、繰り返しのたびに条件が判定され、ループの回数だけステップ数を消費します。

注意点・うまくいかないとき

  • 思ったように分岐しない・常に「Else(それ以外)」に進んでしまう: 入力した値(チャンネル・ロール・ユーザーの ID や変数、時刻・日時の形式など)がうまく解決できていない可能性があります。判定できないときは「成り立たなかった」扱いになり、流れは「Else(それ以外)」へ進みます。ID は数字で、時刻・日時は決められた形式で指定してください。
  • 数の大小で分岐したいのに一致しない: 「より大きい」「より小さい」「以上」「以下」は、両側の値が数値として読めるときだけ判定できます。片側が文字を含む値だと成り立たない扱いになります。両側に数値、または数値に展開される変数を入れてください。
  • 時刻の分岐が日本時間とずれる: 時刻・日時の判定は UTC が基準です。日本時間で考えている時刻から時差(9 時間)を引いた値を指定してください。
  • 管理者だと権限の条件が必ず一致する: 管理者権限を持つユーザーは、どの権限チェックでも「持っている」と判定されます。管理者を別扱いにしたいときは、ロールやユーザーによる条件分岐と組み合わせてください。
  • 確率の枝を増やしたのに一部が選ばれない: 確率の合計が 100% を超えると後ろの枝は選ばれません。また、確率の枝とほかの種類の枝を同じ条件ブロックに混ぜると重み付き抽選が働かず、先勝ち判定になります。

条件ブロックは複数の出力をつなげる

通常のブロックは出力の線が1本ですが、条件ブロックは例外で、複数の出力線をつなげられます。これは、一致の枝・「Else(それ以外)」・「条件後」という複数の行き先へ同時に枝分かれさせるためです。

次のステップ / 関連ページ

最終更新: