ユーザーインターフェース

こんなUIのソフトは嫌だ!
http://pc9.2ch.net/test/read.cgi/software/1023253730/

Visual Design
http://msdn2.microsoft.com/en-us/library/ms997612.aspx

やはりレジストリを使うのはあまり気に入られてないようだ。自分もWindowsを使い始めの頃はレジストリを使うソフトを毛嫌いしていた。単純にファイルコピーでアプリケーションの移動が出来なくなってしまうのが主な理由だった気がする。その事をある人に話したらその人はレジストリをコピーすれば済む問題なのであまり気にしていないというのと、あとマルチユーザーで使う際にはアプリケーションと同じフォルダに設定ファイルを置くよりレジストリが良い、という事だった。その回答を貰った直後は納得できなかったんだけれど、時間が経つにつれてそういう考えもあるんだな、と理解して少し気にならなくなった。

レジストリWindowsのDatabase的なもので、記録がまとまるっていうのは結構な利点だと思う。少なくとも入れ物が共通になるという点は、大分色々なコストを減らしていると思う。あとは、ユーザーに勝手にいじられにくいとかも利点なのかもしれない。しかしレジストリはまた見えないのが嫌だというのもまたその通りだと思う。個人的には商用のソフトはどんどん使って構わないと思う。でも無数に存在するフリーソフトにごりごりレジストリを使われるとなんだか嫌だなぁ。

レジストリではなくファイルに設定を記録するとして、その設定ファイルはどこに作るべきなのだろうか?少し調べたところ、どうやら標準のアプリケーション設定保存フォルダが、環境変数 %AppData% で取得出来るので、そのパス以下に作成する事になっているみたいだ。個人的には設定ファイルはアプリケーションと同ディレクトリにある方が好きだけれど、それはマルチユーザーの事をまったく意識していないからだろう。

自分が作っているソフトではWTLの部品を使っている関係でMRUファイルリスト用にレジストリを一部使っている。(http://home.att.ne.jp/banana/akatsuki/doc/atlwtl/atlwtl21-01/index.html
HKEY_CURRENT_USER以下に作られるようなのでユーザー毎なのは意識する必要は無いだろうけれど、少し気になる点がある。もし同じパスのレジストリを使用するアプリが他に存在したら破綻してしまわないだろうか? 企業の場合は企業名/ソフト名とすれば良いのかもしれない。確立はかなり小さいだろうけれど、同名の会社が同じパスを使用する事もあるかもしれないけれど。というかきっとあんまり気にして厳密に運用されてないような気がするなぁ…。どっかに管理してる団体とかあるんだろうか…。あとこういうパスの衝突はレジストリだけじゃなく%AppData%を使っても起こりそうな気もする。見てみたところ特にGUIDとかを付けてるわけでも無いようだ。(まぁそんなのを付けられても気持ち悪いけれど。)

設定ファイルをアプリケーションと同じ場所に置く方法だと、パスが衝突する事態をユーザーがフォルダ名を変更させる事によって回避させる事が出来ると思う。MRUFやMRUDを設定ファイルに記録しているアプリケーションもちょこちょこ見かけるので、自分もレジストリ使うの止めてそうしようかな…。

今頃になって気付いたんだけれど、アプリケーションでファイルを開いた時には、タイトルバーに、「ファイル名 - アプリケーション名」というように表示するのが普通なんだな…。こういうお作法はフレームワークに則って組んでれば外れなかったのかも。でもMFC使ってた時も面倒なのでDocumentとか使ってなかったな。バカに付ける薬は無いという事か…。

ソフトウェアを作るにあたって、ある程度以上に規模が大きくなって、その後に低コストで利得を得る掛け算のような効果を期待して部分部分の関連性を増やしていった場合、MVC等のデザパタを使って組まれていないと、実装コストが指数的に高くなりそうな感じはする。ただ、目の前の機能を増やすだけだと設計しなくても力仕事でなんとかなる事もある。ソフトウェアの寿命を考えるなら、ある程度しっかり考えて作った方が良いのだろう。でもとりあえず前に進める事しか出来ないときもある。まぁそもそもそんな状態にするべきでは無いのだけれど。