TDC昆布

 「シンボルアナリスト用スケジュールソフト」で紹介させていただいたToDo Chart。かなりはまってしまった。ジョブをプロセスにどんどん分解しながらスケジュールを立てていけるのがいい。ニョーボに紹介すると産休中のスケジュール立案に使っている。

 当然のようにニョーボから要望が出てくる。「印刷できないのは困る。せめてエクセルシートに変換できないかね。」私もMS-Excelへの変換はできるといいなと思っていた。毎度の事ながら夫婦の要望が一致(ただし時間的にも一致するのは希)。で、ToDo Chartのデータファイルを見ると「テキスト」、これなら何とか出来そうだ。(なるほど、こういうデータの持ち方があるのか、と同じようなソフトを作ろうとした私は感心した。)  かくしてデータファイル解析開始。分からないところは作者のページの掲示板で聞くときちんと教えてくださった。よし、これでできそうだぜい。

 なお、掲示板を見るとToDo Chartに印刷機能をつけてくれという要望は結構多い。はっきり言ってノーテンキな要望である。これがどんなに大変なことか分かって言っているのだろうか。
 ToDo Chartの特長は案件をいくらでも深く階層化して分割できるところにある。これが何を意味しているかというと、表の横幅が一定しない、ということである。しかるに印刷先である紙は横幅に制限がある。つまり印刷する際には、表と紙のサイズを見比べて、必要とあらばズーミングしなければならない。タイトル行をどうするか、なんぞも悩ましい問題である。第一、作者はプリンタを持っていない。テストできないものは作れない。(ちなみに昔から「パワーユーザーはプリンタを持たない」といわれている。)
 印刷機能を付けてほしいなら、要望をあげると同時に、プリンタ代のカンパを呼びかける、くらいのことはやらないと。ひとり500円でも30人ほど集まればなんとかなる。

 なわけで、カンパを募るのが面倒な私は、その代わりに印刷をMS-Excelに任せることにしたわけである。MS-Excelなら、縮小して横1枚に印刷する機能もあるし、タイトル行の設定もできる。追加で管理したい項目があれば、それらを記入することもできる。予定と実績の両方を記入するようにも改造できる。最大のメリットはMS-Excelのシートであれば「進捗管理資料として堂々と添付できる」ことでしょう。

 通常、プログラムといえばメインフレームでない限りDelphiを持ち出す私でありますが(出力先がMS-Excelシートであってすら、OLEを使ってDelphiで書く)、今回に限ってはVBAのEditorを立ち上げました。引かねばならない罫線、塗らねばならないセル、設定しなければならない列の幅、こういったものがあまりにも多いのです。
 また、これを公開すると「このエクセルシートの形にコンバートしたいので修正してくれ」という要望が結構くるような気がする。VBAで書くと「そっちで直して」ということが出来る。更なるメリットは「入力ファイル、出力シートの形式チェックをさぼる口実になる」ですな。これに対して問題点は「VBAなんて書いたこともない」というくらいなものです。まあなんとかなるっしょ。

 早速本を一冊買って付け焼き刃&泥縄。いい加減な言語仕様と、VBAのEditorの使いづらさ、サンプルコードのないHelpの分かりにくさにぶーたれながらも、なんとかものは出来てしまった。コードをすっきりさせるなんて考える余裕はありません。動いてナンボです。それがマクロというものです。
 しかし、列の範囲を指定するのにA,B,C・・・の列名を指定しなければならないのは閉口。列順を変数で管理できないではないの。結局1個1個セルに色を塗って行く羽目に。列移動も1列毎にやんなきゃない。
 最悪なのは「マクロの記録」で記録したものが、その通り動いてくれないこと。おかげでタブ区切りファイルのインポートを手動でやらなければならないという制限が付いてしまった。
 あ、でもアルゴリズムを考える勉強にはなるかも。不自由な道具を使ってやりたいことをやろうとすると発想が柔軟になる。残念なのは、そうして考えた結果できたアルゴリズムがアルゴリズムとして美しいとは断言できないことである。

 完璧に頭に来たのは、MS-ExcelXPで動かしたところ、電子署名を付けるよう求められ、仕方なく付けた後である。起動すると「この署名はあてになりませんから、マクロは動かさない方がいいです」という旨のメッセージが出た。これでもMicrosoftよりはセキュリティ上問題のないソフトを書いているぞ!これほどディベロッパーを馬鹿にした態度があろうか。

 紆余曲折はあったものの、まあまあ形にすることはできた。しかしどうしてもまねの出来ないものが一つ。
 オリジナルのToDo Chartの見事な色使いである。
 これはあきらめた。しかしあきらめるためには、理由が必要である。
 「MS-Excelにコンバートしてから、ユーザーがワークシートに手を加えることも考えられる。この場合、MS-Excel標準のカラーパレット以外の色を使うのはユーザーフレンドリーではない。」
 おお、我ながら立派な理由だ。みなさん、納得するようお願いします。(実はやろうと思えばできなくもないのだが、確かにMS-Excel上で修正できないのはまずいだろうと思うのだ。)

 さあて、とりあえず重要なユーザー(ニョーボ)は納得してくれるレベルのものはできたけども、これ一般に公開しようか?ちょっと悩み中。さっきも書いたけど「このエクセルシートの形にコンバートしたいので修正してくれ」という要望が来たとき、いちいち断わんなきゃいけないのが面倒なんだな。(ちなみにニョーボはVBAが書ける。)
 よし「出力フォーマットを変えてくれという要望には応じません」という条件を了解してくれた人にのみ配布することにしてみよう。配布開始の旨と配布条件をToDo Chartの掲示板に書けばいいだろう。メールのやりとりは大変だけど、その辺の話が分かってくれる人との会話ならむしろ楽しい。


