連載
» 2007年03月09日 07時00分 公開

第6回 Webアプリケーション開発にチャレンジ【前編】作って学ぶ、今どきのWebサービス(2/3 ページ)

[はてな 伊藤直也,ITmedia]

出力をテンプレートエンジンで整形する

 さて、Open Searchを使ったWebアプリケーションの開発に入っていきますが、いきなりアプリケーションを作る前に、出力をどうやってHTMLに整形するか考えてみましょう。

 真っ先に思いつくのは、リスト2のようにPerlスクリプト中にHTMLを書くスタイルです。しかし、HTMLのデザインを変更するのにスクリプト本体を変更しなければいけなかったり、行数が増えてくるとスクリプトの可読性が低くなったりするので、この方法はあまりお勧めできません。


print "<html>";
print "<head><title>Open Search</title></head>";
printf ("<p><a href="%s">%s</a></p>\n", $_->{link}, $_->{title})
    for (@{$feed->items});
        :
        :

リスト2 Perlスクリプト中にHTMLを書いた場合

 そこで利用するのがテンプレートエンジン。マクロを実行できるテンプレートとしてHTMLを用意する方法です。これも利用例を見るのが分かりやすいと思います。Perlの代表的なテンプレートエンジンであるTemplate-Toolkit*(以下、TT)を使って先のスクリプトを整形してみましょう。

 まず、スクリプトをリスト3のように書き換えて、TTで出力するように変更します。このようにTemplateインスタンスのprocessメソッドに、

  • テンプレートファイル
  • テンプレートから利用するオブジェクトやデータ構造

を渡して実行すると、テンプレートファイルを読み取ってマクロを展開して出力してくれます。


#!/usr/local/bin/perl
use strict;
use warnings;

use WWW::OpenSearch; use Template;
my $word = shift; my $osxml = shift || "http://search.hatena.ne.jp/osxml"; my $engine = WWW::OpenSearch->new($osxml); my $feed = $engine->search($word);
Template->new->process("./search.tt", { result => $feed }); # TT で出力
リスト3 Template-Toolkitを使ってHTMLを出力

 次に、スクリプトとは別に、テンプレートファイルを用意します。例えば検索結果をul、liタグを使ってマークアップするテンプレートはリスト4のようになります。これを実行すると、実行例3のように整形されて表示されます。テンプレートエンジンを使ったことで、スクリプトと出力のHTMLをきれいに分離できました。


<ul>
[% FOREACH item IN result.items -%]
<li>[% item.title | html %]</li>
[% END -%]
</ul>

リスト4 検索結果をul、liタグを使ってマークアップするテンプレート

 このようにTTでは「[% var %]」や「[% FOREACH var IN list %]」といったマクロを使ってテンプレートを記述します。より詳しい使い方はCPANのTTのドキュメントを参照してください。

このページで出てきた専門用語

テンプレートエンジンであるTemplate-Toolkit

CPANではTemplateの名前で登録されている。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