> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/advanced-blocks/expression.md).

# 式

ワークフロー内で、入力変数に対する条件を評価し、必要に応じて操作でデータを変換し、どの条件に一致するかに基づいて異なる出力を返す switch-case 文を使って、条件ロジックとビジネスルールを作成します。これにより、条件分岐の実行、ビジネスロジックの実装、ルールベースの意思決定、動的な出力生成ワークフローが可能になります。

## このブロックの仕組み

このブロックは、プログラミングにおける switch-case や if-else-if 文に似た条件ロジックを実装します。このブロックは、

1. ワークフローステップから、名前付き変数の辞書として入力データを受け取ります
2. 必要に応じて、次の操作を使ってデータ変換を適用します:
   * 条件評価の前に、データ変数に対して操作を実行します
   * Property Definition ブロックと同じ操作システムを使用します
   * 条件用の変数を準備するために、データを変換します（例: プロパティの抽出、フィルタリング、選択）
   * 変換後の値を、条件で使用する変数として保存します
3. switch-case 文を順番に評価します:
   * 一致するものが見つかるまで、各 case の条件を順番にテストします
   * 最初に一致した case で停止し、その結果を返します
   * どの case にも一致しない場合は、デフォルト結果を返します
4. 柔軟な式システムを使って条件を評価します:
   * **二項ステートメント**: 2 つの値を演算子（==, !=, >, <, >=, <=, contains, startsWith, endsWith, in, any in, all in）で比較します
   * **単項ステートメント**: 単一の値をテストします（Exists、DoesNotExist、is True、is False、is empty、is not empty）
   * **ステートメントグループ**: 複数のステートメントを AND/OR 演算子で組み合わせ、複雑な条件を作成します
   * 条件では、変数名（DynamicOperand）を参照することも、リテラル値（StaticOperand）を使用することもできます
5. 一致した case に基づいて結果を返します:

   **静的結果:**

   * case で定義された固定値を返します（例: "PASS", "FAIL", 数値、文字列）

   **動的結果:**

   * 変数から値を返します（任意の入力変数を参照可能）
   * 必要に応じて、変数を返す前に操作を適用して変換します
   * 計算済みまたは抽出済みの値を出力として返せるようにします
6. デフォルト case を処理します:
   * どの case 条件にも一致しない場合、デフォルト結果を返します
   * デフォルトも case の結果と同様に、静的または動的にできます

このブロックは、データ変換操作と柔軟な条件評価を組み合わせることで、複雑な条件ロジックを実現します。条件では、変数の比較、存在確認、所属判定、文字列操作、複数条件の論理演算子による組み合わせが可能です。これにより、ビジネスルールの実装、検証ロジック、多数の基準に基づく分類、条件付きデータ変換に強力です。

## 一般的な使用例

* **ビジネスロジックの実装**: 条件付きのビジネスルールと検証ロジックを実装します（例: 検出結果が参照と一致するか検証する、品質チェックを実装する、ビジネスルールを適用する）ことで、ビジネスロジックのワークフローを可能にします
* **条件付き分類**: 複数の条件と基準に基づいてデータを分類します（例: プロパティに基づいて検出を分類する、条件で結果をカテゴリ分けする、多基準分類を実装する）ことで、条件付き分類ワークフローを可能にします
* **検証と品質管理**: 参照値やしきい値に照らしてデータや予測を検証します（例: 予測が期待クラスに一致するか検証する、品質しきい値を確認する、準拠性を検証する）ことで、検証ワークフローを可能にします
* **ルールベースの意思決定**: 複雑なルールセットに基づいて意思決定を行います（例: 複数の基準に基づいて承認/却下する、条件に基づいてデータをルーティングする、ルールセットを使って判断する）ことで、ルールベースの意思決定ワークフローを可能にします
* **動的出力生成**: 入力条件に基づいて異なる出力を生成します（例: 条件に応じて異なる値を返す、条件付き出力を生成する、動的な結果を作成する）ことで、動的出力ワークフローを可能にします
* **複数条件フィルタリング**: 複数の条件を使って複雑なフィルタリングロジックを実装します（例: 複数の基準でフィルタリングする、複雑な条件付きフィルターを適用する、多要素フィルタリングを実装する）ことで、条件付きフィルタリングワークフローを可能にします

## 他のブロックへの接続

このブロックはワークフローステップからデータを受け取り、条件付き出力を生成します:

* **モデルまたは分析ブロックの後で** 予測や結果に条件ロジックを実装するため（例: 予測を検証する、結果を分類する、条件付きルールを適用する）ことで、条件ロジックのワークフローを可能にします
* **Property Definition ブロックの後で** 抽出したプロパティを条件で使用するため（例: 抽出値を条件で使用する、抽出したプロパティを比較する、抽出データに対してロジックを実装する）ことで、プロパティから条件へのワークフローを可能にします
* **ロジックブロックの前** Continue If のように、条件付き入力を提供するため（例: フィルタリング用の条件付き値を提供する、判断用の条件付き入力を供給する）ことで、式からロジックへのワークフローを可能にします
* **データ保存ブロックの前** ストレージ用にデータを条件付きで整形または変換するため（例: ストレージ用に条件付きで整形する、条件付き変換を適用する、条件付き出力を準備する）ことで、条件付き保存ワークフローを可能にします
* **通知ブロックの前** 条件付き通知を送信するため（例: 条件付きアラートを送信する、条件に基づいて通知する、条件付き通知をトリガーする）ことで、条件付き通知ワークフローを可能にします
* **ワークフロー出力において** 条件付きの最終出力を提供するため（例: 条件付きワークフロー出力、動的な結果生成、条件付き出力フォーマット）ことで、条件付き出力ワークフローを可能にします

