ようやく登場したScrawl Notesの統合管理CGI。皆様には突然の登場であるけど、去年の6月13日の日記にも記述が登場してるように、ずいぶん時間がかかってたりする。(実質の作業期間は一週間ほどだけど)
 このCGIはとても働き者で、これひとつでほとんどのことをやってくれるのだ。

 その辺の配布ものとは違って自分に最適化されてるので、とにかく(俺にとって)使いやすい。このメリットがあるからこそ自作したんだけど。
 配布ものの場合、サーバーにCGIをアップしてアクセスし、管理モードなりのボタンを押してパスワードを入れて編集画面に移るのがほとんどだ。(レンタル掲示板と同じだね)
 毎日書くようなコンテンツでそんなまだるっこしいことやってられない。ましてやHTMLを作っていちいちアップだなんて無理。

 規模のわりにテキスト量が異常に多い当サイトだから、管理の自動化は昔々からの悲願だったのだ。JavaScriptでやろうとしてた時期もあったが、ブラウザ依存のJavaScriptは、やはりこういう用途には向かなかった。CGIでないと不可能なのである。JavaScriptで修行を積みながら思っていたのさ。「いつかCGIが使えるようになったら絶対やってやる…!」と。
 そしてその第1弾が、やっとお目見えなのである。

素敵CGIの索敵ポイント

HTMLファイルを作る
最大の特徴であり特長でもあると思う。以前に使ってた日記CGI(配布ものの改造品)は、HTMLはTransitionalにもなってねえわ誰かが見にくるたびにCGIが起動してサーバー負荷的によろしくないわで、一刻も早くなんとかしたかったんだよね。
このCGIはHTMLファイルを作ることで、サーバー負荷を最低限に抑えられる。しかも、まるで手書きしたかのように綺麗なソースを吐く。(ここにはこだわった)
新し順表示を搭載
最新の年月のみ「新しい方が上」でHTMLを作る。頻繁に来てくださる方にはそっちの方がいいだろう…という老婆心。
次の月になって新しいHTMLが作られると、古くなった方は自動で通常の日付順に書き換えられる。
1日表示モードを搭載
引数をyymmdd形式にすることで「特定の記事だけ表示」ができる。これはさすがにCGI出力。
過去記事へリンクを張った場合、その記事だけ表示することでトラフィックの増加や余計な待ち時間を抑えられる。特にパチョ奮闘記はひと月あたりのテキストサイズが100KBを超える馬鹿な年月があるので、これは重要だ。
ちなみに、引数がyymm形式だった場合、該当年月のHTMLファイルへリダイレクトする。(例:href="./?0404" または href="./?date=0404"
これひとつで3つのコンテンツを管理
隔日日記・気分日常雑記帳・パチョ奮闘記、どこからCGIが呼び出されたかで動作モードが変わる。別に3つでなくていくらでも追加可能。(気分日常雑記帳が記事番号管理から日付管理に変更されたのはこのためだったりする)
ローカルと連動する
[ 新規ボタン ]
ローカルの時のみ「write」が現れ、押すと記事を書く画面になる。これはローカルでの動作なので、サーバーを気にせず楽に書ける。JavaScriptがリアルタイムプレビューやカキコモードといった便利機能を提供。
記事を書いて送信すると、ローカルとWebを両方同時に更新する。配布ものだとサーバーのみで動作するので、バックアップするには定期的にログファイルをダウンロードしないといけないが、このCGIはその手間がない。
当然ながら、自分のPCにPerlインタプリタHTTPサーバーを組みこまないといけない。
編集が簡単
[ 編集ボタン ]
ローカルの時のみ各記事のアドレス部分に「Edit」が現れ、押すと直接編集画面へ行ける。もちろん編集結果はWeb側にも反映されるし、反映させないこともできる。ローカル側CGIとWeb側CGIが連動してるからこそできる芸当。
HTML構造の変更が簡単
ページのHTML構造を変更したくなったら、テンプレートをいじるだけで一瞬にして全HTMLを更新。プログラムだからこそできる芸当。
CGIの改造が簡単
自分で作ったんだからあたり前だわな。人が作ったものを改造するのは骨が折れる。
色々自動化
新しいバックナンバーが増えると、各ページのバックナンバーセレクトにも自動追加される。サイトマップコンテンツ入口にも自動追加される。
加えて、トップページの更新日付やWWWCのメタ情報、携帯向け更新情報も更新する。(これは更新しないようにもできる)
記事の削除機能がついてない
結構高性能なのに驚きの事実。これは俺の「一度出したものは引っこめない」という主義に基づくものであり、間違えて送信しようものなら記事データを直接編集しないと消せなかったりする。

 処理のステップとしては、

  1. 記事データを受け取ると、データファイルに追加する。
  2. データファイルを元に、該当する年月のHTMLファイルを更新する。なければ記事データをテンプレートに流しこんで新しいHTMLを作る。
  3. 対象年月が最新号の時だけ「新しい方が上」に並べ替える。
  4. 新しいHTMLファイルを作った場合は、バックナンバーを追加するために全HTMLファイルを更新。(この時、古くなった「新しい方が上」のHTMLは通常順に書き換えられる)
  5. サイトマップとScrawl Notesが読みこむSSIファイルを更新。これによってバックナンバーが増えると両者にも自動追加される仕組み。
  6. 指定がある場合、トップページの更新日付や携帯向け更新情報も更新する。

 という感じ。
 下手な配布ものよりよっぽど高性能になってるはずだけど、最適化しすぎてsiteCTSでしか使えないのがなんとも。(汎用にデチューンして配るのも一手ではあるけど)

 なにより悲しいのは、このCGIを没にしてしまったことである。没になったからこそ、このTransient Editionに登場したわけで、本当はValid Editionでデビューするはずだったのだ。
 そして、これから作る新型CGIは、これを凌ぐ性能…になる予定。

 では恒例のCGIソースを…といきたいとこなのだが、CGIはJavaScriptと違ってセキュリティに直接関係するので、迂闊に公開できない。まだまだひよこだった頃のソースなら見せても大丈夫だけど。(実装版はこれの3倍以上のサイズだ)
 仕方ないので書込画面の体験版モードを作ってみた。お楽しみあれ。(それは無理な相談だ)
 ※IE6専用なので他のブラウザで入るとエラー出まくるわよ。

このCGIの導入で一番しわ寄せを食ってるのは、気分日常雑記帳。このコンテンツはのんびり更新したいので、日付管理だとバックナンバーのリストがひどい虫食いになっちゃうのよね。だから記事番号管理にしてたのだけど。まぁValid Editionになったら全部ひとつに統合されるので、それまでは我慢か。



Page Index
日付 題名 記事の要約
2004.4.5 さよなら conlnk 過去の主役関数退役記念
2004.4.7 焼けないcookie〜CGI編 Perlでcookieをチンするレシピ
2004.4.20 素敵マジックSSI SSIでナビゲーション
2004.4.21 素敵索敵統合管理CGI このコンテンツで使われてるCGI
2004.4.24 IEと外部ファイルと文字コードと EUC-JP vs Shift-JIS