学習資料 · OFL-1.1

BPMN 2.0 リファレンス

参加者(Participants)

プール
Participant
レーン
Lane

Pool(プール)

プロセスのコンテナであり、インタラクションの参加者を表します。プール同士はメッセージフローによってのみデータをやり取りします。折りたたんで詳細を隠すこともできます。

レーンを含むプール:オーケストレーションモデル
「指揮者」としてのプール:1つの調整役プロセスが参加者にタスクを割り振る
コラボレーション:2つのプールがメッセージをやり取りする
コラボレーション:独立したプール(顧客とピザ店)がメッセージフローで接続される

Lane(レーン)

プール内の帯状の区分で、誰がタスクを実行するか(役職、ロール、部門、ITシステム)を示します。

レーン:ロールごとに分割されたタスク
「シェアハウス」プール内のレーン — タスクがルームメイト(佐藤、鈴木、高橋)に分担され、XORゲートウェイが何を作るかを選ぶ

アクティビティ(Activities)

タスクの種類

抽象
Task (None)
手動
Manual
ユーザー
User Task
送信
Send Task
受信
Receive Task
スクリプト
Script Task
サービス
Service Task
ビジネスルール
Business Rule

抽象タスク(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テーブル)を呼び出します。入力をルールセットに渡すと、判定結果が返されます。

例:顧客ランクに応じた割引を決定する、保険料を算出する、申請をポリシーに照らして確認する、問い合わせを分類する。
すべてのBPMNタスク種類を1つの図にまとめたもの
タスク種類の一覧:抽象、手動、ユーザー、受信、送信、スクリプト、サービス、ビジネスルール

タスクマーカー

タスクの四角形の下辺中央に付く小さなアイコンです。タスクの振る舞いを示すものであり、種類を示すものではありません。

ループ
Loop
複数インスタンス ∥
Parallel MI
複数インスタンス ≡
Sequential MI
補償
Compensation
Ad-hoc ~
Ad-hoc
サブプロセス +
Subprocess
マーカー意味
↻ ループ条件が満たされている間、タスクを繰り返す(1インスタンス、複数回の反復)文書を修正 → 提出 → 差し戻されたら繰り返す
∥ 並列複数インスタンスN個のインスタンスが同時に開始する — コレクションの要素ごとに1つすべての承認者に同時に通知を送る
≡ 逐次複数インスタンス同じN個のインスタンスを、1つずつ順番に実行する各候補者を順番に面接する
⏪ 補償ロールバック用のタスク。補償がトリガーされたときにのみ実行され、すでに完了した処理を取り消す「ホテルを予約」が完了した後の「予約をキャンセル」
~ Ad-hocサブプロセス内のタスクは任意の順序で実行でき、繰り返しやスキップも可能。内部に開始・終了イベントは置けない顧客コンサルティング中のステップを自由に選択
+ サブプロセス内部シーケンスが隠された複合アクティビティ。フローはその境界を越えられない「受注処理」が10の内部ステップを隠している
タスクに付いたループマーカー
ループマーカー(↻):条件が満たされるまでタスクを繰り返す
タスクに付いた複数インスタンスマーカー
並列複数インスタンス(∥):「ピザを選ぶ」がルームメイトごとに1インスタンスずつ同時に実行される
タスクに付いた補償マーカー
補償マーカー(⏪):完了済みの処理を取り消すときに実行されるロールバック用タスク

サブプロセス

「+」で示される複合アクティビティです。独自のステップシーケンスを含みます。フローはその境界を越えられません。中間イベントは境界上に付けられます。

サブプロセス:隠された複雑さ
サブプロセスは内部シーケンスをカプセル化する — 外からは「+」マーカーだけが見える

コールアクティビティ(Call Activity)

太い枠線。複数のプロセスで再利用されるグローバルなサブプロセス(例:「調達」)を参照します。

埋め込みサブプロセスとの違い:埋め込みサブプロセスではデータに直接アクセスできます(親とスコープを共有)。Call Activityは別個のプロセスであり、その入出力には明示的なデータマッピングが必要です。呼び出し時に何を渡し、戻り時に何を受け取るかを定義します。
Call Activity:複数のプロセスで再利用される共有サブプロセス
Call Activity:単一のグローバルサブプロセス「商品を購入」(太い枠線)が、「受注処理」と「在庫管理」の両方から呼び出される

アドホックサブプロセス(Ad-hoc)

マーカーは「~」。内部のアクティビティは任意の順序で実行でき、繰り返しやスキップも可能です。内部に開始・終了イベントは置けません。

アドホックサブプロセス:任意の順序のタスク
Ad-hoc(~):内部のタスクは任意の順序で実行され、繰り返すこともできる

