« Excel仕様書を機能タイプ別に様式化する | トップページ | 少数精鋭でやれない場合にどうするか »

2018.06.04

オリンピックをモデリングしよう

■2つのモデル

 「オリンピックをモデリングしてください」とだけ指示されたら、あなたは何をするだろう。データモデラーであれば、次のように考えを進めるだろう。

求められていることは、オリンピックの運営に関わる情報を管理するためのシステムであろう。選手、コーチ、競技、成績、宿舎、会場などのデータが管理される必要がありそうだ。これらの管理簿の間にはどんな制約があって、どんな業務連係が必要になるだろう。...

 いっぽう、オブジェクトモデラーは、次のように考えるだろう。

オリンピックでは、選手、コーチ、競技、成績、宿舎、会場などのオブジェクトが相互作用するだろうから、これらのクラスを用意しよう。選手クラスには「競技参加の申し込みを行う」、「競技を実施する」などのメソッドが要りそうだ。...

 違いがおわかりだろうか。データモデラーは、「オリンピック情報管理システム」に必要なDB構造(帳簿組織)やそれを維持するための業務態勢を生み出そうとしている。かたやオブジェクトモデラーは、「コンピュータ上で動くオリンピック」に必要なクラス構造を生み出そうとしている。たとえば対象が「選手」ならば、前者で検討されるのは「選手情報を記録するための管理簿の形」であるし、後者では「(ソフトウエアとして抽象化された)選手そのもの」である。

 つまり、「ホゲホゲをモデリングしてください」と依頼されたなら、データモデラーは「ホゲホゲの情報を管理するためDB構造」を考えようとするし、オブジェクトモデラーは「コンピュータ上でホゲホゲを動作させる(シミュレートする)ためのクラス構造」を考えようとするのである。

■データモデルとクラスモデルの互換性

 両者は似て非なるものであるが、互換性はあるのだろうか。たとえば、「オリンピック情報管理システムのDB構成(A)」から「コンピュータ上で動くオリンピックのクラス構成(B)」は導けるのだろうか。あるいはその逆に(B)から(A)を導けるのだろうか。ちょっと考えてみてほしい。

 (A)から(B)を導くことが無理っぽいことに異論はなさそうだが、オブジェクトモデラーの多くは「(B)から(A)を導ける」と考えるような気がする。なぜなら、コンピュータ上でシミュレートされたオリンピックは、厳密には「オリンピック情報管理システム」を包含するように思えるからだ。たしかに「オリンピック運営に関わる情報を管理すること」は、オリンピック活動の重要な一環である。誠実に分析された(B)からは(A)を導ける、と言って間違いはなさそうだ。

 しかしだからといって、(B)から(A)を導くやり方が(A)を得るための唯一の手段ではない。そもそも、(B)を経由せずにいきなり(A)をまとめるやり方が「データモデリング」である。たかだか「オリンピック情報管理システムのDB構造」を得たいだけなのに、オリンピックをまるごとモデリング対象にしなければいけないというのでは、作業の歩留まりが悪すぎる。

 たとえばオブジェクト指向モデリングにおいて「観客」はクラスとして登場して、そのメソッドとして「チケットを買う」、「観戦する」等が設定されたりするだろう。ところが、「オリンピック情報管理システム」には、つまりデータモデリングにおいて「観客データ管理簿(観客テーブル)」のようなものは求められそうにない。世界中から何十万人もやってくる個々の観客のデータは、「オリンピックの運営管理」という文脈において捕捉する意味がないからだ。分析された「クラス」のそれぞれが「テーブル」に対応するとは限らないのである。

 また、クラス図上でたとえば「競技者クラス」の他に「競技者データ管理簿クラス」が明示的に扱われることはありそうにない。ほとんどの場合、両者は単一の「競技者クラス」として混然一体とされて扱われる。結果的に、「競技者データ管理簿」としてどのようなデータ制約が付与されるべきかは曖昧にされる。クラス構成はテーブル構成を導くための基礎にはならないということだ。

 エリックエバンスはDBに含まれるテーブル構成のような仕様要素を「深いモデル」と呼んでDDDの重要なターゲットとしたが、これを洞察することは想像するほど容易ではない。適切なDB構造を生み出すには、当該業務に関する知識や会計を含めた幅広い知識や、関数従属性を洞察するための訓練や経験が求められるからだ。けっきょくのところ、「クラスモデルはデータモデルを包含するゆえに、前者から後者を導ける」と理屈では言えるにせよ、それがデータモデルを得るための実効的な手順とは言えそうにない。

