モデリングについて
カフェで設計を考えていたらいろいろ思うところがあったので、カフェでのツイートを中心にしつつ自分向けにまとめてみる。
モデリングとは
ここで言うモデリングは「人間の営みをコンピュータで実装するために分割して名前をつける行為」くらいの意味を意図している。 また、普段書いているのが Web アプリケーションなので、その前提を含んでいる。
知性が足りないので、分割して名前をつけるだけの営みで手こずっている。
— イケメン(予定) (@s_osa_) 2018年1月21日
人間の営みを理解するためには分析や対話を通じて概念を見出していく必要がある。
そして、実装するためにはだいたいロジックとデータが必要なんだけど、良い振る舞いをするモデルを得るためにはどちらかに偏ることなく総合的に考える必要があると思っている。 プログラムにはプログラムの、データベースにはデータベースの都合があるが、どちらかに寄せてしまうともう一方の表現力がなくなったり得意なことが活かせなくなったりしてしまう。
これ自体は前から意識していたことだが、自分で思っているよりも遥かに頻繁に意識の切り替えを行なっていたことに気付いた。
自分がモデルを考えるときにドメインと RDB それぞれの視点を切り替えてることに気付いた。無意識かつめちゃくちゃ高頻度でやってる。
— イケメン(予定) (@s_osa_) 2018年1月21日
良いモデリングをするためには概念を発見する力を磨くとともに、プログラムとデータベースの両方に対する知見を深めていく必要がある*1。
モデリングの難しさと個人的な感覚
上の定義では「分割して名前をつけるだけ」のモデリングだが、個人的にはかなり難しいことだと思っている。
半ば冗談でよく言っているのだけど、これは人間が高性能すぎるのが悪い。
人間はパターン認識とかファジー的な何かが得意すぎるので、異なるものを同一視した上で曖昧に扱って脳のリソースを節約する説。
— イケメン(予定) (@s_osa_) 2018年1月21日
だから、直感に基いてモデリングすると、実は分割が足りなかったみたいなことがよく発生する*2。
考えれば考えるほど、同じだと思っていたものが実は同じじゃないというケースにぶつかる。
— イケメン(予定) (@s_osa_) 2018年1月21日
もちろん、初めからより良いモデルに到れれば良いんだけど、神ならざる身である我々が完璧なモデルをつくれるわけはないのでモデルを修正する必要が生じること自体は問題じゃない。 むしろ、現在のモデルが現実をうまく扱えないときはより良いモデルに至るチャンス。
こういった「初めから100%は無理」「少しずつ良くしていく」というような心境があって「ドメインを掘る」「モデルを磨く」といった語法を使うことが多い。
モデルは「つくる」とか「考える」じゃなく「掘る」とか「磨く」という感覚。
— イケメン(予定) (@s_osa_) 2018年1月21日
さらにポエミーなツイートを引用しておくと、こんな感じ。
ダビデ像は「余分な石を削ったら」できたらしいし、仏像を彫る極意は「木の中に仏様を見出してそうじゃないところを彫るだけ」らしいので、モデリングは彫刻に似ているのかもしれない。
— イケメン(予定) (@s_osa_) 2018年1月21日
モデリングの重要性
こんなにも難しいモデリングだが、モデリングを頑張ると何がうれしいのか。 大きく3つあると思っている。
- ドメインに対する理解
- 堅牢さ
- 柔軟性
ドメインに対する理解
モデルを考えていく過程でドメインを掘っていく必要がある。 この営みはだいたい「◯◯とは?」のような問いを通して概念を明確にしていく作業になるので、結果としてドメインに対する明確な理解が得られるようになる。
堅牢さと柔軟性
残る2つ、堅牢さと柔軟性は相反するように見えて相関しているのではないかという仮説が浮かんだのでまとめて書く。
明確に認識された概念に基づいたモデルは「それが何であるか」が非常に明瞭になっている。
そのため、各モデルに対してしっかりとした制約を課すことができるし、仕様変更や認識のアップデートが発生した場合にもどの箇所にどういった変更を加えるかが明白になる。
一方、適切に分割されていない貧弱なモデルを元に実装すると、柔軟性を確保するためにデータをゆるく持つことで対処する必要が生じてデータのカタさが失われるし、分割されていないモデルに対してロジックを追加していくと神モデル的な何かが生まれたりする。
難しさを伝える難しさ
ここまでいろいろと書いてきたモデリングだが、その難しさを人に伝えるのも難しいと思っている。
貧弱なモデルを元に実装してもとりあえずのところは動くし、生産性の測定などをするにしても生産性の測定自体が難しいのに生産性に対するモデルの影響となるともっと難しいので、価値を示しにくい。
また、仕事で行なったモデリングは大半の場合において公開できないだろうし、モデルはドメインがあって初めて存在するので単体で OSS にするなどは難しそうなので、外部から観測することも難しい。
重要なことだと思うからこれからもやっていきたいけど、これ給与は上がるんだろうか。
— イケメン(予定) (@s_osa_) 2018年1月21日
このあたりはなんとかしていかないといけないと思っている。
おわりに
コーヒー代830円の代わりに得たいろいろな気付きや思いをつらつらと書いてみた。
難しく大変な領域だと思うが、昔から好きな領域なので今後も引き続きやっていきたいと思う。