このページにコントリビュートすることができます。  (Menu)

 

 

アクティビティ図(ベータ版)

アクティビティ図の古い構文には、メンテナンスが難しいなど、いくつかの制限と欠点がありました。

そのため、書式や構文をよりよく定義できるように、ベータ版として全く新しい構文と実装が提案されています(V7947 以降)。

この新しい実装には、(シーケンス図と同様に)Graphvizパッケージのインストールを必要としないという利点もあります。

将来的に古い構文は新しい構文に置換されるでしょう。しかし、上位互換性が確保され、古い構文もそのまま認識可能となる予定です。

新しい構文へ移行することが強く推奨されています。

 

 

単純なアクティビティ

アクティビティのラベルは:で開始し;で終了します。

テキストの書式設定は、Creole記法のWiki構文を使用して行うことができます。

それらは定義順に暗黙的にリンクされます。

@startuml
:Hello world;
:This is on defined on
several **lines**;
@enduml

 

 

開始/終了

図の開始と終了を示すために、キーワードstartstopを使用できます。

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
stop
@enduml

キーワード end もまた使用できます。

@startuml
start
:Hello world;
:This is on defined on
several **lines**;
end
@enduml

 

 

条件文

図に条件分岐を追加したい場合は、キーワードifthenそしてelseを使用することができます。ラベルは括弧を使用することで与えることができます。

@startuml

start

if (Graphviz installed?) then (yes)
  :process all\ndiagrams;
else (no)
  :process only
  __sequence__ and __activity__ diagrams;
endif

stop

@enduml

いくつもの条件分岐がある場合には、キーワードelseifを使用できます:

@startuml
start
if (condition A) then (yes)
  :Text 1;
elseif (condition B) then (yes)
  :Text 2;
  stop
elseif (condition C) then (yes)
  :Text 3;
elseif (condition D) then (yes)
  :Text 4;
else (nothing)
  :Text else;
endif
stop
@enduml

 

 

繰り返し(後判定)

繰り返し処理(後判定)がある場合には、キーワードrepeatrepeat whileを使用できます。

@startuml

start

repeat
  :read data;
  :generate diagrams;
repeat while (more data?)

stop

@enduml

 

 

繰り返し(前判定)

繰り返し処理(前判定)がある場合には、キーワードwhileend whileを使用できます。

@startuml

start

while (data available?)
  :read data;
  :generate diagrams;
endwhile

stop

@enduml

キーワードendwhileの後ろ、または、 キーワードisを使用することで、ラベルを与えることができます。

@startuml
while (check filesize ?) is (not empty)
  :read file;
endwhile (empty)
:close file;
@enduml

 

 

並列処理

並列処理を示すために、キーワードforkfork againそしてend forkが使用できます。

@startuml

start

if (multiprocessor?) then (yes)
  fork
	:Treatment 1;
  fork again
	:Treatment 2;
  end fork
else (monoproc)
  :Treatment 1;
  :Treatment 2;
endif

@enduml

 

 

注釈

Creole表記のWiki構文を使用することで、テキストの書式設定ができます。

キーワード floating を使用し、注釈を遊離させることもできます。

@startuml

start
:foo1;
floating note left: This is a note
:foo2;
note right
  This note is on several
  //lines// and can
  contain <b>HTML</b>
  ====
  * Calling the method ""foo()"" is prohibited
end note
stop

@enduml

 

 

色指定

各アクティビティに、色を指定することができます。

@startuml

start
:starting progress;
#HotPink:reading configuration files
These files should edited at this point!;
#AAAAAA:ending of the process;

@enduml

 

 

矢印

記号->を用いて、矢印にテキストを添えることができ、また、色を変えることもできます。

点線、破線、太線、または、矢印なし、もまた可能です。

@startuml
:foo1;
-> You can put text on arrows;
if (test) then
  -[#blue]->
  :foo2;
  -[#green,dashed]-> The text can
  also be on several lines
  and **very** long...;
  :foo3;
else
  -[#black,dotted]->
  :foo4;
endif
-[#gray,bold]->
:foo5;
@enduml

 

 

Connector

You can use parentheses to denote connector.

@startuml
start
:Some activity;
(A)
detach
(A)
:Other activity;
@enduml

 

 

グループ化

キーワード partitionで複数のアクティビティを分割して、グループ化できます:

@startuml
start
partition Initialization {
	:read config file;
	:init internal variable;
}
partition Running {
	:wait for user interaction;
	:print information;
}

stop
@enduml

 

 

動線

パイプ記号|を用いて、複数の動線を定義することができます。

さらに、動線毎に色を変えることができます。

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

 

 

分離

キーワードdetachを使用して、矢印を取り除くことができます。

@startuml
 :start;
 fork
   :foo1;
   :foo2;
 fork again
   :foo3;
   detach
 endfork
 if (foo4) then
   :foo5;
   detach
 endif
 :foo6;
 detach
 :foo7;
 stop
@enduml

 

 

SDL図

終端記号;を置き換えることで、アクティビティの表現形式を変えることができます:

@startuml
:Ready;
:next(o)|
:Receiving;
split
 :nak(i)<
 :ack(o)>
split again
 :ack(i)<
 :next(o)
 on several line|
 :i := i + 1]
 :ack(o)>
split again
 :err(i)<
 :nak(o)>
split again
 :foo/
split again
 :i > 5}
stop
end split
:finish;
@enduml

 

 

完全な例

@startuml

start
:「更新ボタン」を押す;
:new page;
if (Page.onSecurityCheck) then (true)
  :Page.onInit();
  if (isForward?) then (no)
	:Process controls;
	if (continue processing?) then (no)
	  stop
	endif
	
	if (isPost?) then (yes)
	  :Page.onPost();
	else (no)
	  :Page.onGet();
	endif
	:Page.onRender();
  endif
else (false)
endif

if (do redirect?) then (yes)
  :redirect process;
else
  if (do forward?) then (yes)
	:Forward request;
  else (no)
	:Render page template;
  endif
endif

stop

@enduml