オブジェクトの広場はオージス総研グループのエンジニアによる技術発表サイトです

モデリング

モデリングカフェ 第3回:サウナでととのう(回答編)

~UMLでモデリングを愉しもう~
技術部ビジネスイノベーションセンター 原田 巌
コンサルティング・サービス部 赤坂 英彦
2024年11月28日

毎回、身近にあるモノや出来事など、簡単な【お題】を出題し、皆様にモデリングをしていただきます。次回の記事で、皆様の回答モデルの中から3つほど取り上げて、コメントを付けていくかたちで進めていきます。第3回は前回の「お題:サウナでととのう」を見ていきます。編集員からも考えた回答例を出します。モデルに完璧な正しさというのは無いと思っているので、意図とモデルが合っているか、よりよいモデルにするにはどうしたら良いかをワイワイ発信できれば幸いです。

目次

  1. 前回の問題 (サウナでととのう)
  2. 読者回答モデル
  3. 回答例
  4. プレゼント企画
  5. さいごに

1.前回の問題 (サウナでととのう)

前回の問題をもう一度確認しておきましょう。

【お題01】サウナでととのう

「ととのう」とはサウナ、水風呂、休息を繰り返すことによって、身体がスッキリして頭が冴え渡るような状態になることです。この状況をモデリングしてみましょう。

サウナでととのう

回答はクラス図とオブジェクト図で表現してください。クラスには必要な属性を、関連には多重度を明記するのがポイントです (回答時間の目安は30分です)。

2.読者回答1モデル

再開初回、読者の皆様から、たくさんの回答モデルをいただきました。ありがとうございました。その中から2つの回答モデルを、当カフェのヒトクセある!?常連たちの声を交えながら紹介いたします。コーヒーなどを飲みながら、皆様も一緒にわいわいやる感じで考えてみてください。

また、残念ながら紹介することができなかった回答モデルはどこかで掲載できるよう企画を考えていこうと思っております。掲載のなかった方は、お待たせして申し訳ございませんが、ご了承いただければ幸いです。

読者モデル1:香川 武史様

【モデルのコンセプト】

サウナの良さをアピールしたいと思い、オブジェクト図側で記載した、「熱波のイベントやサウナの種類、サウナ後のご飯」といった自分の好きな要素を入れられるようにしました。

【難しかったところ】

いろいろな情報を詰め込もうとすると、ゴチャゴチャして、冗長になってしまうのが難しかったです。 あと、使っているmermaidというツールでオブジェクト図がうまく書けなかったので、無理やりな書き方になってしまいました。

投稿01_オブジェクト図
オブジェクト図(クリックすると別ウィンドウで拡大表示します)


投稿01_クラス図
クラス図(クリックすると別ウィンドウで表示します)

【モデルについての自己評価】

サウナの良さをアピールできたと思いますが、もう少し整理できた気もするので、60点とさせてください。

【モデルについてのコメント】

常連A- 「サウナ飯」というのが興味深いですね。サウナの後のビールや飯がセットでととのう!ということなんですね!なるほどー!

常連B- そういえば、サウナ上がりにオロポ(オロナミンとポカリを混ぜたもの)を飲むのも流行ってますよね!

常連A- 最近はトマトジュースにキレー〇レモンを混ぜたの(キレトマ)を飲むのも流行りだしたみたいですよ。

常連B- いきなり脱線してますが、モデルに戻りましょう。サウナ、水風呂、休憩のセットが複数ありますね。

常連A- サウナと言えば、サウナ→水風呂→外気浴を繰り返して「ととのう~♪」というイメージですもんね!!

常連A- 多重度の表記に「1..1」という箇所があるけど、これは「1」でいいよね?

常連B- うん。そうだよね。ただ「最小..最大」という表現には沿っているから間違いではなさそう。もしかしたら、モデリングツールで表現の仕方が違うのかな?

常連A- 「サウナでととのう」と「セット」の関連端に「1..*」(複数)の他に{ordered}ってあるけど、これは何を表現しているんだっけ?

常連B- これは複数の「セット」に順番があるってことだよね。よく知ってるね!

常連A- そっか、「サウナ」、「水風呂」、「休憩」の「セット」を複数回やるけど、1回目、2回目ってちゃんと区別するってことだよね!

