- はじめに
- 基本情報
- プロセス モデリング
- プロセスの実装
- プロセスの操作
- プロセスの監視
- プロセスの最適化
- 参考情報

Maestro ユーザー ガイド
マルチインスタンス マーカー
概要
List 変数の反復処理によって複数の実行を作成するために、マーカーを使用して特定のタスクの実行を設定します。詳しくは、「BPMN 入門」の章の「マーカー」をご覧ください。
選択した任意の種類のタスクで、[要素を変更] を選択してマーカーの種類を 1 つ選択します。

マルチインスタンス マーカーの追加方法
BPMN デザイナーから、サポートされている任意のタスクをマルチインスタンス タスクに変換できます。
- キャンバス上でタスクを選択します。
- タスクの上にある要素ツールバーで、[要素を変更] を選択します。
- マルチインスタンス マーカー (シーケンシャルまたは並列のアイコン) を選択します。
- BPMN マーカーがタスクに追加されます。
- [プロパティ] パネルを開き、[マルチインスタンス] セクションを展開して [項目] リストを設定します。
備考
- BPMN マーカーを追加しても、エイリアスやモードなどの追加のコントロールは表示されません。唯一の設定は、[マルチインスタンス] セクションの [項目] に表示されます。
- マーカーは宣言的です。実行モードは Maestro によって自動的に決定されます。
- マルチインスタンスはタスクでのみサポートされ、サブプロセスではサポートされません。
使用すべきタイミング
マルチインスタンス実行は、アクティビティをコレクション全体に展開する場合に使用します。以下に例を示します。
- 請求書 ID のリストを検証する
- レコードを強化する
- 受信者ごとの通知を送信する
このパターンは、手動ループよりも拡張性に優れており、オブザーバビリティが維持されます。
構成
- リストの各要素に対して実行するタスクを選択します。
- [プロパティ] パネルで、[マルチインスタンス] を展開します。
- [項目] で、反復処理する要素が含まれているリスト変数を選択します (例:
vars.invoiceList)。
Maestro によってリスト要素ごとに 1 つの実行が作成されます。
現在の項目をインデックスまたはそのプロパティ (vars.invoiceList[index].id) を使用して参照します。 - (任意) 項目の個々の実行をリトライするには、[エラー処理] セクションを展開し、[失敗時にリトライ] トグルをオンにします。
- プロセスを実行またはデバッグし、[実行証跡] のリスト要素ごとに 1 つのアクティビティ インスタンスを参照します。
反復子の式 (利用可能な場合)
一部のアクティビティでは、現在の項目を実行ごとの正確な入力値にマッピングするための専用のフィールドが提供されています。
例:
item.invoiceIditem.customer.email{ id: item.id, flags: ["recheck"] }
反復子は、マルチインスタンス タスクがコレクションを処理する場合に、個々の項目を表します。
正しい構文は、次のように反復処理が発生する場所によって異なります。
iterator.item — タスクにマルチインスタンス マーカーが適用されている場合

[プロパティ] パネルのガイダンス
- アクション: タスクの実行方法を選択します (Integration Service のアクション、エージェント アクション、またはモデリング目的の場合は [なし])。
- 入力: 各反復処理の値を指定します。
例:- 入力:
invoiceId - 値:
vars.invoiceList[index].id
- 入力:
- 出力: すべての出力が自動的に集計されます。
- 変数を更新: 各反復処理の後、またはサブプロセスの完了後に更新する内容を選択します。
iterator[0].item — マルチインスタンス タスクから呼び出されるサブプロセス内で作業を行う場合

