- 設計
アクティビティ図の書き方と記号一覧 スイムレーン例をPlantUMLで
アクティビティ図とは、仕事や処理の流れを「だれが・何を・どの順番で行うか」で表すUMLの図です。 フローチャートと似ていますが、同時に進む作業を表すフォークとジョイン、担当を分けるパーティション(スイムレーン)、作業の間を流れる書類やデータを表すオブジェクトノードといった、UMLならではの記号を持っています。
この記事では、記号ごとに「意味・PlantUMLの書き方・Mermaidでの代替」を並べた早見表と、スイムレーン・並行処理・分岐・ループをそのまま貼れるPlantUMLのコードで示します。Mermaidにはアクティビティ図専用の書き方が無いため、flowchart と状態遷移図へ書き換える方法も載せます。
確認環境:PlantUML 1.2026.8(OpenJDK 21.0.10 で実行)/Mermaid 12.1.0(@mermaid-js/mermaid-cli 12.0.0 と Chromium で描画)。掲載したコードは、エラーの例を除き、すべて図として出力できることを確認しています。
アクティビティ図の記号早見表(PlantUML・Mermaid対応)
「形」は PlantUML 1.2026.8 が描いた形です。Mermaid の列は flowchart で近い形を出す書き方です。
| 記号 | 形 | 意味 | PlantUMLの書き方 | Mermaidでの代替(flowchart) |
|---|---|---|---|---|
| 開始ノード | 黒い丸 | 流れの始まり | start |
S@{ shape: f-circ, label: "開始" } |
| アクション | 角の丸い四角形 | 1つの作業 | :在庫を確認する; |
A(["在庫を確認する"]) |
| 制御フロー | 矢印 | 作業の順番 | 行を上から順に書く。ラベルは -> 文字; |
A --> B、ラベルは A -- 文字 --> B |
| デシジョン | ひし形 | 条件で行き先を1つ選ぶ | if (条件?) then (はい) 〜 else (いいえ) |
D{"条件?"} |
| マージ | ひし形 | 分かれた流れを1本に戻す | endif(自動で描かれる) |
複数の矢印を同じノードへ向ける |
| フォーク | 太い横線(1本入り、複数出る) | 流れを同時に進む複数の流れへ分ける | fork 〜 fork again |
F@{ shape: fork, label: "フォーク" } |
| ジョイン | 太い横線(複数入り、1本出る) | 並行する流れがすべて終わるのを待って1本にする | end fork |
J@{ shape: fork, label: "ジョイン" } |
| アクティビティ終了 | 二重丸(中が黒) | 全体の終わり | stop |
E@{ shape: fr-circ, label: "終了" } |
| フロー終了 | 丸に× | その流れだけが終わる(ほかの流れは続く) | end |
X@{ shape: cross-circ, label: "フロー終了" } |
| オブジェクトノード | 四角形 | 作業の間を流れる書類やデータ | :購入申請書; <<object>> |
O["購入申請書"] |
| パーティション(スイムレーン) | 縦に区切ったレーン | 担当(人・部署・システム)ごとの区分 | |申請者| |
subgraph applicant["申請者"] 〜 end |
| グループ(パーティション) | 名前つきの枠 | 段階や機能のまとまり | partition "受付" { 〜 } |
subgraph 〜 end |
| シグナル送信 | 右がとがった五角形 | ほかへ通知を送る | :承認依頼を送る; <<sendSignal>> |
専用の形は無い。アクションの文言で表す |
| イベント受信 | 左がへこんだ五角形 | 通知や出来事を待つ | :承認結果を受け取る; <<acceptEvent>> |
専用の形は無い。アクションの文言で表す |
| 時間イベント | 砂時計 | 一定の時間を待つ | :3営業日待つ; <<timeEvent>> |
T@{ shape: hourglass, label: "時間イベント" } |
| 注釈(ノート) | 角が折れた四角形 | 補足の説明 | note right: 文字 |
N@{ shape: braces, label: "注釈" } |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「アクティビティ図の書き方と記号一覧 スイムレーン例をPlantUMLで」
フローチャートとの違い比較表
| 比べる点 | フローチャート | アクティビティ図 |
|---|---|---|
| 規格 | JIS X 0121(情報処理用流れ図) | UML(OMG が定める仕様) |
| 主な用途 | 1つのプログラムや手順の処理の流れ | 複数の担当にまたがる業務の流れ、ユースケースの流れ |
| 同時に進む作業 | 並行処理の記号はあるが、使う場面は少ない | フォークとジョインで表す。図の中心的な記号 |
| 担当の区別 | 記号としては持たない(レーンを足して描くことはある) | パーティション(スイムレーン)で表す |
| 書類・データの流れ | データ記号で入出力を表す | オブジェクトノードが作業の間を流れる |
| 開始と終了 | 端子(両端が丸い長方形)に「開始」「終了」と書く | 黒い丸で始まり、二重丸で終わる。文字は書かない |
| 終了の種類 | 1種類 | アクティビティ終了(全体)とフロー終了(その流れだけ)の2種類 |
| 分岐の合流 | 線をつなぐだけでよい | マージ(ひし形)で1本に戻す |
| 通知・待ち | 専用の記号は無い | シグナル送信、イベント受信、時間イベント |
選び方の目安は次のとおりです。
| 描きたいもの | 向いている図 |
|---|---|
| 1つの関数やバッチの処理手順 | フローチャート |
| 申請から承認、発注までのように担当が入れ替わる業務 | アクティビティ図(スイムレーン) |
| 同時に進む作業と、その待ち合わせ | アクティビティ図(フォークとジョイン) |
| オブジェクト間のメッセージのやり取りの順番 | シーケンス図 |
| 1つの対象が取る状態と、その移り変わり | 状態遷移図 |
PlantUMLでアクティビティ図を書く基本
PlantUMLのアクティビティ図は、上から順に実行される作業を1行ずつ書く形式です。矢印は自動で引かれます。
@startuml
title 備品の貸出(順次)
start
:貸出を申し込む;
:在庫を確認する;
:備品を渡す;
stop
@enduml
| 書き方 | 意味 |
|---|---|
@startuml 〜 @enduml |
図の始まりと終わり |
title 文字 |
図のタイトル |
start |
開始ノード |
:文字; |
アクション。コロンで始め、セミコロンで終える |
stop |
アクティビティ終了 |
ファイルに保存して、次のコマンドで画像にします。
java -jar plantuml.jar -tsvg p01_basic.puml # SVG で出力
java -jar plantuml.jar -tpng p01_basic.puml # PNG で出力
確認環境には Graphviz(dot コマンド)を入れていませんが、この記事のアクティビティ図はすべて出力できました。
分岐(デシジョンとマージ)の書き方
2つに分かれる分岐
@startuml
title 分岐(デシジョンとマージ)
start
:貸出を申し込む;
if (在庫がある?) then (はい)
:備品を渡す;
else (いいえ)
:入荷予定日を伝える;
endif
:記録を残す;
stop
@enduml
if でひし形(デシジョン)が描かれ、endif の位置で2本の流れが1本に戻ります。かっこの中の「はい」「いいえ」は、矢印に付くガード条件(その道を通る条件)です。
3つ以上に分かれる分岐
@startuml
title 3つ以上に分かれる分岐
start
:申請金額を確認する;
if (1万円未満) then (はい)
:担当者が承認する;
elseif (10万円未満) then (はい)
:課長が承認する;
else (それ以外)
:部長が承認する;
endif
stop
@enduml
1つの値で行き先が決まるときは switch が読みやすくなります。1つのひし形から3本の矢印が出て、下でもう1つのひし形に集まります。
@startuml
title switch で書く多分岐
start
switch (申請の種類)
case (新規)
:台帳に登録する;
case (変更)
:台帳を更新する;
case (取消)
:台帳から削除する;
endswitch
stop
@enduml
ループ(繰り返し)の書き方
前判定:while
@startuml
title 前判定のループ(while)
start
while (未処理の申請がある?) is (ある)
:申請を1件取り出す;
:内容を確認する;
endwhile (ない)
:一覧を閉じる;
stop
@enduml
後判定と差し戻し:repeat と backward
1回は必ず実行してから条件を見る流れは repeat で書きます。backward を使うと、戻る矢印の途中にアクションを置けます。承認の差し戻しを表すのに向いています。
@startuml
title 後判定のループ(repeat)と差し戻し
start
repeat
:申請書を書く;
:上長に提出する;
backward :指摘を直す;
repeat while (承認された?) is (いいえ) not (はい)
:発注する;
stop
@enduml
repeat while (条件) is (繰り返すときのラベル) not (抜けるときのラベル) の順に書きます。
並行処理(フォークとジョイン)の書き方
フォークは1本の流れを同時に進む複数の流れに分け、ジョインはそのすべてが終わるのを待って1本に戻します。 どちらも太い横線で描かれます。
@startuml
title 並行処理(フォークとジョイン)
start
:注文を受け付ける;
fork
:在庫を引き当てる;
fork again
:請求書を作る;
fork again
:確認メールを送る;
end fork
:出荷する;
stop
@enduml
「在庫を引き当てる」「請求書を作る」「確認メールを送る」の3つは順番を問わず進み、3つとも終わってから「出荷する」へ進みます。
分岐(ひし形)とフォーク(太い線)の違いは次のとおりです。
| デシジョン(ひし形) | フォーク(太い横線) | |
|---|---|---|
| 進む流れ | どれか1つ | すべて |
| 矢印に付けるもの | ガード条件 | 付けない |
| 戻すときの記号 | マージ(ひし形) | ジョイン(太い横線) |
| 戻すときの動き | 来た流れがそのまま通る | すべての流れがそろうまで待つ |
どれか1つが終われば進む:end merge
end fork の代わりに end merge と書くと、太い横線ではなくひし形(マージ)で合流します。
@startuml
title どちらかが終われば進む(end merge)
start
fork
:メールで連絡する;
fork again
:電話で連絡する;
end merge
:返事を記録する;
stop
@enduml
並行する流れの片方だけを終える:フロー終了
end は丸に×のフロー終了を描きます。その流れだけが終わり、ほかの流れは続きます。note right: で注釈を付けられます。
@startuml
title フロー終了と注釈
start
fork
:在庫を確認する;
note right: 並行する流れの片方
if (在庫がある?) then (ない)
:入荷待ちに登録する;
end
else (ある)
endif
fork again
:送付先を確認する;
end fork
:出荷する;
stop
@enduml
スイムレーン(パーティション)の書き方
縦棒2本で担当の名前を囲んだ行を書くと、それ以降のアクションがそのレーンに置かれます。 レーンを切り替えたいところで、もう一度レーンの行を書きます。
@startuml
title 備品購入申請(スイムレーン)
|申請者|
start
:購入申請を出す;
|承認者|
:申請内容を確認する;
if (承認する?) then (はい)
|総務|
:発注する;
:納品を確認する;
|申請者|
:備品を受け取る;
stop
else (いいえ)
|申請者|
:却下の理由を確認する;
stop
endif
@enduml
レーンは、コードに初めて出てきた順に左から並びます。上の例では「申請者」「承認者」「総務」の順です。
レーンに色と別名を付ける
レーン名が長いときは、先頭で別名を宣言しておくと切り替えの行が短くなります。
@startuml
title レーンに色と別名を付ける
|#LightYellow|a| 申請者
|#LightCyan|m| 承認者
|a|
start
:購入申請を出す;
|m|
:申請内容を確認する;
|a|
:結果を受け取る;
stop
@enduml
段階を枠で囲む:partition
担当ではなく段階や機能のまとまりを示したいときは partition で囲みます。名前つきの枠が描かれます。
@startuml
title partition で段階を囲む
start
partition "受付" {
:申請を受け取る;
:記入もれを確認する;
}
partition "審査" {
:予算を確認する;
:承認する;
}
stop
@enduml
| 書き方 | 描かれるもの | 向いている場面 |
|---|---|---|
| 縦棒2本でレーン名を囲む | 縦のレーン | 担当(人・部署・システム)が入れ替わる流れ |
partition "名前" { } |
名前つきの枠 | 受付・審査・発注のような段階を示す |
オブジェクトノードとシグナルの書き方
アクションの行の後ろにステレオタイプ(二重の山かっこで囲んだ語)を付けると、形が変わります。
@startuml
title オブジェクトノードとシグナル
start
:申請書を書く;
:購入申請書; <<object>>
:申請内容を確認する;
:承認依頼を送る; <<sendSignal>>
:承認結果を受け取る; <<acceptEvent>>
:3営業日待つ; <<timeEvent>>
:発注書; <<object>>
stop
@enduml
| ステレオタイプ | 描かれた形 | 使いどころ |
|---|---|---|
<<object>> |
四角形 | 作業で作られ、次の作業へ渡る書類やデータ(オブジェクトノード) |
<<sendSignal>> |
右がとがった五角形 | 通知やメッセージを送る |
<<acceptEvent>> |
左がへこんだ五角形 | 通知や出来事を待つ |
<<timeEvent>> |
砂時計(文字は下に出る) | 一定の時間を待つ |
オブジェクトノードは、「申請書を書く」と「申請内容を確認する」の間に「購入申請書」を置くように、作業と作業の間に書きます。何が受け渡されるかが図から読めるようになります。
完成例:備品購入申請から受け取りまで
スイムレーン・ループ(差し戻し)・オブジェクトノード・フォークとジョイン・分岐を1枚にまとめた例です。
@startuml
title 備品購入申請から受け取りまで
|申請者|
start
repeat
:購入申請書を書く;
:購入申請書; <<object>>
|承認者|
:申請内容を確認する;
backward :指摘を直す;
repeat while (承認する?) is (差し戻し) not (承認)
|総務|
fork
:発注する;
fork again
:申請者に承認を知らせる;
end fork
:納品を確認する;
if (数量と品目が合っている?) then (はい)
|申請者|
:備品を受け取る;
stop
else (いいえ)
|総務|
:販売店に連絡する;
stop
endif
@enduml
| 図の部分 | 使っている書き方 |
|---|---|
| 申請者・承認者・総務の3レーン | 縦棒2本でレーン名を囲む行 |
| 承認されるまで申請書を直す | repeat 〜 backward 〜 repeat while |
| 購入申請書が申請者から承認者へ渡る | <<object>> |
| 発注と、申請者への連絡を同時に進める | fork 〜 fork again 〜 end fork |
| 納品物が合っているかで行き先を変える | if 〜 else 〜 endif |
セミコロンを忘れるとどうなるか
アクションの行末のセミコロンを忘れても、PlantUML 1.2026.8 ではエラーになりませんでした。
@startuml
start
:申請を受け取る
:内容を確認する;
stop
@enduml
このコードは、「申請を受け取る」と「:内容を確認する」が1つのアクションの中に2行で入った図として出力されます。アクションの数が思ったより少ないときは、行末のセミコロンを確かめます。
Mermaidで書きたいとき:flowchartと状態遷移図への書き換え方
Mermaid 12.1.0 には、アクティビティ図という名前の図の種類がありません。PlantUML風に書くと、次のエラーになります。
activityDiagram
start
:購入申請書を書く;
stop
UnknownDiagramError: No diagram type detected matching given configuration for text: activityDiagram
そこで、flowchart か状態遷移図(stateDiagram-v2)に書き換えます。
| アクティビティ図の要素 | flowchart での書き方 | stateDiagram-v2 での書き方 |
|---|---|---|
| 開始ノード | @{ shape: f-circ } |
[*] --> 名前 |
| アクティビティ終了 | @{ shape: fr-circ } |
名前 --> [*] |
| アクション | A(["文字"]) |
状態として書く |
| デシジョン | D{"条件?"} |
state 名前 <<choice>> |
| フォーク・ジョイン | @{ shape: fork } |
state 名前 <<fork>>、state 名前 <<join>> |
| スイムレーン | subgraph で囲む |
専用の書き方は無い |
| オブジェクトノード | O["文字"] |
専用の書き方は無い |
| ガード条件 | D -- 承認 --> F |
判断 --> 次 : 承認 |
flowchartに書き換える(スイムレーンあり)
完成例の主な流れを flowchart で書いたものです。subgraph をレーンとして使い、フォークとジョインは shape: fork で描きます。
flowchart TB
subgraph applicant["申請者"]
S@{ shape: f-circ, label: "開始" }
A1(["購入申請書を書く"])
O1["購入申請書"]
A6(["備品を受け取る"])
E1@{ shape: fr-circ, label: "終了" }
end
subgraph approver["承認者"]
A2(["申請内容を確認する"])
D1{"承認する?"}
end
subgraph ga["総務"]
F1@{ shape: fork, label: "フォーク" }
A3(["発注する"])
A4(["申請者に承認を知らせる"])
J1@{ shape: fork, label: "ジョイン" }
A5(["納品を確認する"])
end
S --> A1 --> O1 --> A2 --> D1
D1 -- 差し戻し --> A1
D1 -- 承認 --> F1
F1 --> A3 --> J1
F1 --> A4 --> J1
J1 --> A5 --> A6 --> E1
描画すると、レーンは縦に積まれた色つきの枠になり、枠をまたぐ矢印は自動で引かれます。PlantUMLのように左右に並ぶレーンとは見た目が変わりますが、担当の区別は読み取れます。
状態遷移図に書き換える(フォークとジョインを太線で描く)
stateDiagram-v2 には <<fork>>、<<join>>、<<choice>> があり、黒い太線のフォーク・ジョインと、黒い丸の開始、二重丸の終了が描かれます。レーンは使えませんが、形はアクティビティ図にいちばん近くなります。
stateDiagram-v2
state 承認の判断 <<choice>>
state 並行の開始 <<fork>>
state 並行の終了 <<join>>
[*] --> 購入申請書を書く
購入申請書を書く --> 申請内容を確認する
申請内容を確認する --> 承認の判断
承認の判断 --> 購入申請書を書く : 差し戻し
承認の判断 --> 並行の開始 : 承認
並行の開始 --> 発注する
並行の開始 --> 申請者に承認を知らせる
発注する --> 並行の終了
申請者に承認を知らせる --> 並行の終了
並行の終了 --> 納品を確認する
納品を確認する --> [*]
flowchartで使える形の一覧
flowchart LR
n1@{ shape: f-circ, label: "開始" }
n2(["アクション"])
n3{"デシジョン"}
n4@{ shape: fork, label: "フォーク" }
n5["オブジェクトノード"]
n6@{ shape: cross-circ, label: "フロー終了" }
n7@{ shape: fr-circ, label: "アクティビティ終了" }
n8@{ shape: hourglass, label: "時間イベント" }
n9@{ shape: braces, label: "注釈" }
n1 --> n2 --> n3 --> n4 --> n5 --> n6
n7 ~~~ n8 ~~~ n9
PlantUMLとMermaidのどちらで書くか
| 条件 | 向いているほう |
|---|---|
| 左右に並ぶスイムレーンが必要 | PlantUML |
| シグナル送信・イベント受信・時間イベントの形を使いたい | PlantUML |
| GitHubなど、Mermaidをそのまま表示できる場所に貼りたい | Mermaid(flowchart) |
| レーンは要らず、フォークとジョインを太線で見せたい | Mermaid(stateDiagram-v2) |
| ほかの図(シーケンス図など)もMermaidでそろえている | Mermaid |
アクティビティ図の書き方(6つの手順)
| 手順 | すること | ポイント |
|---|---|---|
| 1 | 図の範囲を決める | 「購入申請から受け取りまで」のように、始まりと終わりを1文で書く |
| 2 | 担当を洗い出してレーンにする | 人・部署・システムを3〜5個に収める |
| 3 | アクションを時系列に並べる | 「〜を〜する」の形でそろえる |
| 4 | 分岐とループを入れる | ひし形から出る矢印すべてにガード条件を書く |
| 5 | 同時に進められる作業をフォークとジョインで囲む | フォークで分けた流れは、ジョインかフロー終了で必ず閉じる |
| 6 | 受け渡す書類やデータをオブジェクトノードで足す | すべてを書かず、流れの理解に必要なものに絞る |
読みやすい図にするチェックリスト
| 確認項目 | 見方 |
|---|---|
| 開始ノードは1つか | 黒い丸が1つだけある |
| 終わりの種類を使い分けたか | 全体の終わりは stop、片方の流れだけの終わりは end |
| ひし形の出口すべてにガード条件があるか | 「はい」「いいえ」や「承認」「差し戻し」が矢印に付いている |
| ガード条件は重ならず、もれもないか | どの場合も、進む矢印がちょうど1本に決まる |
| フォークとジョインが対になっているか | 分けた本数と、集まる本数が合っている |
| レーンの数は多すぎないか | 6個以上になったら図を分ける |
| アクションの粒度はそろっているか | 「発注する」と「ボタンを押す」のように細かさが混ざっていない |
| 1枚に収まっているか | アクションが20個を超えたら、段階ごとに図を分ける |
よくある質問
Q. アクティビティ図とフローチャートはどう使い分けますか? A. 1つのプログラムの処理手順はフローチャート、担当が入れ替わる業務の流れや、同時に進む作業がある流れはアクティビティ図が向いています。フォークとジョイン、スイムレーン、オブジェクトノードが必要かどうかが目安になります。
Q. フォークとデシジョンの違いは何ですか? A. デシジョン(ひし形)は条件によってどれか1つの道へ進みます。フォーク(太い線)は、出ている矢印すべてに同時に進みます。フォークの矢印には条件を書きません。
Q. スイムレーンとパーティションは同じものですか? A. UMLでの名前がパーティション(アクティビティパーティション)で、レーンの形で描いたものをスイムレーンと呼びます。PlantUMLでは、縦棒2本で囲む書き方がレーンに、partition が名前つきの枠になります。
Q. Mermaidでアクティビティ図は書けますか? A. Mermaid 12.1.0 にアクティビティ図専用の書き方はありませんが、flowchart の subgraph と shape: fork、または stateDiagram-v2 の fork・join・choice で、同じ流れを表せます。
まとめ
- アクティビティ図は「だれが・何を・どの順番で」を表すUMLの図で、フォークとジョイン、パーティション、オブジェクトノードがフローチャートとの大きな違い
- PlantUMLでは
start、:アクション;、stopを上から順に書く。矢印は自動で引かれる - 分岐は
if〜else〜endif、差し戻しのあるループはrepeat〜backward〜repeat whileで書く - 並行処理は
fork〜fork again〜end fork。片方の流れだけを終えるときはend(フロー終了)を使う - スイムレーンは縦棒2本でレーン名を囲む行で切り替える。段階を示す枠は
partition - オブジェクトノードは
<<object>>を付けて、作業と作業の間に置く - Mermaidでは flowchart(subgraph と shape: fork)か stateDiagram-v2(fork・join・choice)に書き換える
参考・出典
- PlantUML「Activity Diagram (New Syntax)」(if・switch・repeat・while・fork・スイムレーン・partition・ステレオタイプの書き方): https://plantuml.com/activity-diagram-beta
- Mermaid「Flowcharts Syntax」(
@{ shape: … }で指定できる形の一覧、v11.3.0以降): https://mermaid.js.org/syntax/flowchart.html - OMG「Unified Modeling Language 2.5.1」(アクティビティの要素の名称): https://www.omg.org/spec/UML/2.5.1/PDF
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「アクティビティ図の書き方と記号一覧 スイムレーン例をPlantUMLで」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。