Beginner's Rock Official Website

犬土偶日記

海の近くに住みたい

BR日記の使い方

話題:Webプログラミングとか

2009年01月04日

日記CGIの改造とか機能追加とか

公開日時: 2009年01月05日 06時49分52秒

長い1日だつた。もう1日前のことすら覚えてゐない。何時に起きたのか忘れたが、今日は午後までは起きてゐた。恐ろしく眠かつた記憶があるから、恐らく夜中から起きてゐたんだらう。今日はこの日記CGIのプログラムを改造した。年末の日記にも少し書いたが、今回の改造は少し大掛かりなものになる。もう更新したので目次のページを見ると分かるが、右端にfloatしてゐる縦長のボックスの下の方に「話題一覧」といふのがついた。一般的なブログによくあるCATEGORYとかTHEMEとかいふのと同じやつだ。記事にタグをつけてグループ分けする機能。特定の話題でまとめた方が良い場合もある。この日記のプログラムを最初に書いたのはいつだつたか調べてみた。2006年の1月18日に公開したらしい。その数ヶ月前からコツコツとプログラムしてゐたんだらうと思ふ。数ヶ月もやつてゐないかもしれんけど。で、最初はこの機能は実装しないつもりだつた。必要性を感じなかつたし、ありふれたブログの劣化コピーみたいになる感じがして嫌だつたといふのもある。それに何より早めに完成させたかつた。もうDebugといふバンドは活動を開始してゐて、日記CGIのプログラミングが無駄に遅れてゐる感じだつた。公開当初はずいぶんシンプルなプログラムだつたと思ふ。何度も何度も色んな機能を付け加へて今では相当デカいプログラムになつてゐる。行数にして3000。関連プログラムも含めると5000以上あるかもしれん。

最初から計画的に作つてゐればあまり問題は無いのだが、後から機能を追加するといふのは実は結構大変だつたりする。家で例へると、最初はシンプルに2階建てで作つたのに後から気紛れで3階建てにしようと思つて屋根を剥いで上に3階を作るとか、2階の部屋に掘り炬燵が欲しいなと急に思ひ立つて床をブチ抜いて工事するとか、さういふ感じ。最初からさういふものとして作つてゐれば大した苦労は無いのだが、後から追加でやつて行くと大変なことになる。建て増しを続けるといつか破綻する。別の場所に影響が出てしまつたりするし、昔作つたところはどこがどうなつてゐたか詳しく覚えてゐなかつたりして、次から次へと問題が出て来る可能性がある。もうプログラム自体も相当複雑になつて来て限界を感じ始めてゐる。1つ機能を追加するために複数の場所を弄らないといけないし、下手に弄つてエラーが出たりするとデバッグ作業に膨大な時間を奪はれたりする。今回の改造は相当大変だらうなと思つてゐた。

カテゴリを作成して記事を関連付けたりする部分は別のプログラムとして年末に作成した。後はそのプログラムによつて作成されたタグや関連付けを日記本体のプログラムに反映させる必要がある。まづは目次ページの横のボックスに話題一覧といふのを追加した。話題一覧が記録されたファイルを読み込み、実際に記事が登録されてゐる話題のみを表示するやうに組む。各話題には番号が振つてある。それをプログラム側で識別できるやうにする必要がある。この話題と関連付けられた記事の一覧を表示するといふ動作をさせるためにプログラムに話題番号を与へる必要がある。URLの最後についてゐるQUERY_STRINGにtopic=nといふ値をつける。しかしこれだけではどうにもならない。プログラム側でtopicといふ値を処理するコードが無いからだ。まづは入力チェックのプログラムを書き、各種データファイルの存在を調べたり整合性を確認したりするプログラムを書く。その上で、番号に対応した記事を表示するプログラムを書く。目次ページで値を受け取つた場合、各記事のページで値を受け取つた場合等、色々と細かく書いて行く。すげえ大変。確かここら辺まで書いて眠気が最高潮に達して午後に寝たと思ふ。

寝る前に重大なバグを発見した。今回作つてゐる部分とは全く関係が無い部分なんだが、特定のエラー発生時に一寸した不具合がある。まあそのエラーはほとんど起こらないから取り敢へず放置。セキュリティに問題があるといふわけでもない。いづれ修正せねばならんが今は放置だ。

