久々のPerl

今日の日記はちょっと意味不明かもです。


灘校鉄研には一応ホームページがあって、その中に部員とOBのための掲示板もあるわけですが、id:sanpachi-3800氏とかからそれを携帯でも見られるようにして欲しい、という要望が出てたんですよね。
まぁ携帯で書き込めるようにしたところで今のとんでもなく過疎ってる掲示板が再び賑わう気は到底しなかったんですが、とはいってもさすがにこのままの状態にしておくのもどうかと思ったし今の中高生現役部員にはHTMLやPerl関連に詳しい人がいないということもあったので、試しにやってみることに。


まず、今使っているスクリプトはメシス氏が開発したFortressBBS。正男関連でもいろいろお世話になってた掲示板なので使い勝手も知ってたし、アイコンが使えるスレッド式のものでスパム対策も優れてるということで採用したわけですが、この掲示板の特徴のひとつがKENT WEBのYY-BOARDとよく似ていること。開発者によると全く一から開発したからプログラムとしては別物だそうですが、ログもある程度共通のフォーマットになってるということで、携帯対応版のYY-BOARDのスクリプトから同じログを呼び出して使えば携帯からもいけるんじゃないか、という発想です。
まぁぶっちゃけロックとかの方式も違う2つのプログラムから同時に1つのログにアクセスするのは書き込みとかに関して見ると決してよろしくはないんですが、そもそも時間が被るほど書き込み頻度も高くないのでそのあたりは特に問題ナシ。


しかしいざいろいろと弄ってみて分かったことは、やはり2つの掲示板のスクリプトはいくら似ていてもそもそも根本的には全く異なっている『似て非なるもの』。yybbsに対してfbbsが新たに実装した機能がたくさんあるのはもちろんのこと、日時の形式に微妙な違いもあればログの出力や記事ナンバーの振り方の仕組みなんかに関しては根本的に違うのでこれを統一するのは一苦労。
とりあえず日時に関しては、曜日のフォーマットなどを変えて、十の位に0が出てしまう点以外についてはyybbsのほうをfbbsのほうに合わせることで解決。
また、鉄研の独自仕様として組み込んだMiniりすとを使った部員名簿との連携が余計に物事を厄介にさせていたんですが、そちらについては携帯では表示されないのでログとかにおかしなことが生じない程度に適当に設定。
しかしながらやはり強敵はログと記事ナンバー。fbbsはログファイルの1行目から早速書き込み内容を記録していて記事ナンバーのカウントは全く別のカウントファイルで行っているのに対して、yybbsのほうは書き込み内容はログの2行目以降で、1行目には一番最後に書き込まれた記事のナンバーと投稿者のIPなどを一時的に記録するようになっている仕組み。
それならその1行目だけを削ってしまえばいいかとも思いましたが、そうなると記事ナンバーがめちゃくちゃになってしまううえにyybbsがログを表示する時に最新の記事(=ログの1行目)を読み込んでくれないという問題が発生。
そこで、yybbsのほうのログの取得部分を細かくいじり直して、今までは1行目の配列だけをまずshiftで読み込んだ後で2行目以後をログとして取得していたのを1行目からログとして読むように変更、さらに一時的な情報を1行目に記録してshift&unshiftでいちいち書き直していた部分をバッサリ削ることでとりあえず1行目を読み込まない問題は解決。
ただまだ問題は残っていて、fbbsではカウントファイルがあるのに対してyybbsでは存在しない記事ナンバーの記録。さっきログの1行目を削ってしまったものの、一番上の行の記事のナンバーにそのまま連番で…と思ったらなんと困ったことに親記事に対してついたレス記事は親記事の後ろの行にツリーになってぶら下がっていくということが判明。つまりNo.120の親記事の後にさらに親記事を建てるならちゃんとNo.121になってくれるものの、No.120の親記事にNo.121と122のレスが付いた後に新しく親記事を建てるとその記事もNo.121になってしまって見事に重複するという問題が発生するわけです。というわけで、今度はyybbsの記事カウントをfbbsと同じように別のカウントファイルで新たに読み込む方式に大胆に変更して、その番号をshiftとunshiftで毎回上書きしていくことでどちらの掲示板から書き込んでも正常にナンバーが1ずつ増えていくようになりました。
そして最後にyybbsのパソコンからのフォームを塞いで、fbbsのほうにアドレスやQRコードを載せたリンクを貼って一応完了。気動車と電車を併結して走らせるぐらい無理矢理な共通化を図っているので、書き込み回数とか記事の修正・削除とかに関していろんな機能制限が出来てしまってはいるもののこれで最低限必要な設備は整った…はず。
Perlに関しては少しは理解できるようにはなっていたものの、かなり久々なうえに他人の作ったプログラムをいちいちどこがどういう働きをしているのか読み取りながら改造するのはなかなか面倒なものでして、結局これだけで1日を費やしてしまったのでした。


…というわけでこの記事を見てる鉄研部員やOBの皆さんはぜひ使ってあげてください。というか使ってくれないと困りますよ。ええ。