書的独話

 
2006年のひとりごと
01月01日 展望、2006年
01月08日 2005年、ベスト
02月12日 不具合本顛末記
02月13日 活字の『航路』はジクザクに
03月23日 700冊記念
04月30日 Perl/CGIに挑戦中
08月20日 人生、宇宙、すべての答え
08月21日 シンギュラリティって?
09月30日 当時、惑星の数は…
10月16日 本棚写真館、ふたたび
12月31日 総括、2006年
 



 
 

 
▲もくじへ
2006年4月30日
Perl/CGIに挑戦中
 

 6年ちょっと借りていた掲示板の閉鎖が決まりました。コミュニティ系の掲示板で、本文のみ書けばすぐさま投稿ができる、気軽に利用できるところ。同じ趣味の方をさがしたりお隣さんと行き来したり……。いろんな出会いがありました。
 サービス終了につながるトラブルがあったのは、2月25日のこと。以降、掲示板でお知り合いになれた方々の、普通の掲示板におじゃましつつ復活を願っていましたが、ついにアナウンスが……。

 一応、この「あまね書房」でも代替措置として、ブログを開設したりしました。でもブログって、ぼやきの披露は簡単なんですけど、双方向のやりとりとなると、いささか不都合があるんですよねぇ。
 新たにレンタル掲示板を探したんですけど、どれもこれもいまひとつ。デザイン面で不満があったり、多機能すぎたり、広告ばかりが目立ったり、有料だったり、と、次々と却下。
 一時は、フォーラムに流れていくことも検討しましたよ。会員でないと利用できないことが分かって、除外しましたけど。ブログにくっつけるタイプの簡易掲示板を試してみようとしたこともありました。サーバーとの相性で断念しましたが。
 そうして残った選択が、これ。

 自分で作ればいいんじゃん。

 幸い、サーバーを借りている「@nifty」では、CGIを自作する人のためにPerlとシェルスクリプトが利用可能になってます。今まで、利用可能だから、となにかをしようと考えたことすらありませんでしたけど、やろうと思ったときにできるって、なんてラッキー。
 かつてMacには、HyperCardというオーサリング・ソフトがありました。HyperTalkという言語を使って、いろんなスクリプトを書いて遊んだものです。そのころには、リファレンスやサンプルだけでなく、美しいプラグラムを書くための心構えの本とかもよく読みました。
 本格的なプログラミングとは無縁の生活でしたけど、HyperTalkとつきあっていた経歴が、この無謀な決定の後押しをしたんでしょうね、きっと。
(Perlも、プログラムというよりスクリプトですけど)

■4月9日。

 コンピュータ書籍の店で、眺めて、捲って、迷って、ついに入門書を購入。

『はじめての人のためのかんたんPerl/CGI入門』
 紙谷歌寿彦/著(秀和システム) 

 最初にやるべきことは、ローカルディスク上でPerlを動かすための環境づくり。
 UNIXが根底にあるMacOS Xでは新たに用意するものはなく、ちょっと設定を変えるだけでOK。超初心者向けだけあってそのあたりも懇切丁寧に書かれていて……って、うちのとなんか違うんですけど〜。
 実はこの本、MacOS X10.2(Juger)を元に書かれていて、うちのはMacOS X10.3(Panther)。この間にちょっとした変化があったのか、なかったのか。読み違えてるだけなのか、ちと違う。
 試行錯誤の末、なんとか回答にたどりついたのは翌日になってから。分かってみれば簡単なことだったんですが……。

 ローカルディスクの準備と、サーバーにアップロードするための環境整備を終えて、まず挑んだのがアクセスカウンタ。レベル的には、やさし〜い入門書を半分方読んだところ。HyperTalkでもこんなことしてたなぁ〜と思いつつ。
 ほとんどお手本通りにこしらえて、それでも、実際に動くのを見たときには、感動しました。
 ここで妄想が始まって、 レンタルしてるアクセスカウンタをやめて自作してしまおう、と考えはじめるんですが、間もなくギャフンとなります。実はCGIって、HTMLファイルから気軽に呼び出せないんです。画像に変換してから画像として読み込むとか、SSIで作り直すとか、なにかしなくちゃならない。でも、画像なら今のと同じだし、@nifty、使えないんですよねぇ、SSI。
 実践カウンタはあとまわし、ということで。

 つづいて、ほとんどお手本通りな、簡単なゲストブック、こしらえてみました。が、なぜか、記事の保存ができない〜。表示はできても保存はダメ。
 いったいなにが悪いのか?
 何度見直しても見当もつかない状況。そこで、入門書付属のCD-ROMから丸ごとコピーする戦法にでて、あてなく撃沈。やっぱり動かない〜。
 こ、これって、欠陥プログラム?
 混乱に陥りつつもあることを思い出して、手を加えてみたら問題なく動きましたよ。間違っていたのは、記事を保管しておくためのファイルのパーミッション(権限)設定。CGIを動かすためには、このパーミッションを設定し直さなくてはならないのですが、本体と同じでいいかと勝手に勘違いしてました。
 パーミッションには誰もがひっかかるらしいので、まぁ、通過儀礼ってところでしょうか。とりあえず、問題クリア。

 このあたりから始めたのが、ネットでの情報収集。
 入門書では、ログを保管しておくデータの拡張子は「dat」でした。特に説明もなく、あたりまえのように。でも、うちの環境ではdatファイルが見られなかったりして。アクセス・カウンタならそれでもいいけど、掲示板じゃそういうわけにもいかない……。
 少々困っていたところで、解決策を発見。いくつかフリーウエアを覗き見させてもらって「cgi」でもOKらしいことに気がつきました。
 なーんだ、他のでもいいんだ。
 さらに、使わなかったアクセスカウンタで学んだことを生かす方法を思いつきました。書き込みに番号をつける。と、まぁ、あたりまえのことなんですけど、応用してやってみたらうまくいきました。
 だんだん掲示板らしくなってきたぞ〜。

