フォーク

フォークとは、1つのパス（経路）を通るフローが分岐し、無条件に複数の並列なパスへと進行するメカニズムをいう. Fork. Forking Flow.

フォークの概要
フォークは、BPMNにおける分岐メカニズムの一種で、AND分岐（並列分岐）のメカニズムを指すものである. フォークでは、1つのフローが分岐して複数のフローとなり、プロセスがその複数のフロー上を同時並行に進んでいく. このように根元が一つで先端が複数に分かれているところが食器のフォークに似ているため、これになぞらえた「フォーク」という名称が一般化した.

OR分岐やXOR分岐などの判断分岐と異なり、条件の判断によってフローの制御を行うようなことはない. また、並列に並んだ複数のアクティビティに順序はなく、すべて同時に実行される. すなわち、フォークにおいてトークンは分割され、分岐したすべての経路に流されることになる.

フォークでは、プロセスが無条件に複数のフローへと進行するため、分岐点においてフローに条件式等が付されない. したがって、フォークにおいて用いられるシーケンスフローは、非制御シーケンスフロー（Uncontrolled Sequence Flow）である.

フォークの表記法
BPMNでは、大きく分けて3種類のフォークの表記法がある.

アクティビティ + シーケンスフロー （左図）
最も単純な方法である. 複数の出力シーケンスフローを直接的に1つのアクティビティや開始イベントと接続させる. Questetra BPM Suiteは、このタイプを採用する.

アクティビティ + シーケンスフロー + 並列ゲートウェイ （中央図）
ゲートウェイが用いられると、フローが何らかの形で分岐していることがわかる. ここでは、並列ゲートウェイ（Parallel Gateway）を用いる必要があるので、ゲートウェイを表す菱形の図形の内部に十字型のマーカーを置く. そうすることで、ここでフォーク（AND分岐）が行われるということがはっきりと示される. 以上の点から、このモデリング法を最も便宜に適うもの（best practice）と考えるプロセスモデラもいる.

アクティビティ + シーケンスフロー + 展開されたサブプロセス （右図）
展開されたサブプロセスの内部に一連のアクティビティをまとめ、グループ化する. このような展開されたサブプロセスは「並列ボックス（Parallel Box）」と呼ばれ、開始イベントや終了イベントはその中に書き込まれない. この表記法では、複数のアクティビティが同時並行で実行されるということが明確に分かるが、一般的に用例は少ない.

使用場面としては、「Activity0」の実行後に「Activity1-1」、「Activity1-2」、「Activity1-3」を実行することは確定しているが、その3つのアクティビティの実行の有無や順序がモデリング段階では分かっていない状態（アドホックな状態）などである.

関連記事

 * BPMN
 * アクティビティ
 * ゲートウェイ
 * フロー
 * シーケンスフロー
 * 分岐
 * 結合
 * 併合

参考文献

 * BPMN1.1仕様（2008-01-17）