先日開いた講習会で聞いた話もそうだし、私自身もそう感じていたが、他所ではVBAのクラスモジュールについてあまり情報がない
なのにこのブログではやたらとクラスモジュールを持ち上げている、とお感じになる方もいらっしゃるかもしれない。そこで、私がクラスモジュールの情報を書いている理由を書いてみることにする。

以前、私はクラスモジュールなんて縁遠い存在だと思っていた。使わなくても問題ないし、使い方もよく分からないから。それはそれで何とかなっていた。
ただ、
ソースコードの整理をもっと何とかできないかな
過去の資産をコピペではなく共通関数のように活用できないものかな
データベースの接続を簡素化したいな
などと考えることはあった。

あるとき、仕事でJavaという言語と出会った。それは「クラスモジュールしかない」世界であった。以前から概念だけは知っていた、カプセル化、継承などといった、オブジェクト指向言語の特徴を実体験して、今までやってきた開発とはずいぶん考え方が違うな、と感心することしきりだった。その経験が、VBAで私が感じていた問題点はオブジェクト指向で解決できるのではないのか?と思うきっかけになった。

その直後、VBAで基幹システムを構築する案件に巡り会った。開発の方針もすべて決めてよい立場であったので、少しずつではあるがクラスモジュールを取り入れた。すると、いままでお互い近くにいても通じ合えなかった人と相思相愛になったが如く、ソースコードのメンテナンスと追加開発がラクになりだした
この体験は口で何度話しても分かるまい。体験した者だけにしか分からないだろう。しかし、私が取り組んだ時にも調べたが、VBAのクラスモジュールに関しての情報は非常に少ない。クラスモジュールを上手に使うだけで、おそらく苦労は半減(冗談抜きで最低でも50%程度)されるのに。このことをVBAを使っている人たちに少しでも届けたい。それがクラスモジュールにこだわる理由である。先日行った講習会もクラスモジュールを取り上げたのもそれが理由だ。

仕事をラクにしたいなら、是非クラスモジュールの基礎でいいから習得して欲しい。覚えて損はしないはずである。冒頭に書いているメタボなコードの撲滅し、美しくスリムなコードをそれほど無理せず書け、メンテナンス性も向上させることができるのだから。
また、VBAは小学生、中学生、高校生でも使うようである。その中でも、将来システムの道に興味がある人なら、是非にクラスモジュールを習得して欲しいと思う。


さて、余談である。クラスモジュールへのこだわりが強すぎて失敗をしたことがある。
このブログを読んだ出版社の方が「Accessの、少し慣れてきた人向けに本を書かないか?」とオファーを下さったことがある。ブログを書籍化するのではなく、書き下ろしという形で。
しかし、クラスモジュールにこだわるあまり、譲れない部分があった。なぜなら、少し慣れてきた層にこそクラスモジュールをしっかりと理解して欲しいからだ。いったんその方向で提案したが、一度目の出版会議は「狙う層が高いのでは」という理由でNGが出たと聞いている。その後、先方も多忙で時間が出来たらまた連絡を、となって音信が途絶えている。もうこの話は流れたと考えていいだろう。
ひとつ、チャンスをフイにした、という意味では失敗である。しかし、VBAではクラスモジュールについて書いて、世にクラスモジュールのメリットを広められないのなら、私が本を出す意味はないだろう。
なお、参考資料として出版社からAccessの書籍を6種類くらい頂いたのは収穫と言えば収穫か。当時は本のまとめ方などの参考に見たが、今となってはブックオフ行きが検討されている。講習会参加者に「欲しいやつ持って行って」でもよかったかも・・。(出版社の方、ゴメンナサイ)

今後もクラスモジュールについては充実させてゆく所存であるので、ひとつよろしくお願い申し上げます。
ファイルを整理するべく、Accessで任意のフォルダ以下のファイル名とその日付、容量などを保存し、ダブりがないか等をチェックできるようなものは以前に作った。

しかし、実際のところ、フォルダ単位でコピーを繰り返し、どれが最新だか分からない、と言うケースが多いので、フォルダ単位で比較できるモノがあった方が実用的である。

昔、DOSでFSというツールがあった。1~2年くらい前まではまだダウンロードできたようだが、今は見あたらないようだ。これが、左右の独立したフォルダを表示し、比較することができたので重宝した。
これを手本に作るとしよう。
確かDelphiだと簡単に作れた覚えがある。ということで、Delphiでツール作りをしている。

以前Delphiを触っていた頃はオブジェクト指向が何たるか、実務レベルでは分かっていなかった。今ならおそらく上手に使えるだろう。


システムタイトル:
 ・証券会社の基幹システム 汎用機からUNIXへの移行

業種:
 ・金融業

システム概要:
 ・証券会社が基幹システムを汎用機からUNIXへ更改するシステムであった。
 ・Excelで作成したドキュメントをツールに通すと、Javaのクライアント側のソースコードが出来上がる、というツールが提供されていた。

システム構成:
 ・大型汎用機(更改前) UNISYSだったと思う。あまりそちらを意識することはなかったので・・。
 ・サーバー(更改後) NECのUNIXサーバー HP-UX
 ・アプリケーションサーバー WebLogic
 ・言語(更改前) COBOL
 ・言語(更改後) オンライン系 Java/バッチ系 COBOL

留意点:
 ・(自作ではないので、とりあえずなし)

その他:
 ・よくもまあ、こんなツールを、と感心した。
 ・ExcelのドキュメントからVBAで他の言語の生成、というのを目の当たりにして、この延長線上に部品化を含め考えればプログラミングレス構想があるのでは?ということを考える、いい機会になった。
 ・移行は私の得意業務だが、このCOBOLでも少し癖があった。具体的には、更改前のCOBOLは標準COBOLを拡張しており、数字項目の桁数を多く取れるようになっていた。
 ・バッチ処理ということを考えると、大型汎用機の優位性はまだまだ、とも感じた。この感覚は、その後UNIXのバッチ処理管理ツールのJP1に触れたときもそう感じた。逆に言えば、JP1の癖を理解してバッチ設計からプログラム設計に落とし込めなければならないのだが、そういう技術者が少ないのだろう。
 ・金融系で、1円未満の単位の数値の扱いがあった。しかし、その際、Javaでどういう注意が必要か、ということがプロジェクト全体の決めごととして周知されていなかった。知ってる人は知っているが、知らない人は知らない、という状態はプロジェクトとしての品質に影響する。「参加メンバーに最低限これだけは」という共通認識の周知は必要であるとつくづく思った。