長文

最近スタンドアローンの画像管理ソフトを仕事で作ったんだけれど、この手のソフトはとても優れたものからいまいちなしょぼ〜いものまで、世の中にごろごろと存在するので、それで自分の底の浅さとか身の丈が計れてしまった気がする。

既に類似品が世の中にある以上、特徴を出さないと作る意味があんまし無い。自然と機能的な面でアプリケーションを比べてみると、作る人間がそれぞれ違うので特徴や優劣が当然出てくる。それについて細かく書く気がなんだかしないので、もっと広い汎用的な視点からソフト開発について文章を書き散らしてみる。

Windowsのソフトって、見方によってはみんながみんな似たようなものを作っている。相互に自由に組み合わせる事があんまり無い感じで、再利用性が低くてかな〜り無駄な事かもしれない。良いものを作るのってそれだけ労力が掛かって大変なんだし勿体無い。

アプリケーションというのは粒度が大きすぎて再利用には向いていないという事なんだろうか?GUIが絡むと目ではっきりと見えるものだけを重視してしまって認識が固定化してしまい、視野が狭くなって設計に再利用性を含めない傾向があるのだろうか。そんなの作る人の勝手といってしまえばそれまでだけれど。

既に普及している再利用の手段としては、データフォーマットがあって、ソフトが違っていてもそれぞれが対応しているフォーマットに共通のものがあればそこで互換性が取れる。

ソースコードや静的ライブラリ、単純に静的ライブラリで完全に置き換えも出来る動的ライブラリなんかは、開発者寄りの少し閉じた再利用の手段な感じ。

再利用の為の規格をMSも過去に色々と出していたけれど、(http://e-words.jp/w/OLE.html)ここ最近MSが宣伝してるのが.NETだろうか。 .NETでは一歩引いて環境自体の構築、そしてその上でのComponent単位での再利用性を提供している感じだろうか。.NETは過去の規格と比べると自由度があって発展性も高めやすい感じだけど、再利用性を広げた分だけ規模が大きくなって仕組みが複雑になる。というか.NETはソフトを作るために利用する基盤で裏方なのでそれは少ししょうがないのかも。XAMLとかMonadとかはもっと上位の仕組みなので再利用しやすいかも?

自分的には、お好みのアプリケーションを少ない労力で作れるように、カスタマイズをきちんと出来るベースのプラットフォームがあって、分野に合わせてお好みで肉付けを変えていけるものがあればいいのかな〜、ってぼんやりと思った。Module間や外部連携含めた再利用性の仕組みもベースの枠組みに入れてしまうのが良いだろう。MozillaとかEclipseもそういう方向性なのかもだけど、枠組みの自由度を大きくするにはそれなりの規模の設計や実装が求められるので、作るのは大変かも。ちゃんとは知らないけど、Eclipseはなんだか良い線行っているような気がする。

枠組みは使われる為に作らないと意味が無い気がする。作る以上に使われないのに枠組みを作っても、結局コストだけが増加するので、得られるのは自己満足ぐらいだろうか。

枠組みは使う方もそれに順応する必要がある。大勢の人が共通の認識を持ってうまくやっていくには、枠組みを作ってその中に自然と身をおかざるを得ないのかもしれない。

OSとその上で動くsoftwareの仕組みも一種の再利用。HardwareのArchitectureも一種の再利用。networkで電子的な世界を作り出しているのもある意味再利用。

色々な階層構造が連鎖し再帰し構成されている世界では知識、地図や取説、コンパスが無いとかなり混乱してしまう。作る目的自体をちゃんと認識すれば、足元から範囲を決めていけるかな?