- はじめに
- 基本情報
- 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、または配列
- 方向 — 入力、出力、または双方向です
変数を使用すべき状況とノード出力を使用する場合:
- ノードの出力 は、あるノードから次のノードに渡されるデータを適合させます。これは最も一般的なパターンです。
- 変数は、 プロセス全体でアクセスできる必要がある値、またはプロセス自体の入力と出力を定義する値に適合します。
変数に明確な名前を付ける: ハイフンまたはキャメルケースを使用したわかりやすい小文字の名前 ( 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
これは、すべての種類のトリガーに適用されます。プロセスに複数のトリガーがある場合、各トリガーは独自の入力を所有します。下流のノードは、実行を開始した特定のトリガーを参照します。
変数の定義
変数の定義は、[プロパティ] パネルの [ 変数 ] タブにあります。各定義には変数の名前、型、方向が格納されるため、実行中に一貫して値を参照できます。
変数の更新
変数は、ノードの構成またはスクリプト ノードの出力によって更新できます。
任意のノードから — [変数を更新] セクション
すべてのノードの [プロパティ] パネルに [ 変数を更新 ] セクションがあります。セクションには、書き込み可能な変数のターゲット (出力または双方向) と、それに割り当てられた 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 → 標準アクセスを付与する場合