常連B- そうそう。いいね!ちゃんと区別したいよね!

常連A- サウナ飯のインスタンス(オブジェクト)として、「生ビール」と「ホルモン焼きうどん」が出てるけど、飲み物と食べ物はクラスを分けたほうが良いのでは?

常連B- サウナ飯の特徴で何を表現したいのかにもよると思うけど、サウナ・水風呂・外気欲のセットを繰り返し、仕上げにサウナ飯(何か口にする)で「ととのう」と表現したかったのかな?と思うと、私はちょうど良いのかもしれないと思いました。

読者モデル2:小川 明彦様

【モデルのコンセプト】

スーパー銭湯のサウナに入る時に、スマートウォッチを手首に付けて測定結果が表示されるイメージで描きました。 チョコザップに入会すると簡易機能のスマートウォッチが付いてきて、ちょっとした運動でも簡単に血圧、脈拍数、血中酸素飽和度も取れて、その人の健康の総合評価も出てくるので、そんなイメージで描いてみました。

【難しかったところ】

  • スッキリ度は感覚的なものなので、どう表現するのか悩みました。 スッキリ度は、血圧、脈拍数、血中酸素飽和度などの各種指標から特殊アルゴリズムで総合評価として算出するイメージにしてみました。
  • 何が測定したいのか悩みましたが、RDBの測定テーブルに測定データが格納されるイメージで考えてみたら、クラス図やオブジェクト図が見えてきました。
投稿02_オブジェクト図
オブジェクト図(クリックすると別ウィンドウで拡大表示します)


投稿02_クラス図
クラス図(クリックすると別ウィンドウで拡大表示します)

【モデルについての自己評価】

スマートウォッチを付けた場合、色んな指標が出てきてクラスが収集がつかなくなったので、測定指標クラスを作りましたが、各指標を継承関係ではなく、測定指標というメタクラスから各指標をインスタンス化するパターンもあるなと後で気づきました。

他にもスマートウォッチを付けてSaaSみたいに展開するなら、測定場所はサウナだけでなく、いろんなスーパー銭湯に汎用化してもいいかなと思います。 こちらがクラス図です。(ゴチャゴチャしていますがご容赦ください)

【モデルについてのコメント】

常連A- 中心に「測定」クラスがありますね!ととのったを数値化して定量的に計測できるということですよね?

常連B- はい。スマートウォッチで血圧や脈拍数、血中酸素飽和度が測れるのか。それで健康状態を総合的に評価できますね!

常連A- スマートウォッチを使ってととのうをデジタル化することで、いろんなサービスにつなげられるかもしれないですね(ワクワク)♪

常連B- そうですね!測定したデータがクラウドに保存されて、自分の健康状態をいつでも確認できたりしたら、嬉しいかもですね。

常連A- それならサウナ以外にも適用範囲が広がりそうですね!

常連B- はい! では、モデルの詳細を見ていきましょうか。

常連A- オブジェクト図とクラス図で関連が一致していないような気がしますね。

常連B- そうですね。測定指標とスッキリ指標の間の関連は不要なのではないでしょうか?

常連A- また、細かな点ではオブジェクト間を依存関係(破線矢印)でつないでいますが、リンク(直線)でつなぐのがモデルとしては正しく伝わりそうですね。

常連B- 測定場所は測定ごとにべつのオブジェクト(実体)が必要なのでしょうか?

常連A- たとえば特定のサウナ室は複数の測定で使われる関係(一対多)でしょうね。

常連B- 測定指標(測定のたびに作られる)から見た測定は0..*ではなく1になるのかな?

常連A- なるほど、そうですね。

常連A- スッキリ指標のところに「ノート」アイコンを使って補足しているところが良いですね。

常連B- はい。スッキリがどのように定義されているのかが分かりやすいですね。

3.回答例

マスター- 回答例としまして、当カフェの常連さんのモデルを紹介いたします。コンセプト次第でモデルは変わりうるものですから、正解としてではなく、1つの考え方、1つの例としてご覧ください。 では、結果としてもモデルだけでなく、常連さんたちがどのようにそのモデルにたどり着いたのか、過程としての「モデリング」も追ってみましょう!

コンセプト

