アクティビティ図とは、仕事や処理の流れを「だれが・何を・どの順番で行うか」で表す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期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?