■4月16日。

 思いきって公開してしまいました。この時点での重大な欠陥は、以下の2つ。
 書き込み直後にリロードかけると再投稿されてしまう。
 複数人から同時書き込みがあると過去ログがふっとぶ。
 なかなかすばらしい仕様をしてました。これらに対処するには『はじめての人のためのかんたんPerl/CGI入門』には少々荷が重いか? とっかかりとしてはかなりいい部類でしたけど、いろんなことが省略されているのも事実。というわけで、別の本を買ってきました。

『Perl/CGI逆引き大全600の極意』
 (Web新撰組/著秀和システム)

 CGIサンプル集です。家でじっくり読んでみて分かったのですけど、実はこの本、C言語をやっている人向け。最初の本には紹介されてないような書き方してるし、ちょっとレベルが高かった……。
 ひとまず、データ保護のためのスクリプトだけは、そのまま拝借。あとは、まぁ、もうちょいレベルが上がってから、ということでひとまずしまうことに……。

 二重投稿については、直前の書き込みと比較させることで解決を計りました。
 最初にしてみたのは、実際の過去ログを使うこと。でもそれって、時間も入っているから1分たっただけでスルーしていっちゃう。ダブル・クリックには有効でしたけどね。
 そこで書き込みの都度、「名前」と「本文」のみを記録したファイルをこしらえて、そっちと対照するようにしてみました。万全を期すため過去3回分のデータと突き合わせて、ひとまずは二重投稿問題は解決……と思ったんですけど、そうじゃあなかった。
 リロードってやつは、書き込み直後にするもんだとばかり思ってました。数時間後だろうが、数日後だろうが、ブラウザに情報が残っている限り、リロードかけたら再投稿されちゃう。その間、3件以上の書き込みがあったら?
 ネットで調べたり、いろんな方から助言をいただいて、結局「外惑星基地(自作掲示板)」では「Location」という機能を使うに至りました。ブラウザがこいつを受けると、指定したURLへ飛んでっちゃう。それを自分自身に設定してやる。それだけ。
 つけるのは簡単なんですけど、ひとつ問題があって、Locationをやるということは、同じことを2度やる、ということ。つまり、それだけ重くなるんです。高速回線が主流の昨今ですけど、そうでない方もいらっしゃいますからねぇ。ごめんなさいねぇ。

■4月23日。

 このころ、閉鎖されていたコミュニティ系掲示板で、過去ログの閲覧が再開されました。で、久しぶりに見て、びっくり。
 投稿者名に「さん」がついてる〜!
 そんな些細なこと、気がついてませんでした。でも、一度気がつくと、自分の掲示板で呼び捨てを連発してることが気になって気になって……。
 というわけで、うちでも「さん」をつけてみました。自分にまでつけることはないので、それをはじいた上で「さん」を連結。自作だからこそできることでしょうね。

 さらにこの日「外惑星基地」がi-modeから書き込みできる報告が……。携帯のことなんて、正直、眼中にありませんでした。早速、自分でもチェック。
 うげぇ、汚いレイアウト。
 整形のために、センタリングとテーブルでがっちがちに作っているのが裏目に出てました。うん、でも、それでも表示できるのだから、不必要なところをカットするだけで携帯に対応できるのでは? 過去ログは共通のファイルを使えるはず。と考え、ためしに作ってみました。
 見た目はすっきりさせられたものの、書き込んでみると、
「無効なデータを受信しました!」
 と、びっくりマークを出される始末。どうやら原因は、あのLocation。削除したら言われなくなりました。とりあえず、携帯版はこんな感じで。

 その後、また新たな本を購入。入門書だけだと足りないし、大全集はサンプル見ても分からないところがあるし……というわけで

『Perl/CGI辞典』
 坂下夕里/著(翔泳社)

 ネット書店の読者コメントで「初心者後半〜中級者前半」とあったので買ってみました。UNIXとWindows環境用でMacのことは無視されてますが、問題なし。普通に使えます。リファレンス代わりにもなります。
 もう習得できてるかな、というところも一読。最初の『はじめての人のためのかんたんPerl/CGI入門』が、いかに初心者向けだったかを痛感させられました。あの入門書があったからこそ、理解できるんですけど。

 さて、最後に今後の予定。
 実は、現在の「外惑星基地」のスクリプト、自分で理解できる範囲内で書いているため、とってもまどろっこしい。省略できるところも書いてあったり、関数を使いこなせなくて、同じことをさせるのに無駄に遠回りさせたり。それらを少しずつ、差し替えしていきます。
 そして、自動応答機能。
 会話になってないような、おばかでのほほんとしてて、ときたま茶々を入れてくるような、そんなお留守番を導入予定です。コミュニティ系の掲示板にはそういうヤツがいて、ルナって名前でした。
 実は、試作品の段階から導入しようとがんばってはいたんです。影では。その度に、動かなくなって、あきらめて……を何度も繰り返して。でも、それもどうにか脱皮。どうやら、そのためのスクリプトを入れる場所がまずかったようで……。
 いよいよルナの復活です。
 とはいえ、やっぱりまどろっこしい書き方なので、あまり語彙は増やせそうにありません。もっと勉強して、愛すべきおばかさんを作り上げねば……。
 
2012年05月21日追記
 掲示板「外惑星基地」は閉鎖が決まったため、本文中に設けていた外惑星基地へのリンクを外しました。


 

 
■■■ 書房入口 ■ 書房案内 ■ 航本日誌 ■ 書的独話 ■ 宇宙事業 ■■■