Unix User 9月号の「作って学ぶ、いまどきのWebサービス」

id:naoyaさん執筆の連載第3回です。1回目と2回目は買わずに立ち読みで済ませましたが今回は買いました。フレームワークとか使ったことなかったのでどんな感じかつかむために。何の工夫もせずになぞっただけで、答えは全部書いてあるのに2時間くらいかかりました。
http://takatoshi.dyndns.org/misc/app.cgi
でも収穫はいっぱいあって、箇条書きにすると、

  • やっぱりフレームワークって楽
  • ページごとにクラスを分けてる
  • テンプレートに結構いろんな処理を書いてる(このくらい普通なのかな)
  • ページング処理のためのData::Pageってモジュールがある
  • テンプレートの中でモジュールとか使える(ようだ)
  • HTML::TemplateよりTemplate-Toolkit(TT)のほうがいろいろできる(みたいだ)
  • フォームを値で埋めるためのHTML::FillInFormってモジュールがある(TTの場合はTemplate::Plugin::FillInForm)
  • モジュール書くヒトはすごい(モジュールのソースを見てもわけわかんね)
  • いずれモジュールを書けるまでになりたい(と決意)

という感じか。
BBSもCGI::Application::Dispatch使って書き直そうか。それとも何かほかの物を作ろうかな。とにかく夏休み中に何か作らなければ。

    • -

で、やってて困ったことのメモ。
まずはWWW::OpenSearchのインストールにてこずった。
いつもどおり、

sudo perl -MCPAN -e shell
install WWW::OpenSearch

としたんだけど、何かがビルドできなくて、どうやらlibxml2というのが必要らしいということがわかった。で、

sudo apt-get install libxml2

としたら「もう入ってる」と言われる。で、さらにググったりしたらlibxml-dev(だっけかな)というのが必要だということが判明してapt-get installして無事解決。
次。テンプレートを使って出力する処理のところ。

Template->new->process('./search.tt', {result=>$feed});

だとダメだ。理由を探るために分解。

my $tt = Template->new or die $Template::ERROR;
$tt->process('./search.tt', {result => $feed}) or die $tt->error(), "\n";

すると以下のメッセージ。

file error - ./search.tt: relative paths are not allowed (set RELATIVE option)

相対パスはダメなようだ。そうか。というわけで./search.ttをsearch.ttにしたら解決。

    • -

CGI::Application - Framework for building reusable web-applications - metacpan.org
CGI::Application::Dispatch - Class used to dispatch request to CGI::Application based objects - metacpan.org
CGI::Application::Plugin::TT - Add Template Toolkit support to CGI::Application - metacpan.org
WWW::OpenSearch - Search A9 OpenSearch compatible engines - metacpan.org
Template - Front-end module to the Template Toolkit - metacpan.org
Template-Plugin-FillInForm-0.04 - TT plugin for HTML::FillInForm - metacpan.org
HTML::FillInForm - Populates HTML Forms with data. - metacpan.org
Data::Page - help when paging through sets of results - metacpan.org