Windows 3.1 時代にアプリケーションソフトを作る際、外部からパラメータを与えるのにiniファイルを使っていた。
現在、業務で開発/運用しているExcelVBAは、ブック自体の保存ができなくしてあるため、設定したセル幅などを外部ファイルに持つようにした。その際、iniファイルとXMLのどちらを使おうか検討したことがある。
手軽さなら慣れているiniファイルである。よってまずはiniファイルから試した。ところが、定義ファイルを読み込みセル幅を調整する処理と、定義ファイルに書き込む処理が目に見えて遅くなった。およそ1.5秒くらいか。
やむなくあまり慣れていないXMLも試してみることにした。まずは参照設定で[Microsoft XML V x.x]か[Microsoft XML Version x.x]を選ぶ。古いと後者の形式のようである。新しいほどいいが、配布する必要がある場合は配布先のバージョンも気に掛けておこう。
さて、実装して使ってみたところ、iniファイルのような待ちが全く発生しなかった。これはいい、と外部定義ファイルはXMLを利用することとした。


ただ、XMLの概念だけは1998年頃から知っていたが、実装は初めてで、データ操作についてどのメソッドを使うかなどは徒手空拳状態であった。いまでもまだ「ばっちり!」という訳にはいかない。そのあたりに慣れ親しみ、できれば操作が簡単になるクラスを作ってラッピングしてしまおうか、などとも考えているが、現状手が回らないでいる。


しばらく前 の続きである。


まずはフォーム用内で処理が完結する場合のデータクラスを検討している。

機能としては
・データ構造
・データチェック
・DBアクセス(DBアクセスクラスの呼び出し)
を持たせるように、と考えている。

こうすることにより、フォームから直接データクラスが呼び出すことにも、他のルートからデータを渡されることにも、両方に対応できるのではないかと考えた。
そのためにフォームにはデータの設定と呼び出し以外の処理は含めないことになり、フォームはほぼハリボテ化、つまりMVCのVの部分に特化することが可能になる。
構想は練っていたが「VBAでJUnitのようなテストを実現するための布石」でもある。


実は先日作った「ファイル整理ツール」 ではほぼ上記の通りの実装ができた。
今後は他のパターンも実務で実験する所存である。



★代替記事作成中



契約先との期限もあと1ヶ月と少しとなった。業務も忙しいが、合間を縫って今まで作ってきたドキュメントは整理して引き継ぎたい。そこで「ファイル整理のための補助ツール」を作ることにした。


要するに、どのフォルダにどういうファイルがあり、それのファイルサイズや最終更新日などを一覧化し、ソートするなどして同一ファイルを削ったり、最新バージョンのみ残したり、という作業をするためのものだ。

Excelで作ろうとしたが、2003まではファイル数が制限を越える可能性大なのと、DBを使った方が便利なので、Accessで作成することにした。


で、作り始めると、案外簡単に出来てしまった。これは再帰呼び出しのおかげだろう。ついでなのでちょっとクラスに追い込んだりとか、同一だと判断したら削除したいファイルにフラグを立てておき、削除を実行したら消してくれる、という機能などを足した。今はこれで事足りるが、これに同一ファイルのもの、ファイルサイズが同じもの、などのデータを自動チェックする機能を付ければ絞込みが結構楽になるかもしれない。


なお、参考までに。

VBA標準のDirを使うより、VBScriptをVBA内で使った方が確実である。利用するにはVBEの[ツール]-[参照設定]から[Microsoft Scripting Runtime]にチェックを入れる。

ネットで調べた例だと、ほぼ「型がバリアント(要するに未定義)」なので、そこは自分で理解を深める意味も含めて「型を指定してみる」ことをお薦めする。