## 要件

このブロックは、キーが変数名、値がワークフローステップからのデータである辞書形式の入力データを必要とします。switch パラメータは、条件と結果を持つ case を定義します。条件は、二項比較（==, !=, >, <, >=, <=, contains, in など）、単項テスト（Exists、is empty など）、および論理結合（AND/OR）をサポートします。データ操作は任意で、Property Definition ブロックと同じ操作システムを使用します。このブロックは case を順番に評価し、最初に一致した case の結果を返します。一致する case がない場合はデフォルト結果を返します。結果は、静的値または変数からの動的値（必要に応じて操作を適用）にできます。

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/expression@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**            | **型**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | **説明**                                                                                                                                                                                                                                                                                                                              | 参照 |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`            | `str`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | このステップの一意の識別子を入力してください。                                                                                                                                                                                                                                                                                                             | ❌  |
| `data_operations` | `Dict[str, List[Union[ClassificationPropertyExtract, ConvertDictionaryToJSON, ConvertImageToBase64, ConvertImageToJPEG, DetectionsFilter, DetectionsOffset, DetectionsPropertyExtract, DetectionsRename, DetectionsSelection, DetectionsShift, DetectionsToDictionary, Divide, ExtractDetectionProperty, ExtractFrameMetadata, ExtractImageProperty, LookupTable, Multiply, NumberRound, NumericSequenceAggregate, PickDetectionsByParentClass, RandomNumber, SequenceAggregate, SequenceApply, SequenceElementsCount, SequenceLength, SequenceMap, SortDetections, StringMatches, StringSubSequence, StringToLowerCase, StringToUpperCase, TimestampToISOFormat, ToBoolean, ToNumber, ToString]]]` | 条件評価の前にデータ変数を変換するための、オプションの操作辞書です。キーはデータ内の変数名、値は操作のリストです（Property Definition ブロックと同じ）。操作は、条件で使用する前に変数を変換するために適用されます。プロパティの抽出、フィルタリング、評価前のデータ変換に便利です。空の辞書（デフォルト）では変換は適用されません。                                                                                                                                                        | ❌  |
| `switch`          | `CasesDefinition`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 条件と結果を含む case からなる switch-case ロジック定義です。各 case には条件（Binary/Unary ステートメントを持つ StatementGroup）と結果（静的値または動的変数）があります。case は順番に評価され、最初に一致した case の結果が返されます。どの case にも一致しない場合はデフォルト結果が返されます。AND/OR 演算子、比較演算子（==, !=, >, <, >=, <=）、文字列操作（contains, startsWith, endsWith）、所属テスト（in, any in, all in）、存在テスト（Exists、is empty）を含む複雑な条件をサポートします。 | ❌  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `式` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `データ` ([*`*`*](/workflows/ja/gaido/developer-guide/kinds/wildcard.md)): ワークフローステップからのデータを含む、名前付き変数の辞書。変数名は条件と結果で使用されます。キーは変数名、値はワークフローステップの出力を参照するセレクターです。変数は条件や動的結果で参照できます。例: {'predictions': '$steps.model.predictions', 'reference': '$inputs.reference\_class\_names'} は 'predictions' と 'reference' という変数を作成します。
* 出力
  * `出力` ([`*`](/workflows/ja/gaido/developer-guide/kinds/wildcard.md))：任意の要素に相当します。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/expression@v1",
	    "data": {
	        "predictions": "$steps.model.predictions",
	        "reference": "$inputs.reference_class_names"
	    },
	    "data_operations": {
	        "predictions": [
	            {
	                "property_name": "class_name",
	                "type": "DetectionsPropertyExtract"
	            }
	        ]
	    },
	    "switch": {
	        "cases": [
	            {
	                "condition": {
	                    "statements": [
	                        {
	                            "comparator": {
	                                "type": "=="
	                            },
	                            "left_operand": {
	                                "operand_name": "class_name",
	                                "type": "DynamicOperand"
	                            },
	                            "right_operand": {
	                                "operand_name": "reference",
	                                "type": "DynamicOperand"
	                            },
	                            "type": "BinaryStatement"
	                        }
	                    ],
	                    "type": "StatementGroup"
	                },
	                "result": {
	                    "type": "StaticCaseResult",
	                    "value": "合格"
	                },
	                "type": "CaseDefinition"
	            }
	        ],
	        "default": {
	            "type": "StaticCaseResult",
	            "value": "不合格"
	        },
	        "type": "CasesDefinition"
	    }
	}
```

</details>
