MobaSiFでのWebアプリケーション記述方法
今回は、MobaSiF上で簡単なWebアプリケーションを実装する流れを説明し、その後フレームワークとしての内部処理を説明します。
Webアプリケーションの実装は
- URL、呼び出される.pmファイル、サブルーチンを関連づける
- アプリケーションロジックを.pmファイルに記述する
- テンプレートファイルを記述する
という3ステップで行われます。順に説明します。
URL、.pmファイル、サブルーチンの関連づけ
WebアプリケーションのURLは
という形式をとり、たとえば
のようになります。この場合ページ名は「echo」です。また、この後に“?”を続けて、いわゆるクエリパラメータをつけることも可能です。
ページ名とアプリケーションロジックの関連づけはconf/pages.confファイル内の%PAGEというハッシュで行います。このハッシュではリスト1のような形式で記述します。この記述例を1行で示すとリスト2になります。また、それぞれのフィールドをまとめたのが表1です。
表1 %PAGE各フィールドの設定内容
UID_ST | 端末認証要求(端末IDは、NTTドコモのutnまたはiモードID、auのEZ番号、ソフトバンクモバイルのUIDのいずれか) |
0 | 端末ID通知なしでOK |
1 | 端末ID必須 |
USER_ST | 要求する会員登録状態 |
0 | 非会員 |
1 | 会員登録済(メルアド未認証) |
2 | 会員登録済(メルアド認証済) |
SERV_ST | 操作に対する制限状態(以下を足したもので表現) |
0 | すべての操作を可能 |
1 | 自主退会では操作不可 |
2 | オペレータより退会処理されている場合不可 |
4 | ペナルティ状態だと不可 |
8 | メール不達だと操作不可 |
MODULE | 呼び出すPerlモジュール名 |
SUB | MODULE内で呼び出すサブルーチン名 |
アプリケーションロジックを記述する
conf/pages.confファイルにページを追加したあとは、関連したアプリケーションロジックをpm/Pageディレクトリ以下の.pmファイルに記述します。例として、ユーザがフォームに入力した値を画面に表示するだけのアプリケーションロジックを見ていきましょう(リスト3)。conf/pages.confで指定したサブルーチンには、ハッシュのキーとなっているページ名が引数として渡されます(11行目)。ユーザがFormに入力した値は$_::Fに入ってきますので、そのうちキーが小文字から始まるものに絞って$rhDataというハッシュリファレンスにコピーし(12行目)、"echo"というテンプレートに引き渡しています(14行目)。最後にテンプレートエンジンの処理結果をブラウザに出力します(15行目)。
今回は、このファイルをpm/Page/Echo.pmとして保存します。
テンプレートファイルを記述する
テンプレートファイルの記述方法の詳細は後述しますが、リスト3の14行目で指定している"echo"はtemplate/_system/echo.htmlファイルに対応しますので、この位置にテンプレートファイルを置きます。中身をリスト4に示します。
リスト4の11行目では、リスト3の14行目でMTemplate::insert( )に渡されているハッシュリファレンス$rhDataについて、$rhData->{message}がセットされていればそれが入力フォームの下に表示されるという内容になっています。
テンプレートファイルが用意できたあとは、script/tools/compile_templateを実行して、バイナリテンプレートを出力します。その後Apacheを再起動すると、
でこの画面が表示され、このアプリケーションロジックの動作を確認できます。
ディスパッチャの内部処理
ところで、HTTPリクエストのURLがconf/pages.confに基づいて解釈され、指定された.pmファイルのサブルーチンを呼び出すまでの内部処理はどうなっているでしょうか。この部分はディスパッチャと呼ばれ、MVCコントローラのシンプルな実装ともいえます。内部処理に興味がない場合は飛ばしていただいてかまいませんが、MobaSiFのシンプルで処理を追いやすいという特徴を示す部分でもあり、ほかのモジュールとの関連を示す部分にもなっていますので参考にしてください。
- ApacheへのHTTPリクエストはconf/rewrite.conf(リスト5)のRewriteRuleとconf/httpd.confのFastCGIに関する設定により、fcgi/index.fcgiに渡される。また、URL中の<ページ名>部分は、RewriteRuleによりfというリクエストパラメータに渡される。
- fcgi/index.fcgiはpm/Page/Main.pmのmain( )サブルーチンを呼び出す。このサブルーチンの中では
- ケータイキャリアや端末の判別、端末認証に必要なHTTPリクエストヘッダなどの処理(pm/MobileEnv.pm)
- HTTPリクエストパラメータの共通処理を行い、$_::Fにセット(pm/Request.pm)
- 端末認証に基づいたユーザ情報を取得し、$_::Uにセット
- conf/pages.confに基づき、URL中の<ページ名>に対応するモジュールとサブルーチンの呼び出し
という処理が行われる。
こう追ってみると、実にシンプルな処理になっていることがおわかりいただけるのではないでしょうか。
次回は、MobaSiFに含まれている個々のPerlモジュールについて解説します。