題名:Java Diary-19章

五郎の入り口に戻る

日付:2000/1/3

目次に戻る


小さなプログラムの統合

さて、SETI@SupportVer0.54をリリースした後、私はしばらく(これを書いている時点ではしばらくか、永遠にか解らないのだが)SETI@Supportから遠ざかることになった。今のところ新しいバグの報告はないし、今のところ考えつくものは作ってしまい、想像力も枯れてしまったというところである。

さて、そうして一息つくと今度は別のことに頭がむき始めた。0.54のリリース前から私は自分のWeb Siteにつけているアクセス解析をなんとかしたい、という願望に駆られ始めた。今までは有料のアクセス解析サービスを使っていたのだが、月に1300円も払っており、どう考えても高いと思うし、それに検索エンジンから飛んできたときのキーワードをとろうと思うとさらに400円追加となるのである。

この有料サービスは3ヶ月契約であり、2回目の契約が11月末で切れることになっていた。そしてそれに併せてなんとか自分でCGIを設置できないかとあれこれやりはじめたのである。

会社では大変暇だから「CGIの勉強」と称してアクセス解析CGIをあれこれ検索してみるとかなりの数がヒットする。かたっぱしからダウンロードしてみてみて、なんとか解析できぬものかと数日間苦闘した。そしてそのうち「これはまじめにCGIの本をかって勉強せねばならない」という結論に達した。私はいままでPerlなるものは言葉だけ聞いたことはあっても実際につかったことはなかったのだ。そしてその文法はそこはかとなくCににているものの、省略が進んでいてまるで暗号のように思える。

ではそんな解読などあきらめてそのまま使えば良いではないか、と思うかもしれないが、そうもいかない。たいていのアクセス解析CGIは、アクセスログをとるのが1/3,残りの2/3はそのアクセスログの表示に労力が費やされている。しかし私がやりたかったことは、アクセスログはできるだけそのままの形でとり、それをメールで自分宛に送信し、こった出力はパソコン上で行うおうものである。この方法であれば「ああ。電話料金がこんなにあがってしまった」という恐怖感とも無縁のままじっくりとアクセスログを眺めることができる、というわけである。しかしながらそのためにはできあいのCGIから基本は学ぶとしても残りは自分で作り上げなければならない。

そこで一冊本を買ってくると、なんとなく様子はわかってきた。これでなんとか自作のアクセス解析ができそうだ、と思うと私はあれこれ試験を始めた。しばらくの間はローカル環境で試験をする。それがだいたいうまく動くと今度は実際にCGIを設置しよう、、と思ったところであれこれ苦難の道につきあたった。(それまでのアクセス解析CGI作成もそう簡単ではなかったが)

そもそも何故自分でCGIを設置しようか、と思ったかといえば、前述したものの他にもう一つ理由がある。11月からNiftyserveが@niftyに移行するのにともない、それまでできなかったCGIの設置が可能になる、と知ったからだ。では一気に移行して併せてCGIも、と思ったが世の中それほど簡単にはいかない。

私の構想を実現しようと思えば、perlとsendmailという二つのプログラムがサーバー側で使用可能なことが必要である。しかしNiftyではperlは使えてもsendmailは使えない。おまけに@niftyに移行するとURLが変更になってしまう。一応「こっちにうつりましたよ」の案内は出してくれるのだが、最近ようやくヒット数が増え始めたこともありここで引っ越しというのはちょっといやだ。

などと考えるととにかく他のプロバイダと契約してCGIを設置するしかないようだ。最初は米国の無料Web Site設置可能なプロバイダに登録をしてみた。ここはサーバー側で必要なプログラムは使用可能な上にとにかくタダなのである。さっそくCGIを転送するとあれこれやりはじめた。ところがこれがなかなか素直に動いてはくれない。サーバーに転送し、動かず天を仰ぎ、そしてまた変更して転送し、ということを繰り返していると電話料金と接続可能残り時間に非常によくない影響を与える。最終的に何がおかしかったか覚えていないのだが、テストページにアクセスしてちゃんとログがとれたときには私は思わず雄叫びを上げた。

