つぎはぎだらけのシステムとは? | Web系プログラマの独り言

つぎはぎだらけのシステムとは?

お久しぶりです。

最近、とあるシステムを刷新するプロジェクトの要件定義に参加しています。
よく、つぎはぎだらけのシステム という言い方をしますが、刷新対象の現行システムがまさにそんな感じなので、今回はつぎはぎだらけのシステムとは具体的にはどういうことか?について書きたいと思います。

私が遭遇したつぎはぎシステムがどのようなものだったか、例を挙げて説明します。

--------------------------
栃木県内にある公共施設を、市町村毎に表示するシステムを作成することになりました。
そこで設計者は、このシステムが栃木県内限定で、市町村毎に公共施設をまとめたいのだから、公共施設を検索する条件は市町村だけで良いと考えました。
検索メニューには市町村を選択する項目だけが載せられました。
システムを作ってからしばらく経ったとき、茨城県の公共施設も同システムで取り扱いたいことになりました。
しかし、茨城県の公共施設は数が少ないという理由で市町村毎に表示しなくても良いということになりました。
ここで設計者は、こう考えました。
「検索方法を県⇒市町村の2つで選択できるようにすると、メニュー項目を増やさなければならなくなって面倒だな。よし、ここは市町村のリストの中に例外的に茨城県も入れてしまえ」
これによって、これまで栃木県内の市町村しか載っていなかったメニューの中に突然茨城県が登場しました。こんなイメージです。

宇都宮市
足利市
栃木市



塩谷群
那須郡
茨城県

市町村のリストが並んでいる中にいきなり県が来るのはとても腑に落ちない感じがしますが、設計者は新しいメニューを作るのを嫌ってこのような設計にしてしまいました。
この変更をした後しばらくして、結局他の県や市町村の公共施設も追加したいということになり、一つのメニューの中に色々な県や市町村がいっしょくたに入ってしまう、つぎはぎシステムになりました。
--------------------------

この例では、市町村ばかりのリストの中に県が入るとき、メニューを2つに分けるべきだったのですが、システムを更新する労力を削減したいがために安易な方向に流れ、結果システムがつぎはぎだらけになりました。
実際のシステムでも、ここまで安易ではないにしても更新する労力を削減するためなどの都合でこのような現象が発生しています。

検索対象に新しい県がきても、新しい市町村がきても、何か別のものがきてもこのようにぐちゃぐちゃにならないように、将来の変更を見越してメニュー設計をするのが大事だったわけです。


システムを刷新するとき、そのシステムでは一体何がやりたかったかを考えます。
通常は、「何をしたいか」を整理したドキュメントがあってそれを元に進めていくのですが、ひどいところではそんなドキュメントなど皆無で、上記のようなつぎはぎだらけのシステムだけが残っていて、しかもその中身について詳しい人がいないため、そのシステムが本当に何をするために作られたのかを見極めていくのが非常に難しい場合があります。

システムを作成するときは、経験豊富な人が将来の変更を見据えて設計することが肝要ですね。
現在不足しているシステムアーキテクトに求められることの一つですね。