アクティビティ(Activities)
抽象タスク(None Task)
種類が指定されていないタスクです。実行方法がまだ決まっていない初期のモデリング段階や、図の目的にとって種類が重要でない場合に使います。本質的には、後で具体的な種類に精緻化されるプレースホルダーです。
ユーザータスク(User Task)
人がソフトウェアのインターフェースを介して実行します。CRMのフォーム、Webアプリの画面、タスク管理ツールの項目などです。手動タスクとの主な違いは、担当者がタスクのステータスを追跡するシステムの中で作業する点です。
例:システム上で申請を承認する、フォームに入力する、セルフサービスポータルで文書をレビューする。
手動タスク(Manual Task)
人がBPMエンジンの関与なしに実行します。システムはこの作業がいつ開始・終了したかを自動的に検知できません。
例:紙の文書に署名する、顧客に電話をかける、対面で打ち合わせをする、宅配便で荷物を届ける。
サービスタスク(Service Task)
プログラムやサービスによって自動的に実行されます。人は関与しません。実行可能なプロセスで最も一般的なタスク種類です。
例:APIへのHTTPリクエスト、データベースへの書き込み、マイクロサービスの呼び出し、計算の実行。
送信タスク(Send Task)
特定の外部参加者(別のプロセスやシステム)にメッセージを送信し、応答を待たずに直ちに完了します。いわゆるファイア・アンド・フォーゲット(撃ちっぱなし)のパターンです。
例:顧客にメールを送る、メッセージキューにイベントを発行する、Webhookで通知を送る。
受信タスク(Receive Task)
外部参加者からの受信メッセージを待ちます。メッセージが届くまで、プロセスはこのタスクで一時停止します。
特殊なバリエーションとしてインスタンス化受信(instantiated Receive)があります。このタスクがプロセスの最初のステップである場合、メッセージの受信そのものが新しいプロセスインスタンスを生成します(メッセージ開始イベントの代替)。
例:取引先の返信を待つ、決済プロバイダーからのコールバックを待つ、配送完了の確認を待つ。
スクリプトタスク(Script Task)
プロセスモデル内に直接定義された組み込みスクリプト(コード)を実行します。サービスタスクとは異なり、コードは外部システムを呼び出さず、BPMエンジンの中で実行されます。
例:データ形式を変換する、期限を計算する、メール用の文字列を組み立てる、条件を判定する。
ビジネスルールタスク(Business Rule Task)
意思決定エンジン(例:DMNテーブル)を呼び出します。入力をルールセットに渡すと、判定結果が返されます。
例:顧客ランクに応じた割引を決定する、保険料を算出する、申請をポリシーに照らして確認する、問い合わせを分類する。
BP1 Modelerで開く →タスク種類:形は同じで、作業の進め方を示すのは隅のアイコンだけ
タスクマーカー
タスクの四角形の下辺中央に付く小さなアイコンです。タスクの振る舞いを示すものであり、種類を示すものではありません。
| マーカー | 意味 | 例 |
| ↻ ループ | 条件が満たされている間、タスクを繰り返す(1インスタンス、複数回の反復) | 文書を修正 → 提出 → 差し戻されたら繰り返す |
| ∥ 並列複数インスタンス | N個のインスタンスが同時に開始する — コレクションの要素ごとに1つ | すべての承認者に同時に通知を送る |
| ≡ 逐次複数インスタンス | 同じN個のインスタンスを、1つずつ順番に実行する | 各候補者を順番に面接する |
| ⏪ 補償 | ロールバック用のタスク。補償がトリガーされたときにのみ実行され、すでに完了した処理を取り消す | 「ホテルを予約」が完了した後の「予約をキャンセル」 |
| ~ Ad-hoc | サブプロセス内のタスクは任意の順序で実行でき、繰り返しやスキップも可能。内部に開始・終了イベントは置けない | 顧客コンサルティング中のステップを自由に選択 |
| + サブプロセス | 内部シーケンスが隠された複合アクティビティ。フローはその境界を越えられない | 「受注処理」が10の内部ステップを隠している |
BP1 Modelerで開く →ループ:1つのタスクを繰り返す — 「条件を交渉」は双方が合意するまで再実行される
BP1 Modelerで開く →並列複数インスタンス(3本線):「見積を依頼」は仕入先ごとに同時に実行され、すべての見積もりが揃うとプロセスが先へ進む
BP1 Modelerで開く →補償:「ホテル予約を取消」は、ホテルの予約後に旅行が取り消された場合にだけ実行される — フローではなく補償の境界イベントで結ばれている
サブプロセス
「+」で示される複合アクティビティです。独自のステップシーケンスを含みます。フローはその境界を越えられません。中間イベントは境界上に付けられます。
BP1 Modelerで開く →サブプロセスは独自のステップを包み込む:展開した「代金を支払う」は独自の開始と終了とともにステップを見せ、折りたたんだ「注文を発送」は「+」マーカーの奥に隠す
コールアクティビティ(Call Activity)
太い枠線。複数のプロセスで再利用されるグローバルなサブプロセス(例:「調達」)を参照します。
埋め込みサブプロセスとの違い:埋め込みサブプロセスではデータに直接アクセスできます(親とスコープを共有)。Call Activityは別個のプロセスであり、その入出力には明示的なデータマッピングが必要です。呼び出し時に何を渡し、戻り時に何を受け取るかを定義します。
BP1 Modelerで開く →Call Activity(太い枠線):「販売」と「リース」が同じグローバルプロセス「与信を審査」を呼び出す
アドホックサブプロセス(Ad-hoc)
マーカーは「~」。内部のアクティビティは任意の順序で実行でき、繰り返しやスキップも可能です。内部に開始・終了イベントは置けません。
BP1 Modelerで開く →アドホックサブプロセス(~):タスク間にフローはなく、任意の順序で実行され、繰り返しやスキップもできる
イベントサブプロセス
プロセス内の破線の枠。親プロセスがアクティブな間、開始イベントによってトリガーされます。割り込み型は親をキャンセルします。非割り込み型は並行して実行されます。
BP1 Modelerで開く →イベントサブプロセス(点線の枠):入力フローはなく、注文の処理中にメッセージ「住所変更」で開始する。破線の開始イベントは非割り込み型で、メインフローを止めない
ゲートウェイ(Gateways)
分岐と合流を制御します。ゲートウェイ自体は作業をしません。流れを振り分けるだけで、判断は手前のタスクで準備します。
排他ゲートウェイ(XOR)
最も一般的なゲートウェイです。分岐時には、条件が最初に満たされたちょうど1つの出力パスを有効化します。どの条件も満たされない場合、プロセスはエラーで失敗します(そのため、常に「デフォルト」分岐を定義しておくのが良い習慣です)。合流時には、到着した各トークンを他を待たずに直ちに通過させます。
たとえ:1方向にしか進めない道の分かれ道。
例:「注文は支払い済みか? → はい / いいえ」、「金額は10,000より大きいか? → はい / いいえ」。
ヒント:質問はゲートウェイの手前に書き、回答の選択肢は出力の矢印に添えましょう。
BP1 Modelerで開く →XORゲートウェイ:通るのはちょうど1つの分岐。合流のXORは待たずに注文を先へ送る
並列ゲートウェイ(AND)
分岐時には、すべての出力パスを条件なしで一斉に有効化します。判定は行いません。合流時には、すべての入力パスのトークンを待ち、すべて到着してはじめて1つのトークンを先に送ります。
たとえ:マネージャーが5人の従業員にタスクを配り、5人全員が終わるまで待つ。
例:商品の出荷と請求書の発行を並行して行う。複数の部門が同時に文書をレビューする。
アンチパターン:XORで分岐した分岐や、いずれか一方しか通らない分岐をANDで合流させてはいけません。ANDはすべての入力にトークンが揃うのを永遠に待ち続け、プロセスがデッドロックします。XORの後はXOR(または空のひし形)で合流させましょう。
BP1 Modelerで開く →ANDゲートウェイ:発送と請求書の発行が同時に始まり、合流のANDは両方を待つ
包含ゲートウェイ(OR)
XORとANDのハイブリッドです。分岐時には、条件に応じて1つ以上のパスを有効化します。各条件は独立して評価されます。合流時には、実際に有効化されたパスのトークンだけを待ちます(ANDのようにすべてを待つわけではありません)。
たとえ:ビュッフェ — 料理を1皿、2皿、あるいは全部取れるが、ゼロということはない。
例:顧客が配送・店頭受取・ギフト包装のいずれか(または複数)を選択した — 選ばれたオプションを実行し、すべての完了を待つ。
注意:ORゲートウェイは分析が難しくなります。分岐の多い図では同期のルールが直感的でないことがあります。すべてのエンジンが正しくサポートしているわけではありません。
BP1 Modelerで開く →ORゲートウェイ:物理商品、デジタル商品、またはその両方 — 1つか両方の分岐が実行され、合流のORは実際に通った分岐だけを待つ
イベントベースゲートウェイ
他とは根本的に異なり、データではなく、最初に発生したイベントによって経路を決めます。ゲートウェイの後には中間の待機イベント(タイマー、メッセージ、条件、シグナル)を配置します。いずれか1つが発火した時点で、残りはキャンセルされます。
たとえ:候補者に内定を出して返事を待つ — 返事が来れば先に進み、1週間返事がなければ次の候補者に移る。
例:タイマー付きで支払いを待つ(3日以内に未払い → 注文をキャンセル)。顧客の返信または期限のいずれかを待つ。
BP1 Modelerで開く →イベントベースゲートウェイ:先に起きたほうが勝つ — 入金があれば注文を発送し、3日間なければキャンセルする
複合ゲートウェイ
分岐ロジックが標準のゲートウェイでは表現できない場合に使います。合流条件は式で定義します(例:「5つの分岐のうち3つが完了したら続行」、「最初の返信が届き、かつ10分が経過したとき」)。
実務では:使用頻度は低く、すべてのBPMエンジンがサポートしているわけではありません。XOR / AND / ORの組み合わせで足りるなら、そちらを選びましょう。
なし(デフォルトの排他)
マーカーのないひし形です。意味的には排他ゲートウェイ(XOR)と等価で、BPMN標準では十字マークの省略が認められています。一部の方法論者はこれを悪い慣行だとみなします。読みやすさを損なうためです。作成者がマーカーを付け忘れたのか、あえてXORを選んだのか区別がつきません。
イベント(Events)
基本概念
イベントは起こること(事実)を表し、能動的な処理であるタスクとは対照的です。円で描かれます。
キャッチ(Catching)(塗りつぶしなしのマーカー)は待機、スロー(Throwing)(塗りつぶし)は送出を表します。境界イベントには、割り込み型(実線)と非割り込み型(破線)があります。
イベント一覧表
「—」=標準で定義されていないことを示します。
| 種類 | 開始 | 中間 | 終了 |
| 通常 | イベントサブ | 非割り込み | キャッチ | 境界 | 境界・非割り込み | スロー | |
| None(なし) | | — | — | — | — | — | | |
| ✉ メッセージ | | | | | | | | |
| ⏱ タイマー | | | | | | | — | — |
| ⚡ エラー | — | | — | — | | — | — | |
| ▲ シグナル | | | | | | | | |
| 📋 条件 | | | | | | | — | — |
| ↗ エスカレーション | — | | | — | | | | |
| ⬤ 終了 | — | — | — | — | — | — | — | |
| ⏪ 補償 | — | | — | — | | — | | |
| ✖ キャンセル | — | — | — | — | | — | — | |
| ➡ リンク | — | — | — | | — | — | | — |
| ⬠ 複数 | | | | | | | | |
| ➕ 並列複数 | | | | | | | — | — |
メッセージ(Message)
特定の相手とのやり取り:メール、電話、HTTP、push。すべての位置で使えます。
BP1 Modelerで開く →メッセージ:ストアのメッセージ終了イベントが集荷依頼を送り、宅配業者のメッセージ開始イベントが新しいプロセスを始める
タイマー(Timer)
日時、間隔、カウントダウン(期限)。キャッチのみ。
BP1 Modelerで開く →タイマー:スケジュールによる開始、1日後の非割り込み型リマインダー、2日後の割り込み型の期限
エラー(Error)
重大な失敗。キャッチは境界のみ、スローは終了のみ。
BP1 Modelerで開く →エラー:カードへの請求に失敗すると、境界エラーがタスクを中断し、注文はキャンセルへ進む
条件(Conditional)
外部の条件(「在庫が最低水準を下回った」)を待ちます。キャッチのみ。
BP1 Modelerで開く →条件:確認後、プロセスは商品の在庫が揃うまで待ち、それから注文を発送する
シグナル(Signal)
ブロードキャスト(宛先付きメッセージとは対照的)。購読しているすべての対象が反応します。
BP1 Modelerで開く →シグナル:本社が「製品リコール」をブロードキャストし、それを待ち受けるすべての店舗がそれぞれのプロセスを開始する — メッセージフローは不要
終了(Terminate)
プロセスインスタンス全体を直ちに停止します。終了イベントのみ。
BP1 Modelerで開く →Terminateなし:並列の各分岐がそれぞれの終了に達し、インスタンスは長いほうの分岐が終わる45分後にようやく完了する
タスク3が終わった後にタスク2を続ける意味がなくなった場合はどうでしょうか。そのときは次のパターンを使います:
BP1 Modelerで開く →Terminateあり:応急処置でチケットが解決すれば、Terminate終了がインスタンス全体を即座に停止する — まだ実行中の「原因を調査」も含めて
リンク(Link)
フローの「テレポート」。スローとキャッチのペアが長い矢印を置き換えます。中間イベントのみ。
BP1 Modelerで開く →リンク:スローの「発送」リンクが1行目を終え、キャッチのリンクが次の行で続ける — 長く横切る矢印の代わりになる
補償(Compensation)
すでに完了した処理を取り消します。補償タスクは関連(アソシエーション)で結ばれます。
BP1 Modelerで開く →補償:補償終了イベントが完了済みの「カードに請求」の境界イベントをトリガーし、その補償ハンドラーが代金を返金する
エスカレーション(Escalation)
サブプロセスから親へ送られます。エラーではありません。非割り込み型にもできます。
BP1 Modelerで開く →エスカレーション:配送サブプロセスが「配送遅延」をスローし、非割り込み型の境界イベントがそれをキャッチして、配送を続けたまま顧客に通知する
キャンセル(Cancel)
トランザクションの文脈でのみ使用します。終了ではロールバック、境界ではキャッチ。
データ・成果物・フロー
データオブジェクト(Data Object)
角を折った「紙」の形。プロセスインスタンス内でタスク間で作成・消費・受け渡しされる情報を表します。インスタンスが生存している間だけ存在します。
例:顧客からの申請、契約書のドラフト、途中で組み立てられていくレポート。
データストア(Data Store)
円柱の形。プロセスインスタンスより長く存続する永続的なストレージです。データベース、レジストリ、ファイルストアなど。タスクはここから読み書きします。
例:CRM、ERP、注文データベース、文書アーカイブ。
データ入力(Data Input) / データ出力(Data Output)
プロセスまたはサブプロセスの境界にあるパラメータです。入力は外部から与えられるもの、出力は返されるもの。中抜き/塗りつぶしの三角形が付いた矢印で表します。
例:「調達」サブプロセスは品目リストを入力として受け取り、請求書を出力として返す。
テキスト注釈(Text Annotation)
破線で任意の要素に付けるコメントです。実行には影響しません。図の読み手に説明を補うためだけに存在します。
グループ(Group)
破線の角丸長方形。要素の視覚的なグルーピング(例:「すべての物流タスク」)です。実行上の意味は持たず、フローはその境界を自由に越えられます。
シーケンスフロー(Sequence Flow)
塗りつぶしの矢じりを持つ実線の矢印。1つのプール内での実行順序を定義します。プールの境界を越えることはできません。
条件フロー(始点に小さなひし形が付く)は、条件が真の場合にのみ発火します。ゲートウェイを使わずにタスクから出る矢印に用います。
デフォルトフロー(始点に斜線マークが付く)は、XOR/ORゲートウェイや条件分岐のフォールバック経路で、他のどの条件も成立しない場合に選ばれます。
メッセージフロー(Message Flow)
中抜きの矢じりを持つ破線の矢印。異なるプール同士をつなぎ、独立した参加者間でやり取りされるメッセージを表します。1つのプール内では使いません。
例:顧客がオンラインストアに注文を送る。銀行が支払い確認を送る。
トランザクション(Transaction)
二重の枠線を持つサブプロセス。ACIDの性質を持ち、内部のすべての処理が正常にコミットされるか、あるいはCancelイベントによって(補償を伴って)トランザクション全体がロールバックされます。分散処理の一貫性を保つために使います。
例:「航空券+ホテル+レンタカー」のパッケージ予約 — どれか1つでも失敗すれば、予約全体がキャンセルされる。