さて、後は誰かがアクセスするのをまって自分にメールが送られてくるかチェックするだけだと思って安らかな眠りにつく。翌朝メールをチェックすれば確かに送られてきている。私はそれで大変ご機嫌になった。送られてきたメールを解析しようと思うとちょっと変えた方がいいかな、、というところを治せば本格稼働だ。私は会社でそうした構想を固め、るんるんと家に帰った。

Macintosh上でCGIを治すとさっそく転送だ、、、、と思ったところで「サーバーに接続できません」と言われた。なんだこれは?と思い何度もトライしたが結果は同じである。うげげげと思い設置したテストページにアクセスしょうとすれば「forbidden」と言われてしまった。泡食ってFAQを観れば

「使用規定に違反したので、アカウント取り消し」との冷たい言葉が踊っている。そこに列挙されている「アカウント取り消しの条件」をみても私がやったことがどう該当するのか定かではない。しかし考えてみれば彼らはWeb Siteに表示される広告で収入を得ているのに、CGIだけ設置されたのではその広告も表示のしようがない、というところであろうか。

せっかく稼働の一歩手前まで気ながらと思ったが現実はいかんともしがたい。おまけに無料であれば、相手に文句を言うこともできない。私は有料(しかも低額)のプロバイダを捜すことにした。そう思ってみると大手のプロバイダはたいていCGIに対して厳しい制限をおいているようだ。考えてみれば下手なプログラムをおかれてサーバーがこけたりしては元も子もないではないか。あれこれのサイトを観ているうちに「Cool」というプロバイダにつきあたった。ここは月500円でCGI設置可能である。しかし前のプロバイダで懲りた私は「アクセス解析CGIを設置してもいいでしょうか」と問い合わせのメールを打った。返事は数時間で到着した。「問題ありません」となればこの方向で推進である。

 

さて、有料の申し込みをしてから10日間で登録完了になります、、と書いてあるのでさっそくお金を振り込んで犬のごとく10日間おとなしくまった。そろそろと思って再び注意書きをみるといつのまにか「oneを振り込んでから2週間」になっている。まあ10日間というのが10 working daysと解釈すれば2週間でもいいわけだ。しかしまてどくらせど私のアカウントは使用可能にならなかった。

2週間を3日すぎたところで私はメールを打った。「どうなってるんだ」というやつである。帰ってきた返事は「ユーザー名の先頭が数字だと登録できません」というものだ。私は瞬間的に頭に血が上った。もしそうした間違いがあるなら、何故最初の登録ではねない?また2週間もたってから何故知らせる?しかしその後少し冷静になり、注意書きを読むと確かに登録名の最初は数字ではだめよと書いてある。となれば確かに私にも落ち度があるわけだ。私は「では登録名を変えるので早急に登録してください」とメールを打った。

 

さて、今度はものの数時間で登録完了の返事がきた。これで私は天下晴れて自作CGIをアクセス解析用に設置できることになった。そのうち今度のプロバイダにはもう一つ便利な機能があることに気がついた。ブラウザ上からサーバー上のファイルが操作可能なのである。何故これが便利か?会社ではインターネットは使い放題である。しかしFTPは禁止されている。だから、CGIをあれこれ変更して試行錯誤しようとおもえば家にかえってFTPでファイルを転送し、そしてテストし、という大変時間とお金のかかるプロセスを経なくてはならない。しかしブラウザ上でファイルが操作できれば、すべてはタダで行えるのである。私は一瞬頭に血が上ったことはすっかり忘れ、大変ご機嫌になった。そしていくばくかの修正の後にこのアクセス解析は見事に動き始めたのである。(このCGIは「アクセス解析CGI」にのせてある。)

 

さて、アクセスログがメールで送られてくるようになると、今度はパソコン上でのログ解析プログラムの変更である。以前利用していた解析サービスとはログのフォーマットが異なるからだ。ちょこちょこと治すと見事に作動した。これで月1300円の代わりに月500円(もっとも最初の半年は1000円だが)でアクセス解析が可能となったのである。

しばらくの間私はご機嫌に使っていた。しかしそのうち自分が結構面倒な事をしていることに気がつきだした。メールを解析してログデータを書き出すのに一つのJava プログラムが動く。それを観るのにテキストエディタを立ち上げてあれこれする。そして最終的にそれをページごとのランキングにするのに別のプログラムを使う。こうした操作を何度も繰り返しているうちに私の頭の中に妙な考えが浮かび始めた。これらの細かい操作を一つのプログラムでできないか、と。

