Help us understand the problem. What is going on with this article?

【SequenceDiagrams】シーケンス図の書き方

More than 3 years have passed since last update.

シーケンス図ってなに?

システムの設計を視覚的に理解できるように、クラス・オブジェクト間のやりとりを表現する図

構成要素

・ライフライン(Lifeline)・・・使用するオブジェクトやクラスを表現する。オブジェクトとクラスのどちらか一方は省略可
スクリーンショット 2017-05-12 14.29.35.png

・実行仕様(ExecutionSpecification)・・・生成されているライフラインが実行状態であることを意味する
スクリーンショット 2017-05-12 14.29.46.png

・停止(Stop)・・・ライフライン自体の消滅を意味する
スクリーンショット 2017-05-12 14.29.50.png

・同期(Synchronous)メッセージ・・・送り先のライフラインの実行に同期されるメッセージ
スクリーンショット 2017-05-12 14.29.56.png

・非同期(Asynchronous)メッセージ・・・送り先のライフラインの実行に同期されないメッセージ
スクリーンショット 2017-05-12 14.30.03.png

・応答(Reply)メッセージ・・・送り先のライフラインから送り手への戻り値を意味する
スクリーンショット 2017-05-12 14.30.09.png

・ファウンド(found)メッセージ・・・図解上にない送り手からのメッセージ
スクリーンショット 2017-05-12 14.30.16.png

・ロスト(lost)メッセージ・・・意図された送り手に送られていない、もしくは受け手が図解上にないメッセージ
スクリーンショット 2017-05-12 14.30.24.png

複合フラグメント

・ref・・・参照、別のシーケンス図を参照することを示す。

・alt・・・条件分岐、2つ以上の条件分岐を示す。それぞれの条件を[]内に記述。

・opt・・・条件判断、ある条件下でのみ行われる処理を示す。その条件は[]内に記述。

・par・・・並行処理、2つの処理を並行して行うことを示す。

・loop・・・反復処理、繰り返し処理が行われることを示す。loop[開始点,終了点]で反復の開始と終了を指定する。

・break・・・中断、ある条件のとき処理を中断することを示す。その条件は[]内に記述。

・critical・・・クリティカルセッション、処理を保護していることを示す。

・assert・・・[]内の条件の妥当性が成り立たなければならないことを定義していることを示す。

・neg・・・通常起こり得ない処理であることを示す。

・ignore・・・{}内のメッセージでは重要な処理でないことを示す。

・consider・・・{}内のメッセージが重要な処理であることを示す。

シーケンス図の書き方

今回はWebSequenceDiagramsを使ってシーケンス図を作成したいと思います。
https://www.websequencediagrams.com/
ブラウザ上でシーケンス図を作成することが出来ます。
有料版もありますが、基本的なものは無料版で十分作れます。

基本的な操作

A -> B : メッセージ
A ->> B : メッセージ
B --> A : メッセージ

スクリーンショット 2017-05-12 16.16.18.png

上から同期メッセージ、非同期メッセージ、応答メッセージとなります。
同じライフライン上で処理を行うと時はA->Aとすれば出来ます。

実行仕様をつける

文字の前に+・・・実行仕様の最初
何もつけない・・・実行仕様の途中
文字の前に-・・・実行仕様の終わり
に矢印が来るように作成できます。

A->+B:メッセージ
A->B:メッセージ
B-->-A:メッセージ

スクリーンショット 2017-05-12 17.29.19.png

実行の結果で、ライフラインを作成する

A->*B

ライフラインを停止する

destroy A

メモをシーケンス図上につける

note left of A : メッセージ
note right of A :メッセージ
note over A :メッセージ
note over A,B:メッセージ

スクリーンショット 2017-05-12 16.53.04.png

複合フラグメント

・alt・・・alt 条件1 else 条件2 end
・opt・・・opt 条件 end
・loop・・・loop 条件 end
と記入すると作成できます。
以下例です。

A->B: ボールを投げる
alt キャッチ成功
B->A: 投げ返す
else キャッチ失敗
B->A: 謝る
opt
   loop 10times
      A->B: 殴る
   end
end
end

スクリーンショット 2017-05-12 16.40.09.png

*refなどは有料版のみのようです…

感想

シーケンス図を作成することで構造を視覚的に理解できるようになり、かなりわかりやすくなりますね。
システムを作る前に作成することで、エンジニアの作業効率は上がるだろうと思います。
また、修正段階においてもどこの構造のどの部分を修正するべきかがわかりやすく、修正後の形をシーケンス図で一旦作成することで作業前に完成をイメージできるかと思います。

今回シーケンス図作成にWebSequenceDiagramsを使いましたが、
いちいち図形を挿入して矢印を引っ張って…という作業がないのでとても簡単にシーケンス図が作成できるなと感じました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away