開発後記すぺしゃる

 このページは、Tatsuが今まで作ったソフトについて語るページです。

目次

第1話 Calendar in WWW WebLender
第2話 Local INdex maker "LIN"
第3話 ちょこっとLHA & もうちょこっと...Arc!
第4話 Netscape Bookmark EXchange helper for Internet Explorer Nbexie & BookSync

Tatsuの開発室に戻る

第1話 Calendar in WWW WebLender

 いくつかの雑誌に載ったので、Tatsuというとこれと思っている方も多いでしょうから。

 私はMSXユーザー交流会「MSXのつどい」なるものを主催していて、告知の為にカレンダーを表示するページがあると便利だなと言うことで、SAKAさんのMSX Active Calendar!や野望集団Gigamix(MSXサークル)さんのWebページにあるカレンダーを見てJavaScriptでできないかなと思ったのがきっかけでした。
 イベントの告知がそもそものきっかけだったので、自分で使う際にイベントなどの任意の日は色を変えて表示したいということから、簡易スケジューラー的な機能が入りました。

 さて、完成したのは良いが、問題はソフト名です。
 WebCalendarではいささかごつい。「カレンダー」のうしろの「レンダー」と戦隊物のタイトルによく付く「レンジャー」は似ている...Web-Ran-ger、Web-Len-der、Weblendar、これだ。
 という訳で一度決まったらドキュメントまですっかり戦隊物のノリで一気に書いてしまいました。

 JavaScriptだったので、各月の1日が何曜日かを求めるのは楽でしたが、祝日や振替休日、2000年以降の成人の日と体育の日の扱いや、JavaScript特有の1900年代の扱いには苦労させられました。
 雑誌に収録されるのをきっかけにVersion 1.2x-1.3xとバージョンアップしていったわけですが、広く使われるようになると、思わぬバグがこれでもかとばかりに出てきたわけで、そのたびにバグフィックスを繰り返したものでした。
 また、ソースファイル内のスケジュールの記述法や記述場所もイベントのたびにメンテナンスを繰り返していくと、メンテナンスしやすいように、スケジュールを自動ソートできるようにしたり、頻繁に書くスケジュールデータを前に持っていったり、過ぎてしまった予定を非表示にしたりという改良が必要になったので、オブジェクト指向ライクなJavaScriptの記法を使ってバージョンアップするようになりました。Version 1.4x-1.5xの話です。
 これから先はメンテナンスが主になるとは思いますが、あまり機能を付け足し過ぎるとオンラインでNetscape Communicator/Navigatorを使ってページを見る人にとってはストレスのたまるものになるので、これからはバランスによりいっそう気をつけなくてはならないと思います。

目次に戻る

第2話 Local INdex maker "LIN"

 いくつかの雑誌に載っているし、メジャーなWin32環境で動くのでTatsuというとこれと思っている方も多いのではないでしょうか。

 WebLenderで初めて掲載誌を手に入れることができました。
 MSXではというか昔のBASICの頃から、自分のプログラムが雑誌に掲載されることは名誉であり、自分も含めて、プログラマーとして夢見た人も多いと思いますが、そういった人々の一員として、形はどうあれ、とりあえず夢はかないました。
 掲載誌に収録された、他のソフトを見ていると、「ディレクトリ内にあるHTMLファイルのタイトルを調べて、一覧ファイルを作る」プログラムがありました。
 WWWを見るようになってローカルのハードディスクに保存したファイルもたまってきたので、「これがあれば、多くのHTMLファイルを見やすく整理できるのではないか?」と思い、早速試してみました。
 「あ、あれ?なんじゃ、こりゃ?」
 どうやら、そのソフト、タイトルエレメント文字列の文字コードを見ていないらしく、タイトルの文字列をそのまま出力をしていたようで、できたインデックスファイルにはShift-JIS,EUC,JISの文字コードがそのまま出力されていたので、Webブラウザの文字コードの自動判別がうまくいかないようでした。
 「こりゃ、だめだ。」初版の製作当時、私は勤めていた会社を辞めていたので、暇つぶしついでに作ることを決心しました。
 文字列の処理やリスト構造を使った内部メモリへの蓄積処理は何度かやっていたので、作れないことはないし。
 処理系についてはWin32環境で動くことを考えると、LSI-C試食版ではWindows 2000でどうなるか分からないし、ロングファイル名の扱いも面倒だということで、たまたま手に入れていたLCC-Win 32を使うことにしました。
 ファイル名の検索にしても、ヘッダファイルを眺めているとMS-DOSのC言語によくあったfindfirst,findnextのような関数があったので、テストプログラムを作っていたら使い方が分かって大丈夫そうだ。
 この位のプログラムならGUIは無くても大丈夫そうだし、バッチファイルと合わせると使う側にとっても自由度が高くてよいのではないだろうか?
 製作に対する問題点は解消し、LCC-Win 32の統合環境については使いながら慣れていくということで製作開始。
 てこずった点としては、作るきっかけとなったツールで問題となった文字コードの自動判別と、ファイルの時刻回り、フレームを使ったインデックスファイルの出力がうまくいかず、作ったインデックスファイルがブラウザでうまく表示されないという点でした。
 文字コードの自動判別については、metaエレメントによる指定は見ないで文字列がJIS,Shift-JIS,EUCの各コード体系で整合しているかどうかを判定していますが、今のところは問題ないようです。
 作っているうちに、できがよくなってきたので「どうせならVectorにでも登録しようか、これで俺もWin32デビューだ」とばかりにVectorに登録。
 案の定、雑誌からの掲載依頼が来たので、これをきっかけにバージョンアップしてIE5が作るHTMLファイルで使う画像データなどを入れるディレクトリを無視する機能や、調べているディレクトリのサブディレクトリにあるインデックスファイルにリンクする機能といったあると便利そうな機能を入れてバージョンアップして今に至っています。
 これからは、文字コードの解釈をより厳密にしたり、Windowsマシンの大容量メモリを生かして、下のディレクトリまで再帰的に根こそぎインデックスファイルを作る機能やテスト時の機能の関係でいまいちすっきりしないコマンドラインの整理、HSPあたりでGUIをおまけに作るといった事を行いたいと思っております。

 後日、就職活動中にC言語経験ということでこのプログラムのことを履歴書に書いたら、これが幸いしたのか、当面の職を得ることができました。
 新たな物語の始まり...かもしれません。