イベントサブプロセス

プロセス内の破線の枠。親プロセスがアクティブな間、開始イベントによってトリガーされます。割り込み型は親をキャンセルします。非割り込み型は並行して実行されます。

イベントサブプロセス
イベントサブプロセス(破線の枠):アクティブな親プロセス内でイベントによってトリガーされる

ゲートウェイ(Gateways)

分岐と合流を制御します。ゲートウェイはタスクではありません! 判断はゲートウェイの手前で行われます。

排他 XOR
Either/Or
並列 AND
And/And
包含 OR
One or more
イベントベース
Event-based
複合
Complex
なし
None

排他ゲートウェイ(XOR)

最も一般的なゲートウェイです。分岐時には、条件が最初に満たされたちょうど1つの出力パスを有効化します。どの条件も満たされない場合、プロセスはエラーで失敗します(そのため、常に「デフォルト」分岐を定義しておくのが良い習慣です)。合流時には、到着した各トークンを他を待たずに直ちに通過させます。

たとえ:1方向にしか進めない道の分かれ道。

例:「注文は支払い済みか? → はい / いいえ」、「金額は10,000より大きいか? → はい / いいえ」。
ヒント:質問はゲートウェイの手前に書き、回答の選択肢は出力の矢印に添えましょう。
排他ゲートウェイ(XOR)— 例
XORゲートウェイ:「どの料理にする?」→ 複数のレシピから1つを選ぶ(有効化されるパスは1つだけ)

並列ゲートウェイ(AND)

分岐時には、すべての出力パスを条件なしで一斉に有効化します。判定は行いません。合流時には、すべての入力パスのトークンを待ち、すべて到着してはじめて1つのトークンを先に送ります。

たとえ:マネージャーが5人の従業員にタスクを配り、5人全員が終わるまで待つ。

例:商品の出荷と請求書の発行を並行して行う。複数の部門が同時に文書をレビューする。
アンチパターン:XORで分岐した分岐や、いずれか一方しか通らない分岐をANDで合流させてはいけません。ANDはすべての入力にトークンが揃うのを永遠に待ち続け、プロセスがデッドロックします。XORの後はXOR(または空のひし形)で合流させましょう。
並列ゲートウェイ(AND)— 例
ANDゲートウェイ:すべての分岐が並行して開始し、合流時に同期される(すべてを待つ)

包含ゲートウェイ(OR)

XORとANDのハイブリッドです。分岐時には、条件に応じて1つ以上のパスを有効化します。各条件は独立して評価されます。合流時には、実際に有効化されたパスのトークンだけを待ちます(ANDのようにすべてを待つわけではありません)。

たとえ:ビュッフェ — 料理を1皿、2皿、あるいは全部取れるが、ゼロということはない。

例:顧客が配送・店頭受取・ギフト包装のいずれか(または複数)を選択した — 選ばれたオプションを実行し、すべての完了を待つ。
注意:ORゲートウェイは分析が難しくなります。分岐の多い図では同期のルールが直感的でないことがあります。すべてのエンジンが正しくサポートしているわけではありません。
包含ゲートウェイ(OR)— 例
ORゲートウェイ:条件に応じて1つ以上のパスが有効化される。合流では実際に通った分岐だけを待つ

イベントベースゲートウェイ

他とは根本的に異なり、データではなく、最初に発生したイベントによって経路を決めます。ゲートウェイの後には中間の待機イベント(タイマー、メッセージ、条件、シグナル)を配置します。いずれか1つが発火した時点で、残りはキャンセルされます。

たとえ:ピザを注文した — 60分たっても届かなければピザ店に電話し、それより早く届けば食べる。

例:タイマー付きで支払いを待つ(3日以内に未払い → 注文をキャンセル)。顧客の返信または期限のいずれかを待つ。
イベントベースゲートウェイ — 例
イベントベースゲートウェイ:最初に発生したイベントによって経路を決める(タイマー対メッセージ)

複合ゲートウェイ

分岐ロジックが標準のゲートウェイでは表現できない場合に使います。合流条件は式で定義します(例:「5つの分岐のうち3つが完了したら続行」、「最初の返信が届き、かつ10分が経過したとき」)。

実務では:使用頻度は低く、すべてのBPMエンジンがサポートしているわけではありません。XOR / AND / ORの組み合わせで足りるなら、そちらを選びましょう。

なし(デフォルトの排他)

マーカーのないひし形です。意味的には排他ゲートウェイ(XOR)と等価で、BPMN標準では十字マークの省略が認められています。一部の方法論者はこれを悪い慣行だとみなします。読みやすさを損なうためです。作成者がマーカーを付け忘れたのか、あえてXORを選んだのか区別がつきません。