夜に起きた。プログラミングの続き。過去の日記をチェックしたりしてゐてまたまたバグに気付いた。今まで誰も気付かなかつたのが笑へる。目次ページの下にページ移動のリンクがある。目次1ページ当たり50件の設定になつてゐるので、50件以上の日記があるとこのリンクが出て来る。この機能を付けた時点で俺の日記は相当な数があり、このバグに気付く要素は無かつた。しかし椅子タンの日記数が絶妙にエラーを出す数だつた。まあここは軽く修正済みなので省略する。もう1つ厄介なバグを発見した。バグといふか単純なミスだな。過去の日記を何気なく見てゐたら更新日時のところに時刻ではなく変な文字列が表示されてゐた。これは見たことがある。見た瞬間に凄まじく溜息が漏れた。これは大変だ。単純でくだらないミスだが修正は異常に大変さうだ。先月の初め頃に、日記の更新日時を記録するやうにプログラムを改造した。その時、データファイルの空き領域に日時を記録することにしたと日記に書いた。この日記CGIは俺の自作だが、このプログラムを使ひ始める前はBeginner's Rockのサイトで違ふプログラムを使つてゐた。Shiory Diaryとかいふやつだつたと思ふ。どこかの誰かが作つた無料のプログラムをダウンロードして来て設置してゐた。で、途中からこの自作CGIに移行したんだが、その際にログを流用することにしたのだ。それまで大量に書かれてゐた日記のデータをそのまま使ふ前提で新しいプログラムを書いてゐた。先月の日記で、新たな変数やデータを扱ふやうになる時のために空き領域を用意しておいたみたいなことを書いた。それを使ふ時が来たのだ!といふ感じで。しかし記憶違ひだつたのではないかと思ふ。ログを流用するのにイチイチ既にあるファイルに新たなデータ領域を追加して使ふとは思へん。前のプログラムで使ふはずだつた領域でたまたま空いてゐた領域が残つてゐただけなのではないか。で、使はれてゐないと思つてゐた領域に何らかのデータが入つてゐたといふ落ち。昔の日記を見ると時々更新日時の表示がをかしい。その領域に何のデータが書かれてゐたのかは覚えてゐない。俺のプログラムでは使つてゐないデータだ。表示される文字列には見覚えがある。画像ファイルのファイル名の一部だ。これは天気だな。Shiory Diaryの時代には天気を記録する項目があつた。今俺が更新日時を記録するために使つてゐる場所にその天気データが書き込まれてゐたらしい。困つた。他に空き領域だと思つてゐた場所も何らかのデータ記録に使はれてゐた可能性がある。ならば完全に新しい領域を追加するか、過去のゴミデータを消去する必要があるといふことだ。膨大なデータファイルを自力で編集するのは不可能なので、それをプログラムにやらせるしかない。そのためのプログラムを書くのか。大変だな。面倒臭いな。日記本体のCGIも相当中途半端に弄つてゐるから、キリの良いところまでは一気に書いてしまはないとわけが分からなくなつて死亡だ。どうしようか考へながらギターを弾いたり2ちゃんねるのクソスレを覗いたりした。さう言へば椅子タンがこまめに天気を記録してゐたやうな気がする。そのデータを消去するのは気が引けるし作業も大変だ。隣の領域には何が記録されてゐるのか調べてみることにした。ノートPCの中にはShiory Diaryのスクリプトが無かつたので久しぶりにデスクトップPCの中を調べてみた。$avとかいふ変数を記録してゐるらしい。しかしその変数の中身が分からん。人が書いたプログラムは一寸見ただけでは分からん。その変数がどこで使はれてゐるかとか最初から通して見ていく必要がある。何か記念日チェックのフラグのやうだ。さう言へば記念日を登録できたよな。これは誰も使つてゐなかつたやうな気がするが分からんよな。いづれにしても別の領域に更新日時を記録するやうに変更するとしても、先月初めから今日までの日記ログに既に書き込まれた更新日時のデータを移行するのは大変な作業だし、更新日時を扱ふ部分のプログラムを全て書き換へるのは大変だ。漏れがあつたりするとまた後で大変なことになるしな。できればそのままにしたい。何か方法は無いかなと考へた。で、簡単な方法を思ひついた。基本的にそのまま放置で良い。表示時やフォームに必要な時にデータチェックをしてYYYY-MM-DDThh:mm:ss+09:00の形になつてゐなければ空文字列に置換して存在しないものとして扱ふ。これでOKだ。だから天気データが残つてゐる日の日記を今から更新すると何も無いものとして扱はれてゐるところに新たに日時が上書きされる。天気データが残つてゐても無問題。しかし、色んなところで歪みが出て来てゐるよな。色々と機能を追加したりするたびに変数名がどこかで被つてゐるのではないかと不安になつたりする。myで局所化できるところは当然やるが、別の場所で再利用する必要がある変数だと怖い。今まで使つてゐた変数名かどうかテキストエディタの検索機能でチェックしたりするのが面倒だ。サブルーチン名も被らないか不安だ。ここまで複雑になつて来ると構造化プログラミングの限界を意識せざるを得ない。昔はオブジェクト指向の必要性を全く感じなかつた。今頃になつてこんな状況に陥つてゐる。

