だいぶ前、もうひと月くらい前に、ログの保存期間を延長したいというリクエストをいただいていたのだが、なんのかんのと伸ばし伸ばしにしてしまった。ログの保存期間を延長するとなると変更箇所が結構多くなり、改造も説明も煩雑になりそうで、なかなか手を付けにくかったのだ。
ログの保存期間を変更するとなると、おおまかにわけて次のような改造が必要になる。
これらの改造は、一ヶ所を除き、数値を変えるだけですむ。だからどこをどう変えるかさえわかればそれほど難しくないのだが、変更箇所は九ヶ所に及ぶ。
以前、私はこんなことをいっていた。
変更箇所が多くなれば自然間違いもしやすくなるし、それになにより面倒だ。こうした、後々のメンテナンスのしにくさをすっきりと整理して、更新時の手間を少しでも軽減できないものだろうか。
なので私は、どうせ改造するなら、後からでも簡単に保存期間を変更できるようにしたいと思った。
後からでも保存期間を変更できるようにする。そのやり方はいろいろあるだろうが、私はweb拍手改造:これまでのまとめと整理 その二で拍手連投最大回数周りを整理したときと同じやり方で解決しようと思う。つまり、保存日数を決定する数値を格納する変数を用意して、プログラム中の数値をその変数に置き換えてやろうというわけだ。
なので、私は$storagelifeという変数をclapinit.cgiに追加する。具体的にどうするかは、改造編で案内されるだろう。
改造が済んだら、後はこの変数に数値を代入するだけで、ログの保存日数が決定されるようになる。
web拍手CGIはclap.cgi、clapinit.cgi、kaiseki.cgiという三つのスクリプトファイルで実現されているが、このうちログの削除をおこなう処理を含んでいるのはclap.cgiとkaiseki.cgiである。CGIの実行時に、今日のログがログファイルにあるかどうかを判断し、ない場合には一定の期間以前のデータを削除するという段取りを踏んでいる。
その処理は、clap.cgiの44行目から88行目にかけて、kaiseki.cgiの282行目から326行目にかけて書かれている。
画面表示に用いるデータを取り出すのは、もちろんkaiseki.cgiの仕事である。この取り出されるデータというのは、web拍手解析画面の上部に表示される時間ごとの拍手数と一言メッセージ、そして過去14日間の解析用のデータだ。
解析用のデータの取出は、kaiseki.cgiの39行目から41行目で呼び出されるルーチン、makelogとmakemesの仕事である。makelogは拍手の回数を取り出し、makemesは一言メッセージのデータを取り出すルーチンである。makelogはkaiseki.cgiの188行目から始まり214行目で終わっている。makemesは同じくkaiseki.cgiの217行目から235行目まで。ただしここに改造すべき箇所はない。
表示用データに関する改造箇所は、kaiseki.cgiの24行目である。web拍手解析画面の下部に用意された、ログを表示したい日付へのリンク。このリンクURIをよく見てみるとわかるが、末尾に&に続けて数字がつけられているはずだ。最新のログなら0が、そして過去にいくに従ってその数値は増えていく。
この数値がプログラムに引き渡されることで、プログラムはいつのログを取り出したらよいか判断するのだが、こういうプログラムに渡す数値のことを引数(ひきすうと読む、私は間違っていんすうと覚えていた)という。この、表示したい日付のログを選択する数値にあり得ない数字が入っているとまずいので、kaiseki.cgiの24行目ではそのチェックがおこなわれている。
次いで過去14日間の拍手数を取り出すのだが、ここは数値を変えるだけではすまない。
この作業はkaiseki.cgiの51行目から79行目にかけておこなわれる。最初に14日間の拍手数をそれぞれ0回とし、その後記録された各日のトータル拍手数を代入していくのだが、最初の14日分の拍手を0回とする箇所:
#---------過去14日分のトータル抽出
@pasttotal = (0,0,0,0,0,0,0,0,0,0,0,0,0,0);
この52行目は大幅に書き換える必要がある。といっても、14日分一度に0を追加する作業を、for文を使って一日ずつ0を代入していくだけの話だ。結果的に一行が三行になる。
ここで行数が増えることで、この行以降、作業時に指定される行番号と実際の行番号が食い違ってしまう(私の指定する行番号は、オリジナル手付かずのweb拍手CGIのものであるため)。改造時には、ぜひ注意していただきたい。
表示に関する改造箇所は基本的に同じ作業の繰り返しである。オリジナルのkaiseki.cgiは過去14日間の解析のテーブルを表示する際に、当然14列しか表示しないのであるが、それをログの保存日数分おこなうようにするだけのことだ。各マスにおさまるデータは、特に指定しなくてもきちんと期待通りのものが入ってくれるので、このあたりは気にしないでも大丈夫だ。
表示に関する処理はkaiseki.cgiの131行目から166行目にかけておこなわれる。三ヶ所あるfor文を手直しする。この作業は、さほどややこしくなることはないだろう。
< web拍手改造:外部スタイルシートを参照する web拍手改造:ログ保存期間を変更する 改造編 >