[プロパティ] パネルのガイダンス
- アクション: サブプロセスが外部システム、API、またはエージェントとどのように対話するかを設定します。
- 入力: 現在の要素またはそのプロパティをマッピングします。
例:
- 入力:
currentItemId - 値:
vars.itemsToProcess[index].id
例: マルチインスタンス実行を使用して請求書のリストを検証する
この例では、サービス タスクを、請求書ごとに 1 回実行するように設定する方法を示します。
1. リスト変数を準備する
- データ マネージャーを開きます。
- 変数を作成します。
- Name (名前):
invoiceList - 種類: オブジェクトの配列または文字列の配列
- 値の例:
["INV-001", "INV-002", "INV-003"]
- Name (名前):
2. サービス タスクを追加する
- サービス タスクを追加し、「Validate invoice)」という名前を付けます。
- [プロパティ] パネルを開き、[マルチインスタンス] を展開します。
- [項目] で
invoiceListを選択します。
3. 現在の項目を入力で使用する
[入力] セクションで、以下の操作を実行します。
- 例: InvoiceId =
vars.invoiceList[index]と設定します。 - リストにオブジェクトが含まれている場合:
vars.invoiceList[index].Idを使用します。
4. 実装を設定する
[実装] セクションで、以下を選択します。
- アクション: エージェントを開始して待機
- エージェント: 請求書検証エージェント
5. プロセスをデバッグする
- [ステップごとにデバッグ] を選択します。
- リストの項目ごとに Validate invoice の 1 回の実行が表示されます。
- [実行証跡] に、各項目の実行が個別に表示されます。
並列マルチインスタンスの例
- サービス タスクを追加し、「Validate invoice」という名前を付けます。
- [要素を変更] を選択し、[並列マルチインスタンス] を選択します。
- [プロパティ] パネルで [マルチインスタンス] を展開します。
- [項目] で、リスト変数 (例:
vars.invoiceList) を選択します。 - プロセスをデバッグし、[実行証跡] のリスト要素ごとに 1 つのアクティビティ インスタンスを参照します。
ループ処理のサポート
マルチインスタンスを使用して手動ループを置き換えます。コレクションをループ境界として扱います。シーケンシャル モードでは、項目は順番に処理され、各項目が終了するまで待ってから次の項目が開始されます。並列モードでは、一度に複数の項目が開始され、すべての項目が完了するか、停止条件を満たすと完了します。項目ごとの作業は、べき等にして存続時間を短くしてください。1 つに結合した出力が必要な場合は、集計を使用します。
ランタイムの動作
- ファンアウト/ファンイン: Maestro は、項目ごとに 1 つのアクティビティ インスタンスを作成し、すべてのインスタンスが完了すると (下流でカスタムの停止ポリシーを使用している場合はそれより前に)、そのグループを完了します。
- 順序:シーケンシャル モードでは保証されます。並列モードでは保証されません。
- 同時実行: 並列モードでは、項目は同時に実行されます。ただし、プラットフォームの制限とリソースの可用性が適用されます。
- 失敗: 各項目の結果は個別に扱われます。下流のロジックで、部分的な失敗の処理方法 (例: 続行、リトライ、しきい値に基づて停止) を定義する必要があります。
- オブザーバビリティ: 各項目の実行が追跡されるので、項目ごとのステータスと集計された結果を確認できます。
例
シナリオ: 外部 API から請求書 ID のリストを受け取り、2 つ目の API を使用して各請求書を検証する必要があります。
プラン:
-
請求書 ID の動的なリスト (前のステップまたは外部への問い合わせから得られたリスト) を取得します。
-
検証アクティビティに並列マルチインスタンス マーカーを適用して、請求書ごとに 1 つのアクションを展開します。
-
集計を使用し、下流のステップ用に、結合された単一の出力 (
{invoiceId, isValid, errors}のリストなど) を生成します。
ベスト プラクティス
- 展開の前にコレクションを検証します (空、null、または大きすぎるリスト)。
- 項目ごとの作業は、存続時間を短くしてフォールト トレラントな状態を保ちます。必要に応じてリトライを追加します。
- 必要な情報だけを集計します。大量に集計すると、パフォーマンスや可読性に影響する可能性があります。
- 達成基準を明確にします (例:
proceed if ≥95% items succeed)。
現在のところ、並列マルチインスタンスでは、50 個のバッチの要素が実行されます。
表記法と概念のガイダンスについては「マーカー」 (BPMN 入門) をご覧ください。Maestro でサポートされているすべての BPMN 要素のリストについては「BPMN でサポートされている要素」をご覧ください。
サブプロセスまたはコール アクティビティで作業している場合、変数のスコープ、入出力のマッピング、終了イベント変数については、「サブプロセス」をご覧ください。
- 概要
- マルチインスタンス マーカーの追加方法
- 使用すべきタイミング
- 構成
- 反復子の式 (利用可能な場合)
iterator.item— タスクにマルチインスタンス マーカーが適用されている場合iterator[0].item— マルチインスタンス タスクから呼び出されるサブプロセス内で作業を行う場合- 例: マルチインスタンス実行を使用して請求書のリストを検証する
- 1. リスト変数を準備する
- 2. サービス タスクを追加する
- 3. 現在の項目を入力で使用する
- 4. 実装を設定する
- 5. プロセスをデバッグする
- 並列マルチインスタンスの例
- ループ処理のサポート
- ランタイムの動作
- 例
- ベスト プラクティス