イベント(Events)

基本概念

イベントは起こること(事実)を表し、能動的な処理であるタスクとは対照的です。円で描かれます。

開始
Thin circle
中間
Double circle
終了
Thick circle

キャッチ(Catching)(塗りつぶしなしのマーカー)は待機、スロー(Throwing)(塗りつぶし)は送出を表します。境界イベントには、割り込み型(実線)と非割り込み型(破線)があります。

イベント一覧表

アイコンは bpmn-font(Camunda)より。「—」=標準で定義されていないことを示します。

種類開始中間終了
通常イベントサブ非割り込みキャッチ境界境界・非割り込みスロー
None(なし)
✉ メッセージ
⏱ タイマー
⚡ エラー
▲ シグナル
📋 条件
↗ エスカレーション
⬤ 終了
⏪ 補償
✖ キャンセル
➡ リンク
⬠ 複数
➕ 並列複数

メッセージ(Message)

特定の相手とのやり取り:メール、電話、HTTP、push。すべての位置で使えます。

メッセージイベント — 例
メッセージイベント:ピザ注文をスローイベントとして送ると、受信側でプロセスがトリガーされる

タイマー(Timer)

日時、間隔、カウントダウン(期限)。キャッチのみ。

タイマーイベント — 例
タイマー:開始(スケジュール実行)、割り込み境界(期限)、非割り込み境界(リマインダー)

エラー(Error)

重大な失敗。キャッチは境界のみ、スローは終了のみ。

エラーイベント — 例
「商品を購入」サブプロセスの境界エラーイベント:失敗するとフローは「購入失敗の処理」ハンドラーへ進み、正常系は請求書の支払いへと続く

条件(Conditional)

外部の条件(「オーブンが温まった」)を待ちます。キャッチのみ。

条件イベント — 例
条件:プロセスが外部条件の成立を待つ — ピザは180°になるまでオーブンに入れず、焼き上がるまで取り出さない

シグナル(Signal)

ブロードキャスト(宛先付きメッセージとは対照的)。購読しているすべての対象が反応します。

シグナルイベント — 例
シグナル:テレビのピザCMがシグナル開始でプロセスを起動する。購入後に食欲がわき(条件)、ピザを食べる。シグナル終了で評価を pizzatest.de へブロードキャストする

終了(Terminate)

プロセスインスタンス全体を直ちに停止します。終了イベントのみ。

通常の終了イベントを持つ並列プロセス
Terminateなし:AND分岐の後、トークンは並行して進みます。タスク2は45分、タスク3は30分かかり、両方のトークンがそれぞれの通常(none)終了イベントで消費される55分後にインスタンスは完了します。

タスク3が終わった後にタスク2を続ける意味がなくなった場合はどうでしょうか。そのときは次のパターンを使います:

Terminate終了イベントを使った同じプロセス
Terminateあり:タスク3の後に「タスク2はまだ必要か?」という条件を確認します。不要なら、フローはTerminateイベントへ進み、インスタンスの残りすべてのトークン(実行中のタスク2を含む)を即座に消費します。Terminateは終了イベントとしてのみ有効です。
リンクイベント — 例
リンクイベント:「テレポート」— スローがフローを送り出し、キャッチが受け取ることで、長く横切る矢印を置き換える

補償(Compensation)

すでに完了した処理を取り消します。補償タスクは関連(アソシエーション)で結ばれます。

補償イベント — 例
補償:完了済みタスクに付いた境界イベント(輪郭の⏪)が、関連を介して補償ハンドラーをトリガーする

エスカレーション(Escalation)

サブプロセスから親へ送られます。エラーではありません。非割り込み型にもできます。

エスカレーションイベント — 例
エスカレーション:「配送」サブプロセスが「遅延」をスローする。親は非割り込みの境界エスカレーションでこれをキャッチし、並行して顧客に通知する — メインフローは続行する

キャンセル(Cancel)

トランザクションの文脈でのみ使用します。終了ではロールバック、境界ではキャッチ。

データ・成果物・フロー

データオブジェクト
Data Object
データストア
Data Store
データ入力
Data Input
データ出力
Data Output
注釈
Text Annotation
グループ
Group
フロー
Sequence Flow
メッセージフロー
Message Flow
条件フロー
Conditional Flow
デフォルト
Default Flow
トランザクション
Transaction

データオブジェクト(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つでも失敗すれば、予約全体がキャンセルされる。

試してみませんか?

最初のBPMN図を無料で作成 — 登録もクレジットカードも不要です。

AIでBPMNフローチャートの生成を始める
例は camunda.com をもとに翻案しています。編集:BP1.AI