(2003.12.21加筆)
 フリーソフトを作ったら、ライセンスも何も気にせずぼんぼんソース付きで公開している人間が、なぜToDo ChartをMS-Excelシートにコンバートするツールだけは「MS-Excel出力シートのフォーマット変更の要望にはお応えしません、了解してくださる方にのみ配布します」と出し渋るのか?
 当然の疑問を感じるところだろうと思います。多分次のようなシーンがあるだろうと想像しておるのです。

 ToDo ChartのデータをMS-Excelにコンバートして印刷する。やがてそのうちに印刷したシートを進捗会議とかに持って行き、他人に見せるようになる。するとこれがMS-Excelのシートだというのは、みなさんすぐ気がつくと思うんだ。そうなるとMS-Excelはおなじみのソフトであるだけに、上司あたりがフォーマット修正を言い渡すことになる可能性が高い。まず考えられるのが「上に月表示をつけるように」。(進捗資料として付くのが例えばMS-Projectの印刷物だったりすると「変えたいけど、プログラムの仕様だから仕方ないか、、、とあきらめてくれるが、MS-Excelだとそうはいかない。)
 修正指示が月表示追加ぐらいなら手作業でも問題ないけど「担当者欄の追加」とか「期限を日付でも記入するように」になるとだんだんたまらなくなる。そして「上段を計画にして、下段に実績を入れるように」となると吹っ飛ぶ。ここまでいかずとも会社で使うプリンタはまだまだモノクロが多いから「色でなく網掛けで」「□や▲の記号で」という要望は普通に出てくると思うのだ。罫線の種類も人によって趣味が異なるところ。

 最初は手元資料として使っていても、そのうちについ進捗報告資料の中に綴じてしまう。それ自体は悪いことではないし、作者としてはむしろ嬉しいところもある。でもその資料のフォーマット修正を申し渡された人はどうすればよいのか。
 自分でVBAを直すなり、直せる人を捜せないとすると、こっちに泣きつくしかないではないか。でも泣きつかれても困るんだな。もっと困るのは「作者に修正を依頼したんですが、直してくれないんです」と言い訳されたとき。

 この事象で最大の問題は「誰も悪くない」ということです。(最後の言い訳を本当にした奴がいるとすれば、それは「悪い」。でも気持ちは分かる。)だから辛いのだなあ。だからお互いいやな思いをしないためにも覚悟のある人にだけ使ってもらいたい。

 と言っておりますが、実はこのツールをカスタマイズするの、たいていの場合はそんなに大変ではありません。リテラル定数はやたら多いですが、シートの雛形を変え、それにあわせて日付の行番号とか曜日の行番号とか、データ領域のはじっこのセル番地をいれていけばいいのです。そんなに面倒な作業ではありません。定数はわかりやすい名前をつけて最初にまとめてありますし。(その辺の作りで明らかにまずいところがあったら連絡ください。それは修正します。)

 罫線を1セルごとに引いているのも、カスタマイズが楽かなあ、と思ってのことです。(あとでそれほど効果はないと言うことに気がつきましたが、相当遅くなりはするものの、無事に動いているんだから、あえて変える必要もないか、と開き直っております。それに罫線を引かなくてはならないのはVBAのバグをカバーするためだし。)

 休日の色塗り順序は、オリジナルと違いますが、。これは当方の趣味です。またこの順序で塗っておけば祝日の色塗りを手動でやるとき多少は楽です。また色塗りの順序を逆にするのはそんなに大変な修正ではありません。
 祝日は、どうしようか。kt関数を組み込もうかなあ。それとも祝日テーブルをつけようか、と考え中。

 それから、このツール書いて再認識したけど、ToDo Chartの画面デザインって本当にいいね。「ToDo」という言葉から想起される圧迫感がまるでない。すっきりしたメニュー、色遣いももちろんですが、罫線が無いのが効いている。だからかといって見にくくないようまとめてしまったそのセンスには脱帽。

公開場所
問い合わせに応じた個別公開(こちらにメールください)
フリーソフト開発秘話、目次
ホーム