2000/08/06

 で、仕事で作っているプログラムからWindows上でのiniファイルへのアクセスの方法を知ったので、早速取り入れてバージョンアップしてみました。
 これで、一度iniファイルをターゲットとなるディレクトリに置けば、後はディレクトリ指定だけで勝手に設定を読みこむので何度も実行する際にバッチファイルを作らないで済むほか、調べているディレクトリのサブディレクトリにあるインデックスファイルにリンクする機能でリンクするファイルをサブディレクトリ毎に指定できたりといったことができて使い勝手が向上しそうです。
 また、今回は布石として内部構造を変える契機となった、将来のサブディレクトリも再帰的にインデックスファイルを作る機能でも役に立ちそうです。

2001/5/19 追記

 結局、再帰的にインデックスファイルを作る機能はVersion 1.30で作っちまいました。

目次に戻る

第3話 ちょこっとLHA & もうちょこっと...Arc!

使える圧縮展開ソフトがない!

 とりあえず職を得た私は2001年1月から新たな派遣先で仕事をすることになりました。
 そこでは内部監査というものがあって、利用しているソフトウェアを調べられることになりました。
 となると前の職場みたいにワークマシンに色々とOLSを入れるわけにはいきません。
 とはいえ、標準のWindows NT4は何かと使いづらいということもあり、レジストリを使わないツールを1つのディレクトリに入れて監査の時にはそこを消して何もなかったことにしようということにしました。
 特に困ったのが、テキストファイルのソフトウェアのログファイルを扱うのにメモ帳ではダイアログがうっとうしかったり、正規表現が使えないので細かな検索がしづらかったりで使いづらかったのと、標準では圧縮されたアーカイブファイルを扱う手段がないということでした。
 テキストファイルを扱うということでは色々とオンラインソフトのテキストエディタを物色しているうちに使えそうなものが見つかったので良かったのですが問題は圧縮ファイルを扱うツールでした。
 巷にあふれるソフトはどれもこれもレジストリを派手にいじったり、インストーラーに従わないと削除時にレジストリやファイルのごみをシステムに残すものばかりでした。(手前の調べこみが足りないのかもしれませんが、そこらのn,000本収録なんていうオンラインソフト本を数冊調べた限りではレジストリを使わない圧縮展開ツールというものを見つけることはできませんでした。)

「作るしかないのか...」

 調べているとUNLHA32.DLLは圧縮・展開ではレジストリに書き込みを行うことはないということが分かりました。
 これなら自分でも作れる!ということで早速ソフトの制作が始まりました。

必要条件

  1. ディレクトリはGUIで任意のところを指定できる
     開発で大量のファイルを扱うことになるとひとつのディレクトリの下にアーカイブファイル名のファイルを作るというありがちな仕様ではディレクトリによるログファイル・ソースファイル・実行環境といったファイルの仕分けには不向きなので、任意のディレクトリに展開できるということが必要になります。
     また、いろいろなディレクトリ名を扱うことになると長いディレクトリ名やスペースの混じったディレクトリ名を扱うことになります。
     こうなると、GUIのほうが楽に指定できるのでGUIを導入することになります。
  2. フロッピーで運びやすい小さいサイズ
     監査の時には実行ファイルを消して、監査が終わったらまたインストールということが必要になる上に、自分はCD-Rは持っていないのでフロッピーで持ち運べるということが必要になりました。
  3. レジストリを使わない
     あくまでも借り物マシンなのでレジストリを使ったりすると後始末が面倒になります。
     そこで、レジストリを使わないというのは必須条件になります。

 1の条件を満たすにはGUIが必要となります。しかし、自前で書くとプログラムがでかくなってしまい。2の条件を満たさなくなります。
 そこで、どうせWindowsなんだからということでWindows 95/NT4以降のダイアログを使ってしまえということにしました。
 ソースコードはLocal INdex maker "LIN"のGUI版(制作当時未公開)があるのでそれを使いまわすことにしました。
 こうしてできたものがVersion 1.0です。

