最終回 Webアプリケーション開発にチャレンジ【後編】:作って学ぶ、今どきのWebサービス(1/3 ページ)
PerlによるWebプログラミングの基礎から応用まで解説してきた本連載の締めくくりとして、今回は、これまで学んだことを踏まえた上で、実際にWWW::OpenSearchを使ってアプリケーションを組み立てていきましょう。
この連載のバックナンバーは以下の通りです。併せてお楽しみください。
連載第2回:RSSフィードの料理はLWPとXML::RSSにおまかせ
連載第3回:XML::SimpleであらゆるXML文書を料理する
WWW::OpenSearchを使った検索Webアプリケーション
前回は、「Webアプリケーションを作るための仕組み」は、フレームワークとしてCGI::Applicationが用意されていることを解説し、その使い方も紹介しました。前回までの内容を踏まえて、目的のWebアプリケーションは次のような仕様にしました。
- 検索語句を指定して検索
- 検索エンジンを一覧から選んで検索できる
まずは、リスト1のようにCGI本体を記述します。これをapp.cgiとしましょう。app.cgiではCGI::Application::Dispatchを使うので、リスト中の1の部分のようにして自作クラスを置くライブラリディレクトリを指定しておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
そして、指定したライブラリディレクトリに、CGI::Applicationを継承したクラスを作っていきます。たとえばUU::Foobarクラスなら、/path/to/lib/UU/Foobar.pmになります。
トップページのapp.cgi/indexに対応するUU::Indexから作っていきましょう*(リスト2)。まず3行目ですが、CGI::Application::Dispatchを使った場合でも、ロジックを書くクラスがCGI::Applicationのサブクラスなのは一緒です。「use base」で継承します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
4行目ではCGI::Application::Plugin::TTモジュールをuseで読み込んでいます。CGI::ApplicationからTTを使うには、TTのインスタンス生成から出力作成までを自分で行うという手もありますが、プラグインを使うことで、もっと簡単に扱うことができます。プラグインはuseするだけでOK、必要なメソッドがインポートされます。
6行目から13行目にかけて、TTにオプションを渡す処理を追加しています(INCLUDE_PATHでテンプレートのディレクトリを一括指定しています)。CGI::Applicationでは、アプリケーションの起動時にcgiapp_initというメソッドが呼ばれることになっています。アプリケーションの初期化処理などを書きたい場合は、このcgiapp_initをオーバーライドしてそこにロジックを追加していきます。
15行目から18行目のcgiapp_prerunはページへのリクエストごとに呼ばれるロジックです。ここでは出力の文字コードをUTF-8に指定するため、header_propsでヘッダーに出力のcharsetを追加しています。
CGI::Applicationインスタンスのtt_processを呼ぶと、TTを使った出力が可能です。28行目から32行目のように、INCLUDE_PATHオプションでテンプレートのディレクトリを/path/to/templateに設定し、tt_processでファイル名をindex.ttと指定すると、このクラスに対応したテンプレートとして/path/to/template/index.ttが使用できるようになります。今回はリスト3のようなテンプレートを記述してみました。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ただし、リスト3ではマクロを使っていません。マクロを使わないのならテンプレートエンジンなど使わず、単なるHTMLでもいいのですが、将来的にたとえばtitleを外出しの設定ファイルから拾ってきたいといった拡張もありそうなので、TTで出力しておきます。
これで最小限のプログラムは出そろいました。app.cgiを、CGIが実行できる環境に置き、クラスやテンプレートをプログラムの中で指定したとおりの場所に配置して実行(app.cgiにアクセス)します。すると図1が表示されます。
まだ検索フォームから検索語を打っても動きません。そこで、検索フォームのアクション先であるapp.cgi/searchに相当するクラスとテンプレートを用意しましょう。トップページがapp.cgi/indexでIndex.pmだったのと同じく、app.cgi/searchなのでクラス名はUU::Searchになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
トップページのapp.cgi/indexに対応するUU::Indexから作っていきましょう
なおapp.cgiではDEFAULTに「Index」を指定しているので、app.cgiに直接アクセスするとUU::Indexにディスパッチされapp.cgi/indexと同様の画面が表示される。
Copyright © ITmedia, Inc. All Rights Reserved.