最近、所属しているサークルでまたシステム開発を始めることになった。2005年の夏に初めてシステムを開発し、2006年3月に大幅な改修作業を行った。それに引き続き、今回が3回目の作業になる。

せっかくなので気に入らないところをいろいろ変更することにした。

その1つはテンプレートを使えるようにすること。ウェブベースのシステムなのだが、これまで表示部分のHTMLもプログラム内に埋め込んでいたため、だんだんプログラムをみるのがいやになってくることがあった。しかし、最近PerlにTemplate-Toolkitなるモジュールがあることを知り、使用するサーバにもインストールされていたので、これを使って表示部分とプログラム部分を独立させることにした。

次にデータ管理にSQLデータベースを使うこと。データの格納にはCSVを使っていたが、データベースを使った方が速そうだし、データレベルの処理を考えるのがすこぶる面倒なので。RDBを使えば排他制御とかトランザクション処理の機能もDBに任せられるので、俺はMySQLを使いたくてたまらなかったのである。

それから、不十分だった管理者機能の実装とか、その他改良したい点は山ほどあった。

しかし、これが一筋縄ではいかなかったのである。

まず文字コードでつまづいた。現在諸般の事情でプログラムは全てShift_Jisコードで書いている。理由を説明していると長くなるので省略するが、もともとShift_JisでPerlを書くのには問題があったので、これをやめようと思ったのだ。

そして、MySQLを使い始めるということだし、最近はやっぱUTF-8だろうと思ってUTF-8でプログラムを書くことにした。ところが、俺が使っているエディタ(PC-Talker付属のMyEdit)で、文字コードUTF-8にして保存したPerlプログラムが、運用予定のサーバで動かない。CGIWrapのエラーが吐かれている。おかしい。同じスクリプトをEUC-JPで書いたら動くのに。なんでだ。

この問題を解決するために検索してみると、同じことで悩んでいる人を発見した。しかし、その人は別のエディタを使ったら治ったとのこと。「そうなのか」と思って俺も別のエディタを使ってみたら、おお、動いたよ。UTF-8でPerl動いたよ。秀丸は良いエディタだ。

この際だから言わせてもらうが、MyEditはショボ過ぎる。タブキーを押したときに、タブ文字ではなくスペースを入れる機能がないし、UTF-8での保存も怪しい。しかも、このエディタの文字コード自動選択は役に立たない。「文字コード:自動選択」でファイルを読み込んだとき、Shift_Jis以外の文字コードのファイルをうまく読み込めた試しがない。そういうわけで、近いうちにMyEditは捨てるかもしれない。

文字コード問題は解決したと思いきや、今度はPerlのTemplateモジュールが使えない。スクリプトもテンプレートもUTF-8で書くと、出力したときに化ける。これはUTF-8で開いたファイルハンドルを渡せば問題は解決するようなのだが、面倒だ。ああ、モジュール化すりゃいいか。暇なときにやろう。

そういうわけで、結局開発はEUC-JPでやることに決定した。が、気が向いたらUTF-8でやる。

次の問題として「テンプレートをXHTMLで書きたいのだが・・・」ということがあった。

最初はHTML4.01のstrictで書こうと思った。でもぶっちゃけHTMLの文法がよく分からんので、 「簡易版の文法チェッカー」 で俺の書いたHTMLをチェックした。そうしたら-217点だと。俺は1からHTMLを勉強し直した方が良いようである。

エラーの解説をみてみると、どうも <br />のように終了タグを持たない要素は <... /> で閉じなければならないというのは、XHTMLの文法であることが判明した。なんだよ!せっかく面倒だなあと思いつつ/をたくさん書いたというのに。

そういうわけで、どうせなら流れに乗り遅れないようにXHTMLでテンプレートを作ろうと思ったわけである。

上記の文法チェッカーでさんざんエラーをくらいながら、ようやく99点のところまでこぎつけた。100点満点中99点である。残りの1点は、HTTPヘッダのメディアタイプに "text/html" を指定していることだった。

そこで、XHTML1.1では "application/xhtml+xml" というメディアタイプを指定するのが推奨されているとの記述があったので、プログラムでそのようなHTTPヘッダを吐くようにした。すると、このCGIをブラウザがダウンロードしようとするじゃないか!!おいおい!

困ってしまった。せっかくXHTMLで書いたのに。IE7でもホームページ・リーダー3.02でもネットリーダーでもだめだった。

そこでまたもや検索してみると、 こんなページ を発見した。なんと!やはりビル・ゲイツのせいか。おそるおそるFirefoxでアクセスしてみると、おお、ページを表示できました~!(パチパチ)おそらく、HPRもネットリーダーもIEのエンジンを使っているから同じ結果になったのだろう。俺、これからFirefox使おうかな。

というわけで、IE系のブラウザを使わなければ万事OKなのだが、あいにくそういうわけにもいかないので、結局メディアタイプには "text/html" を指定することにおちついた。

とまあ、いろいろと実装上の苦労があるわけで・・・。まぁ、勉強にもなるし良い暇つぶしなのでOKということで。