今まで、定期購読はしているものの、なかなか有効活用できていなかったWEB+DBプレスですが、今月号は結構読むことができています。
これも通勤の効果でしょうか?
特集の一番目は「実践データモデリング」
私自身、前職では基幹系の業務システムパッケージの開発に従事していたこともあって、題材として登場する「発注」や「出荷」といった業務のデータ構造や業務知識に関しては知らないわけではない。むしろ、一般的に考えると詳しい方なのでは?と思わなくもない。
というわけで、読みながら勉強になるな、と思う反面、やっぱりこのあたりは難しい問題だよな、と思ってしまうんですよね。
ソフトウェアを作る上での複雑さへの挑戦
現在は基本的に大きいプログラムを作るのではなく、責務を適切に分割し、シンプルな単位でのプログラムを組み合わせてシステムを作るのが良いとされている。
これに関して異を唱えるつもりはあまりない
前職でも、パッケージを作ったとしてもバージョンアップを考える必要があり、バージョンアップの際には過去との仕様互換性を保ちながら巨大なプログラムを新しい言語なりで作り直すとか、デスマーチ確定な感じだった。
パッケージのバージョンアップには多大な工数と期間を要し、既存顧客からは仕様の互換性に関して文句を言われ、新規の顧客からは不具合を指摘される。
もうちょっとうまいことできないものなのか。毎回スクラップ&ビルドはもうやりたくないと。
そうではなく小さいプログラムにする。更には責務の分割、モジュールの分割を進めることで、サービスを切り出す。
そしてサービス単位でバージョンアップすることを可能にしていくというのが今の流れで、その最たるものがマイクロサービスなんだと理解している。
本書でのデータモデリングも、単一テーブルにあれこれ詰め込むのではなくて責務を分割統治していくのが基本だ。
システムとして何を優先させるべきなのか
一方で、この方法だとそもそも取り扱う業務数が多い基幹系システムだと、テーブル数がかなりの数になるのでパフォーマンスの懸念は生じてしまう。
テーブル数が多くなることで、一つ一つはシンプルなんだけど、数が多すぎてひよるということもある。
特にパフォーマンスに関してはこだわりが強い人達が多いのも基幹系システムのユーザ特徴だ。
メインフレームCUI画面とWebブラウザを比較して、おそすぎると言われるの辛いよね。
データモデルをシンプルにするということは、基本的には機能もシンプルになっていくものだと理解している。
一方で、一目ですべての情報を把握したい。より多くの情報を画面に詰め込みたい。しかも早く。みたいな要求も当然のようにやってくる。
なぜなら、今がそうだから、みたいな理由で。
SoRである基幹システムのユーザは、システムを使って入力することが業務なのではなく、価値を生み出す業務は別にあるという認識は強い。
画面遷移なく、ショートカットキー盛りだくさんで何分でどれだけデータを入れられるかや判断できるかの選手権が行われている。
あれもこれも表示させる画面を超スピードで表示させるには、できるだけテーブルJOINを少なくするような、言ってしまうと下手くそなデータモデルだなぁと言われるようなテーブルになりそう。
それもこれも、個別最適化されたような過去のカスタマイズ遺産みたいなものがだめなんだ!って言うのは簡単なんだけど、ソフトウェアかくあるべきみたいな喧嘩をしてもしょうがないしね。
実際のところ、現代においてもパフォーマンス上やっぱり問題なのだろうか?みたいなところに関してはわからないのだが、こうやって頭の中で考えると言うのは結構楽しいものである。現実は厳しいけれど。
そんなことを思った2022年の夏。皆様はいかがお過ごしでしょうか。
私は元気です