シナリオを考える

常連さんはまず、ざっくばらんにいろいろ話をしたようです。

話合いの中で、たくさんのシナリオを考えた(状況を理解する)結果、その中でも重要そうなシナリオ(太字の箇所)に絞り込んで、それをまとめてコンセプトとして文章化したようです(モデルのコンセプトを決める)。

  • サウナに入ると汗をかいて気持ちいい
  • サウナに入る前には身体を洗う
  • サウナに入る前に水分補給する(水を飲む)
  • サウナに入る
  • 汗を流して水風呂に入る
  • 冷たくなったら出る
  • 外気欲でのんびりする
  • 冷たい肌が生き返ってくる感じ
  • サ活(サウナ、水風呂、外気浴)を繰り返す
  • 頭がさえる。多幸感が感じられる
  • 身体を流してお風呂から出る
  • ポカリとオロナミンC(オロポ)でクールダウン

コンセプトを決める

サウナでととのうとは、サウナ、水風呂、外気浴のサ活を繰り返すことで、サウナーは頭が冴え、多幸感が感じられる効果がある。

注:サ活:サウナ活動、サウナー:サウナを愛する人たち

ラフスケッチ

コンセプトを決める話し合いの際、常連さんは、コンセプトの話をしながら、オブジェクト図を書いていました。思い付いたシナリオの風景が違っていないかを確認しながら図に表していたようです。

とあるサウナーさんがサ活したが1周ではととのわなかった。 01_オブジェクト図①

とあるサウナーさんがサ活2周目でととのった。 02_オブジェクト図②

途中で体調を崩す場合もあるのでは? 03_オブジェクト図③

モデル

最後に、常連さんは、ススっとオブジェクト図とクラス図を書いていました。ここまでの話の流れで、常連さんたちの間に統一されたイメージが出来上がっていたようです。

ついでにシーケンス図も書いて、どう「ととのう」のか、各モデル間の整合を確認していたようです。

前提・制約・その他

  • サウナ、水風呂、外気浴をセットとして順番に繰り返す
  • サウナーの人はお気に入りがあり、セット回数や時間は大体決めている
  • ととのったか?はサウナー自身だけが知っている

オブジェクト図

05_オブジェクト図(クラス反映)

クラス図

04_クラス図

ステートマシン図

06_サウナでととのうのステートマシン図

今回、常連さんのモデリングを追ってみました。お題や人によって、モデルに至る経路は違いそうです。みなさんも自分なりのモデリングスタイルを見つけられると良いですね。

4.プレゼント企画

今回、株式会社チェンジビジョン様のご厚意で、投稿者の中から優秀なモデル回答読者に「astah*の1年間のライセンス提供」をいただいています。

ライセンスの提供は、ちゃんとライセンス登録し、チェンジビジョン社からのメールで情報を受け取ることが条件とはなります。

今回のプレゼント当選者は、下記の方になりました(パチパチ)。

プレゼント当選者

  • 香川 武史様

後程、ご連絡いたしますので、楽しみにお待ちください。

5.さいごに

UMLモデリングカフェ「Square」を再開し、皆様にお題出題と回答の提供まで、一連の流れを何とか進めました。いかがだったでしょうか。

記事再開にあたり、本当に多くの方から応援や期待のメッセージをいただきました。身が引き締まる思いです。

スキルアップのために最低限のモデル表記上の「正しいモデル」を伝えながら、それよりも「楽しいモデリング」を目指し、投稿者や読者との対話を大切にしていきたいと思っております。

私も今回のお題に関して、完璧なモデルというのは分かりません。観点が変われば違うモデルになることも内部でのモデリングで分かっています。その点も含めて、皆様と会話し、様々な可能性やより良い観点を「見出す」ことが、私たちがモデリングカフェを再開した目的になります。

次回のお題もすでに決定しています(近日公開!)。また、皆様からの積極的な投稿をお待ちしております。


  1. 急ですがこの記事から「解答」でなく「回答」に統一しています。完璧なモデルはない、という立場から正しい答えを指すような「解答」を避けました。例えば、クイズや大喜利は、お題に対して「正解」はありません。モデリングも問題を「解いた」のではなく、自分の意見を述べているので「回答」で統一としました。