さて、気が狂ひさうなほどエラーを連発しながら何度も何度もテストし、バグを潰して何とか表示できるところまではできた。これで完成といふことにしても見る側には問題ない。話題を選択して表示させるといふ点に関しては完成してゐるからな。でも日記を書く側に問題がある。話題作成や関連付けは別のプログラムでやつてゐる。だが日記本文を書いた時に同時に関連付けもできた方が便利に決まつてゐる。といふわけで、日記執筆フォームの方の改造が必要になる。話題データのファイルを読み込み、チェックボックス付きの一覧をフォームのところに追加する。それだけでは機能しない。プログラムがフォームからデータを受け取つて処理し、ファイルに書き出すといふコードを書かねばならん。データファイルも大量だし整合性のチェックも必要だし、受け取つたデータがをかしな値ではないかチェックするのも必要だし、それら全部を書いて動作チェックをする必要もある。エラーが出て動かないならエラーの箇所を修正すれば良いのだが、悲惨なパターンはエラーが出ずに動くのだが意図した動作をしないといふパターン。今日も何度かそのパターンにハマつて苦しめられた。でも無事に意図した通りの動作をするやうにできた。

プログラマつて大変だよな。こんなのを仕事で毎日やつてゐたら発狂すると思ふ。俺は趣味で脳の体操的な感じで楽しんでゐるが、毎日は絶対にやりたくないし人のためにとか絶対無理。金貰つてもやりたくない。

一応動作チェックもしたが、これだけ大掛かりな改造をしたらどこかに見落とした不具合があるだらうと思ふ。たぶんバグだらけだと思ふ。もうワケワカランほど混沌としてゐる。プログラムの中にコメントがずいぶんたくさん書かれてゐる。それが無かつたらもうどこに何があるのか分からんし悲惨だらうと思ふ。

折角プログラムしたので早速その機能を使つてみることにした。Debug&Beginner's Rockのライブの日の日記を集めてみた。バンドのサイトなのになかなかバンドの話題が出ないので貴重だ。あとは水族館に行つた日の日記とか。水族館の日は写真が多くて良い感じ。プロのライブを見に行つた日のも集めてみた。B'zと松浦亜弥が多いな。あとは種子島旅行記。種子島編は読み応へがある。誰も読まないだらうけど。

どうせ誰も触らないだらうけど、バンドメンバーでこの機能を使ふ人はDebugのサイトのメンバーページから編集してくれ。BRのサイトの方からはできないので。そちらまで対応する余裕も無かつたし、もうBRの方は誰も使つてゐないと思ふので、このままで良いだらうと思ふ。やり方はある程度書いてあるので試してみれば良い。分からなかつたらバンド練習の時にでも聞いてくれ。もう朝の6時半だよ。夕方から夜にかけて寝てゐたが、それを除いてもずいぶんと長い時間プログラミングに苦戦してゐた。脳のエネルギーを使ひ過ぎたな。苦戦した理由はたぶん酒を飲みながらやつたことだと思ふ。酒飲みながらプログラム書くなんて自殺行為ですよ。素面ならもつとマシなコードを書けただらうな。だがこれが犬土偶だ。何か不具合を見つけたら教へてくれるとありがたい。

夜にZ店の閉店メールが来た。今日の全6は戦国無双、半6はエヴァまごだと。ナメてんのか。正月は激渋のはずだらうが。中途半端に出すんぢやねえよ。休み明けは危ないな。といふことにして休む。パチ屋なんか行きたくねえ。金?要らんわボケ。

今日は何としても年賀状を書かねばなるまい。昨日の朝に宛名だけ印刷した。あとは適当に何か書いて郵便局に持つて行くだけだ。今日になつてから追加で届くなんてことはないだらうな。1回でまとめて全部返事を出したい。まあいい。プログラミングが終つてから急激に酒の量を増やしたからキツくなつてきた。種子島の芋焼酎を舐め回しまくる。酒に弱いから大量には飲めん。アホみたいに舐め回す。何か寒いな。年賀状出しに行くのも大変だな。早く夏になれボケ。こんな寒かつたらウンコ漏らしながら凍死するだらうが。心の底から死んで欲しい。

話題:Webプログラミングとか

Info.
公開日時2009年01月05日 06時49分52秒
本文文字数5687文字 (タグ込み)
URLhttps://orca.xii.jp/br/diary/diary.cgi?id=dogoo;date=20090104
Comments

コメントはありません。

コメント投稿フォーム
文字色              
  • 名前を省略すると「名無しBeginner」になります。
  • メールアドレスの入力は任意です。
  • 海外からのコメントスパム対策のため、表示された漢字の読みを必ず入力してください。
  • 本文は必須項目です。投稿する場合は必ず記入してください。タグは使えません。
  • 改行が1つ入力された場合は強制改行として処理されますが、2つ以上連続する改行は段落の終了として処理されます。
  • 本文の行頭に「>」のある文は引用としてマークします。引用でない部分の冒頭に「>」は付けないでください。
  • コメントの削除は管理者若しくは日記執筆者しかできません。書き込む時は注意しましょう。
  • 全部記入が済んだら投稿ボタンを押す前に一度読み直して推敲しましょう。