1960 年生まれ,独身フリー・プログラマの生態とは? 日経ソフトウエアの人気連載「フリー・プログラマの華麗な生活」からより抜きの記事をお送りします。2001年上旬の連載開始当初から,2007年に至るまでの生活を振り返って,週2回のペースで公開していく予定です。プログラミングに興味がある人もない人も,フリー・プログラマを目指している人もそうでない人も,“華麗”とはほど遠い,フリー・プログラマの生活をちょっと覗いてみませんか。

 どっぷりとはまっていたプログラミングの仕事が終わった。やっぱりものを作るのは楽しい。今回開発したのは某インターネット通販サイト。OSはLinux,データベースはPostgreSQL,サーバーとのインタフェースはCGI(Common Gateway Interface),言語は一般ユーザーが利用する部分がC,コンテンツの保守をする人が使う部分がPerlである。おっと,Cは正確に言えばC++だ。私の周囲では「C」と言ったらそれはC++のことで,プラプラではない昔のCは「プレーンC」などと呼ぶ。

 この仕事を受けた私が最初にしたのは,昔作ったCのライブラリを引っ張り出すことだった。携帯電話向けゲームの仕事のときに作った初代ライブラリ,着メロ配信サイトのときに作った2代目。懐かしい気持ちがこみあげて来る。

 初代を作成したのは3年ほど前だ。私はライブラリを作るときは最初に「アーキテクチャ」,というと大げさだが「全体の方針」を決める。初代を作った当時,米MicrosoftのMFC(Microsoft Foundation Classes)の影響を受けていた。アプリケーションを定義する基底クラスがあって,そこからアプリケーションのしたいことに応じてクラスを派生させる。古めかしいが,わかりやすい方法だ。

 私はこの方針でライブラリをいったん完成させたが,その約半年後に作り直すことに決めた。今度は,MicrosoftのATL(Active Template Library)的なスタイル。すなわち,機能ごとにC++のテンプレートやクラスを作り,それらを組み合わせてプログラムを作る,アプリケーション固有の処理もテンプレートやクラスとして作り,多重継承も駆使して最後にすべてをひとまとめにする,という方針である。この2代目を作ったころは,gcc(GNU Compiler Collection)のテンプレートのコンパイルがひどく遅かった。私自身も当時,多重継承を完全に理解しているとは言えず,ライブラリ作成は1カ月半くらいかかってしまった。しかもソースコードを読んだ人に「難しくて理解できない」とおほめの(?)言葉をいただいた記憶がある。

 そんなことまで思い出しながら,2代目ライブラリでサンプル・プログラムを作成して動かしてみる。このライブラリをそのまま使っても,ちゃんと動くものができるに違いない。だが,それでは楽しみがない。何か一つひねりたい。しばらく,保守や運用の仕事が多かったせいか,ライブラリを作り直したいという欲求が私の中でむくむくと頭をもたげてきた。納期まで3週間ある。コードのスクラップアンドビルドには自信がある。よし決めた。3代目を作るのだ。

 気になったのはHTML文書とコードの関係である。2代目ライブラリはASP(Active Server Pages)やJSP(JavaServer Pages)スタイルの<% %>によるスクリプト埋め込み方式を使っていた。ほかにもSSI(Server Side Includes)のようにHTMLコメントでマーキングする方法,初期のColdFusionのような拡張タグ方式,<? ?>とか<< >>のようなタグもどきでスクリプトを囲むといった方法が存在していたが,こうした独自仕様では,FrontPageやDreamWeaverといった市販のオーサリング・ツールが正しく処理してくれない可能性が高い。

 だが<% %>で囲む方法も,うまくないことがわかってきた。ツールではなく,人の問題である。<% %>で囲んで「コードらしきもの」を書くと,HTMLのデザイナはそれだけで拒絶反応を示す。デザインが変わるたびに,プログラマがデザイナからHTML文書を受け取って,修正する作業を際限なく繰り返すことになる。これでは,犀(さい)の河原か,シシュポスの神話である。

 というわけで,ライブラリ3代目では,このあたりを考えてみた。いろいろ検討したのだが,結果から言うと「カスタム・タグ」を使うことにした。これは,今年の6月ごろにJSPのtaglibの仕様に衝撃を受けたことも影響している。XHTML(Extensible Hypertext Markup Language)でタグを拡張すれば,オーサリング・ツールでも使えるし,デザイナにも少しは扱いやすくできるに違いない。

 と,ここまで決めたところで,残された時間は約10日(はっはっは)。その後,HTMLのパーサーに多少手を加えてテストを繰り返し,なんとか3代目のライブラリが動くようになった。今回はスケジュールに余裕がなかったので拡張性はあまり考慮していない。Perlでも同様のライブラリを作ったが,CPANから持ってきたフリーのライブラリを流用したため,私の目的から見るとあまり効率はよろしくない。まあ,この部分はシステムのレスポンスに影響しないので,後日必要に応じて改良しよう。こんな感じで作業を進めて無事納品を済ませ,プロジェクトは完了した。

 プロとしてやっている人なら,成長するライブラリをいくつか持っていることだろう。私が作ったものだって,似たようなものをいくつか見聞きしたことがある。だったら,みんなで共有することはできないのだろうか?

 今回のライブラリについて知人に,「どうせ私のも世の中にあるのと似たりよったりだと思うんですよ。この手のやつはもう画期的というのはないですからね」と,多少の謙そんと自嘲を交えて言ってみた。すると彼は,「みんなそこまでなんだよね。でも,フレームワークとして確立させたいのなら,標準的なコンポーネントを用意して,アプリケーションのパターンをいくつもインプリする。そうやって少しずつ発展させていくことが大事なんじゃないかな」と返してきた。なるほど。ソフトウエア・アーキテクトへの道のりは遠い。