■「対象のシミュレート」と「対象の情報管理」の違い

 別の例を挙げよう。オブジェクト指向の初心者向け解説などでありがちな「クルマをモデリングする」といった課題を思い浮かべてほしい。その場にデータモデラーがいたら、課題の意味を理解できない。「ちょっと待ってください。そもそも何のためにクルマのデータを管理するのでしょうか。ディーラーの販売管理システムが欲しいということでしょうか?それとも自動車メーカーの生産管理システムでしょうか?」くらいは尋ねそうだ。

 なぜなら、データモデラーは「何のためにそのデータを管理したいのか」がわからないと仕事を始められないからだ。つまり、データモデリングされるのは「クルマのありかた」ではなく「クルマに関する情報のありかた」であって、そのためにはその情報を管理することの社会的文脈を問題にせざるを得ない。厳密に言えばオリンピック情報管理システムでも、社会的文脈によってデータモデルは異なる。たとえば「オリンピックの運営のため」と「オリンピックの歴史的考察のため」とでは求められるDB構造は違ってくる。

 いっぽうオブジェクトモデラーは、「クルマ」とか「アイスクリーム」とか「ピザ」といった簡単な指示だけでモデリングを始められる。「クルマ情報を管理するための社会的文脈」など与えられなくても、各自の「クルマの常識的理解」にもとづいて「(コンピュータ上で動く)クルマ」のクラス構成を嬉々として構想できる。あきれることに「水戸黄門」のクラス構成を和気あいあいで構想していたりする。そのようなソフトウエアを生み出すことの社会的な意義や効用に悩むこともない。

 「コンピュータ上で対象を動作させる(シミュレートする)ためのクラス構造を考える」というオブジェクト指向の本能は、エンタープライズ系の案件でも顔を出す(邪魔をすると言ってもいい)。たとえばR社向け生産管理システムを開発するとしたら、データモデラーは「R社向け生産管理システムに必要なDB構造(A)」を考えようとする。ところがオブジェクトモデラーは、「R社の製造業務」そのもの、つまり「R社の製造業務をコンピュータ上でシミュレートするためのクラス構成(B)」を考え始める。(A)と(B)は別物である。仮に(B)が必要であることにオブジェクトモデラーが気づいたとしても、(A)から(B)を導くことはひどく遠回りで、大抵はデスマーチまっしぐらだ。

 結論。「オリンピック情報管理システム」を作りたいのであれば、データモデリングすればよい。いっぽう「コンピュータ上で動くオリンピック」を作りたいのであれば、オブジェクト指向で考えたらよい。じっさい私は、DSP(*1)を開発する際にはオブジェクト指向で考えるが、DSP上で情報管理システムの案件を扱う際にはデータモデリングから始める。作りたいものに合わせて道具や手段を替える、という当たり前の話だ。

■オリンピックをモデリングするためのイベント

 最初の疑問に戻ろう。「オリンピックをモデリングする」とは、オリンピック情報管理システムのDB構成(A)を得ようとすることなのか。それとも「コンピュータ上で動くオリンピック」、すなわち「オリンピックをシミュレートする」ためのクラス構成(B)を得ようとすることなのか。

 正答などないのだが、私たちはこれを「オリンピック運営のための(A)を得ようとすること」とみなして、以下の日程でモデリング&実装ライブを行う予定である。(B)として考えてみたい技術者の参加も大歓迎である。参加してもらえるのであれば事前に相談して、それぞれの設計スタイルでモデリングして、それぞれの手段で実装して動作比較するようなイベントにしたい。そうすればデータモデリングとオブジェクトモデリングの違いが明確になって、不向きな案件に適用して失敗することも減りそうだ。

<モデリング&超高速開発ライブ>
課題:2020東京オリンピック情報管理システム
日時:7月21日(土)13:30~17:30
特別講演:「データ中心のセオリー」赤俊哉氏(明治座)
会場:株式会社プライド3階会議室(四谷)
お申し込みはこちら


*1.ドメイン特化型開発基盤(Domain Specific Platform)のこと。これを開発するためには、「仕様書をそのままアプリとして動作させるマシン」をコンピュータ上でシミュレートするためのクラス構成が求められる。

|

« Excel仕様書を機能タイプ別に様式化する | トップページ | 少数精鋭でやれない場合にどうするか »

コメント

いつもお世話になっています。
記載のイベントは中止になってしまったのでしょうか?
楽しみにしていたので残念です。

投稿: くまきち | 2018.07.11 10:56

私も残念だったのですが、諸般の事情で中止になりました。他にも面白いイベントを考えているので、ぜひご参加くださいませ。

投稿: わたなべ | 2018.07.12 08:30

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: オリンピックをモデリングしよう:

« Excel仕様書を機能タイプ別に様式化する | トップページ | 少数精鋭でやれない場合にどうするか »