- はじめに
- スタート アップ ガイド
- BPMN を使用したプロセス モデリング
- ケース管理を使用したプロセス モデリング
- フローを使用したプロセス モデリング
- プロセスの実装
- プロセスの操作
- プロセスの監視
- プロセスの最適化
- 参考情報
ノードの出力と変数を介したノード間のデータの流れと、サブフローと分岐のスコープ ルール
概要
Flow のノードはデータを自動的に共有しません。ノードが HTTP 応答や計算値などの出力を生成すると、下流のノードは式を使用してその出力に明示的にアクセスします。変数とデータ フローは、ノード間でデータを配線し、プロセス全体で値を保持する方法です。
データがプロセス内を移動する方法は 2 つあります。
- ノードの出力 — 各ノードは、下流のノードが参照できる出力を生成します
- 変数 — 値を格納しノード間で渡すために定義するプロセス レベルの変数です
式の文法、演算子、および $vars 参照の記述方法については、「 式の構文」をご覧ください。
動作のしくみ
ノードの出力
データを生成するすべてのノードは、 $vars.<nodeName>.outputを通じてそのデータを利用できるようにします。ノード名はノードの種類に基づいて自動的に割り当てられます。たとえば、最初の HTTP 要求ノードの名前は httpRequest1で、2 番目の HTTP 要求ノードの名前は httpRequest2です。
ノードを選択すると、[プロパティ] パネルにノードの変数名が表示されます。
// Access HTTP Request response
$vars.httpRequest1.output.body
$vars.httpRequest1.output.statusCode
// Access Script return value
$vars.script1.output
// Access a second HTTP Request
$vars.httpRequest2.output.body
// Access HTTP Request response
$vars.httpRequest1.output.body
$vars.httpRequest1.output.statusCode
// Access Script return value
$vars.script1.output
// Access a second HTTP Request
$vars.httpRequest2.output.body
出力構造はノードの種類によって異なります。特定の出力形状については、各ノードのリファレンスページを参照してください。
変数
変数は、1 回の実行の間保持されるプロセス レベルの値です。これらは [変数] パネルで定義します。
各変数は以下で構成されます。
- 名前 — 式でどのように参照するか (例:
$vars.orderTotal) - 型 — String、Number、Boolean、Object、または配列
プロセス レベルの変数は常に双方向であり、どのノードでも読み書きできます。構成する方向の設定はありません。読み取り専用または書き込み専用の値は、代わりにトリガーの入力または出力変数から取得されます。以下で説明します。
フローでは、これら 3 種類のデータは、定義する場所によって区分されます。
| 種類 | 定義 | 方向 | 参照構文 |
|---|---|---|---|
| 変数 | 変数パネル | 双方向 (読み取りおよび書き込み) | $vars.<name> |
| トリガーの入力 | トリガー ノード | 読み取り専用 | $vars.<triggerName>.output.<name> |
| 出力変数 | エンドノード | 書き込み専用 | $vars.<name> |
変数を使用すべき状況とノード出力を使用する場合:
- ノードの出力 は、あるノードから次のノードに渡されるデータを適合させます。これは最も一般的なパターンです。
- 変数は、 プロセス全体でアクセスできる必要がある値を適合させます。
- 入力と出力は 、プロセス自体が受け取る内容または返す内容を定義する値に適合します。以下の「トリガーの入力」と「出力変数」をご覧ください。
変数に明確な名前を付ける: ハイフンまたはキャメルケースを使用したわかりやすい小文字の名前 ( customerEmail、 invoiceTotal、 apiResponse など) は、時間が経っても実行トレースで判読可能なままです。単一文字の名前や略語はすぐに意味を失います。
トリガーの入力
入力変数は [変数] セクションで定義されていません。トリガー ノードの [入力] に直接追加されるため、読み取り専用になります。トリガーが起動すると、その入力は として使用できます$vars.<triggerName>.output.<inputName>
// Access an input defined on a Manual Trigger named "manualTrigger1"
$vars.manualTrigger1.output.userId
// Access an input defined on a Manual Trigger named "manualTrigger1"
$vars.manualTrigger1.output.userId
これは、すべての種類のトリガーに適用されます。プロセスに複数のトリガーがある場合、各トリガーは独自の入力を所有します。下流のノードは、実行を開始した特定のトリガーを参照します。
出力変数
出力変数はプロセスの結果を表します。これらは [変数] パネルではなくエンド ノードに直接追加するため、書き込み専用になります。
// Access an output variable named "finalStatus"
$vars.finalStatus
// Access an output variable named "finalStatus"
$vars.finalStatus
各出力変数は以下で構成されます。
- 名前 — 式でどのように参照するか (例:
$vars.finalStatus) - データ型 — String、Number、Boolean、Object、または Array
- 説明 — 値が表す内容に関する任意のメモ
- 既定値 — 変数が何も設定されない場合に使用される任意のフォールバックです
出力変数の値は、ノードの [変数の更新 ] セクションから、またはスクリプト ノードの戻り値として、他の変数と同じように設定されます。
変数の定義
変数定義は [ 変数] パネルに存在します。各定義には変数の名前と型が格納されるため、実行中にその値を一貫して参照できます。
変数の更新
変数は、ノードの構成またはスクリプト ノードの出力によって更新できます。
任意のノードから — [変数を更新] セクション
すべてのノードの [プロパティ] パネルに [ 変数を更新 ] セクションがあります。セクションには、書き込み可能な変数のターゲット (プロセス変数または出力変数) と、それに割り当てられた JavaScript 式が格納されます。式はノードの完了後に評価されます。
スクリプト ノードから — 戻り値
スクリプト ノードの戻り値は、下流で $vars.<scriptName>.outputとしてアクセスできます。スクリプト ノードには、変数を直接書き込み用に、他のノードと同じ [変数を更新] セクションもあります。
// The return value becomes $vars.script1.output
return {
orderTotal: $vars.httpRequest1.output.body.price * $vars.httpRequest1.output.body.quantity
};
// The return value becomes $vars.script1.output
return {
orderTotal: $vars.httpRequest1.output.body.price * $vars.httpRequest1.output.body.quantity
};
スコープ ルール
ノードは、以下からの出力にアクセスできます。
- 同じスコープ内の上流ノード — それ以前に実行されたのと同じレベルのノード
- 親コンテナ ノード — ノードがサブフローまたはループ内にある場合、親のスコープにアクセスできます
ノードは、以下からの出力にアクセスでき ません 。
- 別のブランチにあるノード — [判断] または [条件分岐 (switch)] によって実行が別のパスに送信された場合、それらのノードの出力は利用できません
- 実行されていないノード — 出力はノードの実行後にのみ存在します。
サブフローのスコープ設定
サブフローは、独自の変数スコープを作成します。サブフロー内のノードは、以下にアクセスできます。
- 同じサブフロー内の他のノード
- 親プロセスのスコープ
サブフロー内で更新される変数には、親プロセスとの競合を避けるために名前空間が設定されます。たとえば、subflow1 という名前のサブフロー内にcounterされた変数は、サブフローの外部から$vars.subflow1.counterとして参照されます。
サブフローの戻り値は、親プロセスで $vars.<subflowName>.outputとしてアクセスできます。
並列ブランチ
並列ブランチには、独立した実行コンテキストがあります。あるブランチ内で変数を変更しても、その変更は別のブランチで表示されません。マージ ノードは、パスを再結合する必要がある場合に、並列パスからの出力を統合します。
パターン
動的文字列を構築する
スクリプト ノード内のテンプレート リテラルは、変数と静的テキストを組み合わせます。
return `Hello ${firstName}, your order #${orderId} has shipped.`;
return `Hello ${firstName}, your order #${orderId} has shipped.`;
ループ内で値を蓄積する
アキュムレータパターンは、ループノードの前に初期化され、ループ本体内に追加された配列を使用します。
// Script node inside the Loop body
results.push(item.processedValue);
return results;
// Script node inside the Loop body
results.push(item.processedValue);
return results;
シークレット値をログに表示しないようにする
シークレット変数の値は UI 上ではマスクされますが、エクスポートされたトレース データに表示される場合があります。ログに記録すると、データ漏洩のリスクが伴います。
実際の例
API からユーザーを取得し、そのロールに基づいてルーティングするプロセス
ステップ 1 — HTTP 要求 (httpRequest1): GET https://api.example.com/users/42
ステップ 2 — スクリプト (script1): ユーザーのロールを抽出します
const user = $vars.httpRequest1.output.body;
return {
name: user.name,
role: user.role,
isAdmin: user.role === "admin"
};
const user = $vars.httpRequest1.output.body;
return {
name: user.name,
role: user.role,
isAdmin: user.role === "admin"
};
ステップ 3 — 判断 (decision1): 管理者ステータスの分岐
式: $vars.script1.output.isAdmin === true
- 管理者アクセス権を付与→ True
- False → 標準アクセスを付与する場合