はじめに
株式会社いい生活 Webアプリケーションチーム のエンジニア 杉本です。
普段は主にサーバサイドの設計・実装をしております。
UML、便利ですよね。
共通の記法でモデリングができるので、チームメンバーに設計の意図を共有する際には愛用しております。
そんなUML大好きっ子の僕が、今年度はUMLを新卒に教える機会を頂いたので、「具体的なUMLの例をわかりやすく提示したいな」と考え、「Re:ゼロから始める異世界生活(通称:リゼロ)」をネタに代表的なUMLを書いてみました。
( リゼロを選んだのは、単純に好きだからです )
【注意】 この記事は、主に1話~3話の第1章の内容で記載しております。
ネタバレ注意です。
※このアニメですが、 2019/06/20時点では、Amazon Prime でプライム会員は無料で見れます!
また、この記事のUMLは、PlantUMLで記載しております。
記事で記法の解説はしませんが、テキスト形式でUMLを記述できる非常に素晴らしいものですので、是非使ってみてほしいです。
アクターの整理
この記事で使う登場人物について、簡単に紹介します。
- スバル
主人公。異世界召喚をされた。
死んだらタイムリープ(死に戻り)する能力持ち。 - エミリア
ヒロイン。銀髪ハーフエルフ。かわいい。
所持している徽章というものが盗まれ、事件に巻き込まれる。 - エルザ
殺し屋。
エミリアが所持する徽章というアイテムを手に入れることが目的。 - ラインハルト
剣聖(騎士)。チンピラに絡まれたりしたときに助けを呼んだら来てくれた。
スバルの友人を自称する。
上記のキャラクター以外にも魅力的なキャラクターがたくさんおりますが、この記事では使わないので割愛します!
詳細、及び画像は、公式のキャラ紹介をご覧になってください。
アクティビティ図
アクティビティ図とは、フローチャートのUML版です。
手続き的な流れや、プログラムの制御フローを表現するのに使うと、良いです。
歴史や、詳細な概要は、Wikipediaを参照してください。
この章では、アクティビティ図を使って、第1章のストーリーを表現してみようと思います。
まず、第一章のストーリーをすごいざっくり書くとこんな感じになります。
plantuml
- 「スバルが死ぬ」という条件を満たすと死に戻りが発生し、ループの開始点となるリンゴ屋の亭主との話している最中に戻る
- 「スバルが死なない」という条件を満たすまで、このループは続く。
- 「スバルが死なない」と、ループが終わり、第1章が終わる
これだけではだいぶ味気ないので、「スバルが異世界で活動をする」と記載をごまかしている箇所について拡充します。
具体的には、以下のフローを追加してみます。
- エミリアは、0回目のループのみ、スバルがチンピラに襲われているところを助ける。
- 3回目のループでは、エルザを撃退でき、エミリアを助けることができる。
スバルも(瀕死になるが)死なない。
plantuml
ここまでで、ループ・if分岐について、アクティビティ図で表現しました。
さて、スバルは死ぬまでに都度3回のループをします。
(4回同じ時間を過ごしている)
ループということは、時間軸的にいうと、並列で存在していたということも言えます。
これをアクティビティ図で示すと、以下のようになります。
plantuml
最後に、「スバルが」とか「エミリアが」という主語があると冗長なので、わかりやすくするために、パーティションをわけてみます。
plantuml
ユースケース図
ユースケース図は、利用者のユースケースを分析したことを書くのに長けた図です。
歴史や、詳細な概要は、Wikipediaを参照してください。
この章では、第1章のスバルがループを抜けるために成し遂げなければならないことを、ユースケースで表現してみます。
スバルがやらなければいけないことは、以下の2つである。
- 自分が死ぬ運命を覆す
- 徽章が盗まれて困っているエミリアを助ける
plantuml
さて、スバルが「エミリアを助ける」には、「エミリアは助けられるような状況 」= 「徽章が盗まれる」 状況に陥る必要があります。
そして、「盗まれた徽章をエミリアに返す」ためには、敵である「エルザを撃退して、徽章を手に入れる」必要があります。
plantuml
また、「スバルが死ぬ一因」には、殺し屋のエルザに殺される以外にも、チンピラに殺されてしまうこともあります・・・
plantuml
殺される運命を覆す方法ですが、「エルザに殺される運命」については、「エルザの撃退」を行えば達成することができますが、「チンピラに殺される運命」を覆すには、以下のどちらかを行う必要があります。
- 偶然通りがかったエミリアに助けてもらう
- 助けを呼び、ラインハルトに助けてもらう
plantuml
図が結構複雑になってきたので、ここからまだ深掘りをすることがいっぱいできる(エルザの撃退には、ラインハルトの協力が必要とか)のだが、今回はここまでにします。
ちなみに、アクティビティ図の線に、include
とか exclude
とついているものは理由があります。
- 汎化( <---- ) は、 プログラミングでいう継承。 (A is Bの関係)
- include( <--include-- )は、 AをするにはBが必要である。という場合( A has B の関係)
- exclude( <--excludee-- )は、 Aをしたら、Bが起きる。という場合
- それ以外は、ただ線でつなぐ
シーケンス図
シーケンス図は、それぞれのオブジェクト間のメッセージの流れを時系列的に表現するのに長けた図です。
前章までと同様、詳細はWikipediaを参照してください。
この章では、登場人物同士のやりとりを、シーケンス図で表現してみます。
まず、スバルとエミリアが最初に会い、エミリアがスバルを助けるところまでを書くと、以下のようになります。
plantuml
上記の邂逅のあと、結構いろいろなイベントがあるのですが、そこは割愛し、0週目のエルザに殺されるところを書いてみると、以下のようになります。
plantuml
さて、スバルがエルザに殺されてしまったのだが、その場合には死に戻りが発生します。
plantuml
さて、エミリアに助けられるイベントは0週目のみなので、2回目以降は詳細の記載を省略したいと思います。
plantuml
2週目、3週目、4週目についても同様に記載していっても良いのですが、少し記事が長くなってしまうので、記載を省き、死に戻りを抜け出すまでの流れをざっくりとループと分岐で表現してみると、以下のようになります。
plantuml
ちなみに、ループ回数が0~3となっているが、3回目のループでスバルが死んでいた場合、死に戻りをするであることを考えるとループの回数は、 0..n でも良いかもしれませんね。
クラス図
クラス図は、モデルの構造・関係性を表現するのに長けた図です。
詳細については、Wikipedia等で参照してください。
この章では、ヒロインであるエミリアの特徴を、クラス図で表現してみます。
まず、エミリアは以下の特徴があります。
- 銀髪のハーフエルフ
- 徽章を持っている
(徽章自体は複数存在し、いろんな人が持っているようである。)
plantuml
上述するアクター整理では出てきておりませんが、リゼロの世界では、「銀髪のハーフエルフ」は、400年前にいた「サテラ」という存在と同じ特徴を持つらしいです。
plantuml
また、エミリアは精霊術士といって、魔法を使うことができる。
魔法を使うときにはマナというものを使うそうです。
精霊術士は、精霊と契約して魔法を使うらしいです。
劇中では、精霊には大精霊と微精霊の二種類が出てきました。
※エミリアは大精霊パックと契約している。
plantuml
また、精霊術士しか魔法を使えないというわけではない。
どうやら、精霊術士以外にも、普通の魔法使いというものがいるらしい。
(ロム爺というキャラクターが「普通の魔法使いならまだしも、精霊術士との相手は分が悪い」的なことを言っていた。)
精霊術士と魔法使いの違いは、精霊術士は、大気中のマナを使って魔法を使うが、魔法使いは自分のマナ(オド)を使って魔法を使うらしい。
大気中のマナを使う分、精霊術士のほうが強いみたいだ。
plantuml
さて、魔法使いが使うオドだが、基本的に生きているものにはあると思われる。
(というのも、ハーフエルフのエミリアも、地球人のスバルもオドは持っていて、練習すれば魔法は使えるらしい)
ここは正確にアニメで言及されたわけではないが、第2章でスバルや、魔獣が使っていたので、この想定に大きな間違いはないと思われる。
plantuml
ここまでで、一応エミリアがどんな子なのががなんとなく把握できるような図になったと思います!
(サテラ魔女だから魔法使いでは? という点等があるが、あくまでもエミリアを中心に書いてるので、ご容赦いただきたい)
最後に
僕はフェルトとロム爺が大好きなのに、この二人がこの記事上に出せなかったことが非常に残念です!
この記事の題材で使ったリゼロですが、2期が決まっております。
もし、「まだ見たことがないけど、この記事で興味が持てた!」という方がおりましたら、ファン冥利につきます。
(この記事ですが、なぜか新卒よりもシニア間で盛り上がりました)
株式会社いい生活は、アニメ・漫画が好きなエンジニアを募集しております。