冒頭書いたようにこの時期私はSETI@Supportから少し頭が解放されてきた時期だった。そこにこうした妄想がとりつくとなかなか止まらない。私はさっそくしょこしょことプログラムを作り始めた。ログデータの閲覧には表形式での表示が必要となるが、これはSETI@Supportで作った表形式の表示クラスを使えばよい。というかやることはあれよりも遙かに簡単だ。ごそごそと不要な部分を削っていくとプログラムは大変に簡単になった。正確に言えば、作ったプログラムをBeans化しておけあこうした使い回しはもっと簡単であっただろう。しかし怠け者の私はそうした努力を怠っている。だからいつも使い回すたびに少しは変更が必要なのだが、いずれんしてもすべてはClassの中に閉じこめられているから、あっちにくっつけ、こっちにくっつけという作業はとても簡単である。

そしてファイルの読み込み部分に以前つくった「メール中のログ解析」プログラムをくっつけ、出力のところに「ヒット数ランキング作成プログラム」をくっつければだいたいお終いである。(例によって例のごとくであるが)最初のプログラムは思ったより簡単に立ち上がった。私はちょっとご機嫌になったが、(これまた例によって例のごとく)ここからの道のりは決して短くはなかったのである。

このプログラムは立ち上がるのに大変な時間がかかった。正確に測定したわけではないが、有に一分はかかったのではないか。のんびりしているときはそれでもいいのだが、ちょっとログを観たいときなど1分はちょっといらいらさせられる時間である。何故こんなに時間がかかるかと言えば、1万件近いログデータを読み込みそれを表形式で表示しやすい形式に変換するとどうもこれくらいかかってしまうらしいのである。細かい改良はいくつかしたが、どうも1分が50秒に縮んだくらいであまり効果はないようである。

私はしばらく途方に暮れた。確かにあれこれ機能も付けられて便利だが、これではほとんど瞬時に立ち上がるテキストエディタに比べてとても優位にあるとは言えない。なんのためにいくばくかの時間をついやしてプログラムを作ったのかわからないではないか。

そのうちある解決策に思いあたった。データを最後まで読んでから表示するので、時間がかかるわけだ。データの読み込みに関する時間が削減できないのであれば、データを読み込むのと表示を同時に行えばいいではないか。所詮観るのはデータの最初のほうだけなのだから、そうした方法をとっても何の問題もない。最初のデータを眺めている間に後ろのデータを裏でせっせと読み込んでくれればいいのだ。

何故こんなことを思いついたかといえば、似た解決策を使っているプログラムを観たことがあったからである。SETI@SupportのVer0.5を作るときに参考にしたJava Appletだ。このプログラムはサーバー側においてある星のデータを読み込むのにこの「裏でしょこしょこ読み込み」テクニックを使っていた。もう少しましな言い方をすると、独立したスレッドを使ってデータを読み込んでいたのだが。

再度そのプログラムのソースを眺めるとだいたい要領はつかめた気がする。私はしょこしょことプログラムを修正しだした。今度はどうかな、と思ってたちあげると見事なスピードで立ち上がる。もっともJava Applicationだから普通の小さなプログラムの数倍時間がかかているのだが、以前にくらべれば何倍もマシである。

そして私は大変ご機嫌になり、以前作ったいくつかの小さなプログラムはこの「ログ閲覧プログラム」に統合されることになった。そしてこのプログラムはいまも「こんな機能がいるな」という自分の身勝手な要求に従ってあれこれ改良されている。そしてこのプログラムを立ち上げ、ログを眺めるのも結構な楽しみとなりつつある。いろんな人がいろんなキーワードを使ってアクセスしてくれているのがわかるし、定期的に訪れてくれる人がいることもわかる。そうした人たちの閲覧状況を見ていると、「おお。新作を読んでもらえた」とか「ああ。表紙だけみて帰ってしまった」とかいろんなことがわかり、いろいろな事を想像する。これを読んでくれているのはどんな人たちであろうか、などと。そう思えば少しはホームページ作成にも熱がはいろう、というものである。

 次の章


注釈

一冊本:(参考文献一覧)内容については参考文献一覧参照の事。本文に戻る