作ってみて...

 実際にできたものを使っているといくつかの不満が出てきました。

  1. ファイルサイズの効率が良くない
     UNLHA32.DLLは汎用のものなので、サイズはそれなりに大きくなります。
     ところが、現在はファイルの展開にしか使っていません。もったいないですね。
  2. 圧縮なども必要だった
     古いバージョンのファイルをアーカイブにして整理したり、アプリケーションのログファイルをネットワーク上のディレクトリに置いたり(ファイルが多くてサイズが大きくなるので、アーカイブ化や圧縮が必要になるのです。)するのに圧縮が必要になってきました。

 1の条件を満たすためにはUNLHA32.DLLはともかくとして、なるべくファイルサイズを縮める必要があります。
 また、2の条件を満たすためには圧縮ソフトを作る必要もありました。圧縮ソフトを作ることでファイルの使いまわしが利くためUNLHA32.DLLの利用効率も上がります。
 こうして作ったのが「ちょこっとLHA Pack」とちょこっとLHA Version 1.01でした。
 ちょこっとLHA Version 1.01では、Visual Cの公開されているスタートアップルーチンを見たり、他人のプログラムソースを見たりしてスタートアップルーチンを自前のものにしました。
 これで、ファイルサイズを半分以下に抑えることができました。
 ちょこっとLHA PackではどのWindowsにも存在するCRTDLL.DLLを使うことで実行ファイルが小さくなるLCC-Win32を使うことでファイルサイズを抑えつつ、コモンダイアログの操作性を得ることができました。
 ついでに、コマンドラインからUNLHA32.DLLのUnlha APIを呼び出して、コマンドライン版のLHAと同じ事をするソフトもLCC-Win32を使って小さいものができないかと思って作ってみました。
 成功しました。同種のソフト2本とファイルサイズを比べても半分以下です。
 printf系の関数を使わないでコーディングしたので、コンパイラが同じだったとしてもファイルサイズの小ささでは勝てると思います。

それから

 どうせなら...というわけで、Vectorでも公開しちゃいました。
 これで、レジストリを使わないアーカイブ操作ツールに需要はあったのかというレジストリを使わないアーカイブ操作ツールが少ないというこのソフトの制作理由に答えが出せるかもしれないからです。
 レジストリを使わないアーカイブ操作ツールを見つけられなかったオンラインソフト詰め込み本への掲載依頼がきました。
 存在意義が認められたのでしょうか?
 ネタがないのでしょうか?
 節操がないのでしょうか?

 新たな謎ができてしまったようです...。

 なに、今度の仕事はUNIX系?TAR+GZIP使うの?...

2001/5/19 追記
 その後、レジストリを使わないアーカイブ操作ツールを見つけました。
 とはいえ、SendToフォルダに入れて、「送る」から起動するには手軽に使えて圧縮ファイルや展開先をマニュアル指定できるので結構便利に使えています。

第4話 Netscape Bookmark EXchange helper for Internet Explorer Nbexie & BookSync

 このソフトはそもそも2001年8月にC++の練習のつもりで書いていたものですが、その後、Netscape 6.1を使うようになってブックマークを相互同期するツールが欲しくなったので、作ってみたものでした。

 最初は、Netscape 6からIEにブックマークを持っていけないのが不満で作ったのですが(逆はIEのエクスポート機能でIEのお気に入りをNetscape 6のブックマークに上書きすればNetscape 6が解釈してくれるので当初は必要なかった)、やはり全部バッチファイルでやりたかったのと、私がIE移行を推奨しているように取られかねない書き方をとある雑誌でされたので、IEからNetscapeへのブックマーク変換も作ってしまいました。
 GUIはせっかくVC++持ってるのにコンソールやAPIだけしか使わないのはもったいないのと、少しはMFCも体験しておくかということでMFCで組んでみました。
 とは言え、バッチファイル+ランチャーで十二分に役を果たすので個人では使ってませんでしたが、初めて使うにはこの方が良いでしょう?

(2009/05/16)
 Vector新着ソフトレビューにも開発に当たってのくだりやその後のことについて書かせていただきました。こちらの方もご覧ください。

目次に戻る


[Tatsu's room on the Web] This page is presented by Tatsu