(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

アプリケーションの作成

図2●CalcApp/Pages/Index.pmのリスト
図3●template/index.htmlのリスト
図4●htdocs/index.cgiのリスト
図5●httpd.confの設定
写真1●作成したサンプル・アプリケーション

 実際の電卓演算を行うクラスを作成する。CalcApp::Pages::Indexというクラスに,電卓演算機能のアプリケーション・ロジックを記述することにする。

 CalcApp/Pagesディレクトリに,このアプリケーションとして,Index.pmを作成する。まず,プロジェクトのベース・クラスになるCalcApp::Pagesを継承し,dispatch_{ページ名}のメソッドと,POSTリクエスト時のみ動作するpost_dispatch_{ページ名} のメソッド,の2つを実装する。

 なお,dispatchメソッド内の$self(Pagesオブジェクト)は,r(リクエスト・オブジェクト)とsession(セッション・オブジェクト),tmpl(テンプレート・オブジェクト)のようなAPI(Application Programming Interface)を装備している。これらのAPIを利用してプログラミングを行っていく。詳細については,Sledge::Pages::Baseなどのドキュメントを参照していただきたい*5

 ここでは,以下のような仕様でアプリケーションの実装を行った。

●入力パラメータ
arg1 arg2 : 演算対象の数値

●テンプレート変数
result: 演算結果

●セッション変数
history: 演算結果の履歴(最新10件)を格納する配列

 詳しくは,図2[拡大表示]のコード内のコメントを参照のこと。

テンプレート・ファイルの作成

 先ほど作成したアプリケーションに対応するビュー(テンプレート)を作成する。ビューを格納するテンプレート・ディレクトリのtemplate配下に,index.html を作成し,HTMLで記述していく。ここでファイル名を「index.html」にしたのは,先ほどのアプリケーション内でページ名を「index」にしたことによる。ページ名を「foo」とした場合,呼び出されるファイルは「foo.html」となるからだ。

 Sledgeでは,デフォルトのテンプレート・エンジンとして「Template-Toolkit」(http://www.tt2.org/)を使用している。詳しくは,Template-Toolkitのドキュメントを参照していただきたい*6

 では,アプリケーション側から渡されるテンプレート変数やセッション変数を基にして,index.htmlのコーディングを行う。注意すべき点は,
(1)POSTにてフォーム上の入力データをindex.cgiにSubmitする
(2)session.param('history') にて,履歴を取得して表示する
といったところだ。作成したテンプレート・ファイルは図3[拡大表示]のようになる。

トリガ・ファイル作成と
Apacheの設定

 ここまできたらもう一歩だ。最後に拡張子にアプリケーション・クラスを起動するためのトリガー・ファイルを作成する。ここでは,htdocs/index.cgiとして,図4[拡大表示]のように作成した。呼びだすアプリケーションのクラスに対し,

Class->new->dispatch(ページ名)

といった形で呼び出すルールになっている。このトリガーをWebサーバーから呼び出せるように設定しておく。ここではApache::Registryを使用し,/calcappといったURLでアクセスできるようにhttpd.confに図5[拡大表示]のように書き加える。

 Webブラウザから,“http://hostname/calcapp/”のURLにアクセスしてみよう。写真1[拡大表示]のような画面が表示されたはずだ。エラーが発生した場合,設定内容やモジュールのコードに原因があると思われるので,Apacheのエラー・ログなどを再度チェックしていただきたい。

 良く発生するトラブルについては,Sledge::Doc::FAQというドキュメントに対処法が記載されているので参考にしてほしい。

        *        *        *

 Sledgeに関する詳細な情報は,“http://sl.edge.jp/”のWebサイトから取得できる。Webサイトには,利用者向けのメーリングリストの過去ログや,最新CVSツリーへのリンクがあるので,活用していただきたい。

(エッジ 宮川 達彦)

専門サイト「IT Pro オープンソース」トップへ


出典:2003年5月号 92ページ
記事は執筆時の情報に基づいており、現在では異なる場合があります。