【基礎を覚えよう!】シーケンス図の使い方まとめ

UMLでシーケンス図はどう描けばいいの?
基本的な読み方は分かるけど、細かい表現の意味が分からない…
条件分岐やループってどう描けば良いんだっけ?

シーケンス図は比較的ぱっと見ただけで理解しやすい図ですが、実際に描く側になったり、細かな表現が出てきたときは悩んでしまう事ってありませんか?

こんにちは! 現役エンジニアで日々ドキュメントと睨めっこしている遠藤です。

今回の記事では

  • シーケンス図とは何か
  • 基礎的な表現
  • 細かな表現について

を解説致します。シーケンス図を理解したい初心者の方必見の内容です! 是非最後までお付き合いください。

この記事はこんな方へ向けて書きました

  • シーケンス図の基礎を知りたい方
  • 読み方が分からない方
  • 条件分岐やループなど、細かな表現が知りたい方

目次

シーケンス図とは

シーケンス図とは、処理の内容をライフライン間のやりとりを時間軸に沿って表現した図のことを言います。ライフラインとはクラスやオブジェクト、コンポーネントなどの事です。

シーケンス図では、ライフラインの生成・消滅のタイミング相互のメッセージ等を表現することが可能です。また、ライフライン間のやりとりを表現する図なので、基本的には1つのライフラインだけでシーケンス図を描くことはありません。

シーケンス図の書きかた

それでは、さっそくシーケンス図の描き方に入りましょう!

ライフライン

まずシーケンス図を描くうえで必要不可欠なのが、ライフラインです。

このように、ライフラインはボックスの中に”役割:分類子”と記述します。分類子にクラスやコンポーネント名を入れ、その役割を左に記述するといった形です。

また、両方必須という訳ではありません。役割か分類子のどちらかが記載されていればライフラインとしてはOKです。そしてこのボックスから下に伸びる破線が、時間経過を表します。

メッセージ

関数呼び出しなど、ライフライン間でメッセージのやりとりを行う際には、以下のルールに則り記述します。

属性 = メッセージ名(引数) : 戻り値

ここで覚えていただきたいのは、属性、引数、戻り値は省略可という点です。最小のメッセージは”メッセージ名()”という風になります。メッセージを受けたライフラインは、同様にリプライメッセージを返します。

シーケンス図は、このライフラインとメッセージによって成り立ちます。

細かな表現について

シーケンス図の基本がわかったところで、細かな表現について確認していきましょう。

実行指定

突然ですが、以下のようなケースの場合、どのように表現するのが正しいでしょうか?

Q. ライフラインAからBへメッセージを送り、そのメッセージをきっかけにBがCへ複数回メッセージを送る

このように記述すると、Aのメッセージがきっかけなのか、Bが自発的に送ったメッセージなのかが分かりづらいですね。こんな場合は、以下のように実行指定を使います。

白いボックスを加えることで、上記のようなメッセージのまとまりが一連の処理であることを表現できます。実行指定は省略可能ですが、わかりやすいシーケンス図には必要な知識です。

破棄イベント

破棄イベントは、ライフラインが消滅(終了)した事を意味します。破棄イベント以降、ライフラインは利用不可になります。ログイン画面などは、一度完了してしまえばそれ以降使いませんよね。そういう場面で破棄イベントを使います。

結合フラグメント

結合フラグメントは、シーケンス図において大変重要な表現です。結合フラグメントはループや分岐といった、制御処理を表現するための要素になります。書きかたはそれぞれ解説致しますが、基本として以下のように大きな枠でくくり、左上に処理内容を記載します。

処理内容を記載する箇所を相互作用オペレータ、条件を記載する箇所を相互作用制約と言います。

条件分岐

条件分岐を表現したい場合は、相互作用オペレータに「alt」を使います。

このように、相互作用オペレータに「alt」を入れ、相互作用制約に条件文を記述します。これが条件文の数だけ下に続きます。

オプション

オプションでは、条件文が真である場合にのみ処理を実行したい場合の表現に使います。相互作用オペレータは「opt」です。使い方はaltと同様ですが、条件文が一つ(elseが無い)状態です。

「altだけでも良いじゃん」と思われがちですが、「条件が成立した場合の処理」という明確な意図がある場合は、オプションで表現した方が分かりやすいです。

ループ(繰り返し)

ループ処理を表現する場合は、相互作用オペレータに「loop」を入れます。

ループの表現では、相互作用オペレータに「loop(最小回数, 最大回数)」というように記述します。回数は以下のように表現します。

種類繰り返し内容
loop(3)3回繰り返す
loop(1, 10)1回から10回繰り返す
loop(1, *)1回以上繰り返す(上限なし)
loop無限ループ

無限ループの際は、次で紹介するブレイクによって抜け出します。

ブレイク

ブレイクは、条件が真である場合に結合フラグメント内の処理を終了させる為のものです。相互作用オペレータは「break」です。

ループを抜け出したい場合などによく使います。

ref

「ref」は他のシーケンス図を参照する場合に使います。

同じ処理が何度も出る場合や、処理が細かくて複数のシーケンス図に分けた方がわかりやすい場合は、無理にまとめずrefを使って参照するという選択肢があるのです。

まとめ

いかがでしたでしょうか?今回の記事では、シーケンス図の基礎から細かな表現までを解説致しました。シーケンス図はUMLの中でもかなり使われる図なので、覚えて損はありません!

しっかり書けると、実装やバグ解析に大きく役立ちます。ぜひここで覚えて、活用していってください!

この記事を書いた人

1991年生まれ。双子座。
理系大学で認証システムを学んだ後、アプリ開発者となる。
新しく学ぶ人に寄り添った記事を心がけて執筆します。
芸術が好き。いつか猫と暮らすのが夢。

目次