パイプ
/
フィルタアーキテクチャに基づく
Web
アプリケーション生成系
PF-Web
の設計と実装
松崎 智広 鈴木 徹也 徳田 雄洋
Webアプリケーションのプログラムを作成するには, アプリケーションロジック以外にもデータ入出力,セッ ション管理,セキュリティ管理等のプログラムを作成す る必要があり,その作成に多くの手間とWeb関連知識 が必要となる.我々は,Webアプリケーションの実行 をパイプ/フィルタアーキテクチャに基づくプログラム の実行とみなすことにより,Webページとアプリケー ションロジックの記述からWebアプリケーションを構 築する生成系PF-Webを設計し実現した.Webアプリ ケーションの記述にはWebページとプログラム間の値 の流れを図示したWeb遷移図とフィルタの出力値を定 める等式を用いる.これらの記述にはCGI等のWebの 規格に関する知識は不要であり,データ入出力,セッ ション管理,セキュリティ管理等のプログラムは自動生 成されプログラマが作成する必要はない.図を用いる全 体的動作の定義と値の依存関係に基づく計算の定義に よってWebアプリケーションを容易に構築できる.1 は じ め に
本論文ではWebアプリケーション生成系PF-Webを 提案する.Webアプリケーションの実現方法として は,PerlやC等の汎用プログラミング言語でCGIプ A Pipe/Filter Architecture Based Software GeneratorPF-Web for Constructing Web Applications. Tomohiro Matsuzaki, Tetsuya Suzuki, Takehiro
Tokuda, 東京工業大学大学院情報理工学研究科計算工 学専攻, Department of Computer Science, Gradu-ate School of Information Science and Engineering, Tokyo Institute of Technology.
コンピュータソフトウェア, Vol.19, No.4(2002), pp.22–38. [論文] 2001 年 4 月 11 日受付. ログラムを作成する方法が基本的である.この場合,作 成する必要のあるプログラムはアプリケーションロジッ クを実現するものだけではない.ここでアプリケーショ ンロジックとは,表示する値の計算,データーベースに 格納する値の計算,Webページ表示順の制御を指す. アプリケーションロジック以外に必要となるプログラム としては,Webページからのデータ入力,セッション 管理,Webページの生成などの処理がある.また,プ ログラマの意図しないデータがユーザによって入力され ることにより,ファイルの破壊や機密情報の漏洩等のセ キュリティ問題が発生する危険があり,その対策も必要 である[8].さらに,これらの処理を実現するプログラム を作成するにはCGI, HTML等のWebに関する規格を 熟知している必要がある.そのため,小規模なWebア プリケーションを作成する場合でも多くの労力を必要と し,一般的なプログラミングの経験がある者でもWeb 特有の規格を学習しなければならない. 本論文で提案する生成系PF-Webは,基本的なデー タ入出力,セッション管理,セキュリティ管理等の処理 を含んだCGIプログラムを,アプリケーションロジッ クの記述から自動生成できる.PF-Webでは,Webア プリケーションの実行をパイプ/フィルタアーキテク チャ[7]に基づいて構築されたプログラムの実行とみな し,WebページとCGIプログラムをそれぞれパイプ とフィルタに対応させる.アプリケーションロジックの 記述に用いるのは,WebページやCGIプログラム等の Webアプリケーションの構成要素間の値の流れを図示 したWeb遷移図[3] [12]と,フィルタ出力値を求める等 式によってフィルタが行う計算の詳細を定義した処理内
容記述の2つである.すなわち,手続き的プログラミン グは不要であり,図を用いる全体的動作の定義と,値の 依存関係に基づく計算の定義によってWebアプリケー ションを簡潔に記述する.Web遷移図と処理内容記述 の作成にはWebに関する知識は不要であり,フィルタ 出力値を求める式を定義できる者であればPF-Webで Webアプリケーションを構築できる. 我々はPF-Web生成系のプロトタイプシステムを実 現した.このシステムはPerlによるCGIプログラムを 生成し,データベースサーバとしてPostgreSQLを使用 する.実現したシステムによって,会議室予約システム や回覧板システム等の典型的なWebアプリケーション を手作業で作成する場合に比べ簡潔な記述によって生成 することができた. Webアプリケーションのプログラムを実現する手段 としてはCGIを使う方法が基本的であるが,その他に も様々な手段がある.PF-Webが生成するWebアプリ ケーションの位置付けを明確にするため,CGI以外の 手段について簡単に述べる.Webアプリケーションの プログラムの実現手段は,プログラムをどこで動作させ るかによって次の3通りに分類できる. 1. サーバ側で動作させる方法.ブラウザが発するド キュメント取得要求によってサーバ側でプログラム が動作を開始する.サーバ側プログラムを実現する 方法としてはCGIの他に,Java Servlet[9], JSP [10], ASP[4], PHP[11]等がある.CGIはWeb サーバがその外部のプログラムを呼び出すための インタフェースを定義した規格である.残りの4つ は既存のプログラミング言語や独自の言語を使って CGIより容易にWebアプリケーションを作るため の機構であり,サーバ側プログラムの作成を助ける 様々な機能を提供している. 2. ブラウザ側で動作させる方法.JavaScriptのよう にHTMLドキュメント内のプログラムをブラウ ザに実行させる方法や,Java Applet のように HTMLドキュメントとは別にプログラムをダウン ロードする方法がある.サーバ側でWebサーバ以 外のソフトウェアが動作していない場合,ブラウ ザ側プログラム単独ではサーバ上のデータの検索や サーバへのデータの蓄積は実現できない. 3. 上記のサーバ側プログラムとブラウザ側プログラ ムを両方使用する方法.この場合,サーバ側で主な 計算を行い,ブラウザ側では入力内容の検査やユー ザインタフェースの制御など,補助的な計算を行わ せるのが一般的である.なお,ブラウザ側プログ ラムとサーバ側プログラムの通信にJava RMIや CORBA等の分散オブジェクト技術を使う方法もあ る.この場合,単にブラウザ側プログラムをダウン ロードするためにWebを使用しており,Webアプ リケーションというよりは一般的な分散アプリケー ションであると考えた方が自然である. PF-Web生成系はCGIによるサーバ側プログラムで 構成されるWebアプリケーションの生成を目的として いる.CGIを選択した理由は,サーバ側プログラムの 実現方法として最も基本的であり,その他は発展形と考 えられるためである.ただし,その他のサーバ側プログ ラムにもPF-Webの考え方は適用できるため,生成系 の実装の変更によってCGI以外のプログラムを生成する ことも可能である.ブラウザ側プログラムは一般にサー バ側の補助として用いられることが多いため,PF-Web ではまずサーバ側プログラムの生成の実現を優先させ た. 本論文の構成は以下の通りである.2節ではCGIに よるWebアプリケーション構築の問題点を述べる.3 節では本論文で提案するPF-Web生成系の設計につい て,4節では実装したプロトタイプシステムによるWeb アプリケーションの構築手順について述べる.5節では CGIプログラムの生成方法を述べる.6節では生成例と して会議室予約システムを示す.7節でPF-Web生成 系を評価し,8節でまとめる.
2 CGI による Web アプリケーション構築の
問題点
CGIによるWebアプリケーション作成時の問題点に ついて述べる.なおこれ以降,プログラムとはサーバ側 プログラムを指すものとする. 規格の知識 CGIによるプログラミングには,Web 特有の様々な規格の知識が必要になる.例えば, Webサーバとプログラムの間での入出力方法, フォームに入力されたデータがブラウザからサーバに送信される際の符号化方式,HTML等の知識が 必要である. 入出力やセッション管理のコード作成の手間 CGI プログラムには,アプリケーションロジックを実現 するコード以外にも,データ入出力やセッション管 理などのために多くのコードが必要であり,その作 成の手間が問題となる.データ入出力に必要となる 主な処理は,フォームに入力された値をデコードし て変数に代入するフォームデータ入力処理や,計算 結果表示用のHTMLドキュメントを作成して出力 するWebページ出力処理である.セッション管理 としては,セッション同定処理と値の引継ぎ処理が 必要である.一般にWebアプリケーションの実行 はブラウザとWebサーバが要求と応答を何回か繰 り返すことによりひとまとまりの計算を遂行する. この一連の要求と応答の繰り返しをセッションと呼 ぶ.HTTP[1]の通信は1回の要求とその応答で通 信が完了するため,各要求がどのセッションに属す るのかはサーバ側プログラムが自力で判断しなけれ ばならない.この判断を行う処理をセッション同定 処理と呼ぶ.また,サーバ側プログラムはHTTP 要求があるたびに実行を開始し応答を返すときに終 了するために,変数の値は同一セッション内で後続 の処理を行うプログラムには引き継がれない.その ため,Webページ内の隠しコントロール†1やファ イルなどを使って次のプログラムに値を渡す処理が 必要になる.これを値の引継ぎ処理と呼ぶ. セキュリティ管理 プログラマが意図しないデータを ユーザが入力することによって誤動作やセキュリ ティ問題が発生しないようにCGIプログラムには 対策を施す必要がある.例えば,入力データが長す ぎたり書式が間違っていると,想定外のファイルへ のアクセスや任意のコマンドの実行が可能になり, ファイル破壊や機密情報の漏洩等のセキュリティ問 題が発生することがある.これを防ぐには,フォー ムデータ入力処理において入力値が意図した範囲 内であることを確認する処理が必要である.また, Webページ出力処理においては,表示文字列中に †1 HTML の タ グ <INPUT TYPE=HIDDEN> で 表 さ れ る フォーム構成要素 [6]. 不等号が含まれていると,それがブラウザによっ てHTMLタグやクライアントサイドスクリプトと 解釈され,表示の乱れや誤動作を引き起こす.従っ て,表示文字列に含まれる不等号などの特殊記号は 文字参照†2に置き換えなければならない. プログラム実行順序の管理 一般にブラウザは取得し たWebページを保存するキャッシュを持ち,過去 に表示したWebページを「戻る」ボタンなどに よって表示させることができる.このため,プログ ラマが意図した順番でプログラムが実行されるとは 限らず,特定の実行順序を仮定してプログラムを作 成した場合には正しい計算が行われない.従って, プログラムの実行順序を管理して意図しない順序で プログラムが呼び出された場合には処理を中断した り,任意の順序で実行されても問題が起きないよう プログラムを設計するなどの対策が必要である.
3 PF-Web 生成系の設計
PF-Webでは,Webアプリケーションの実行をパイ プ/フィルタアーキテクチャに基づいて構築されたプロ グラムの実行と見なし,Webページとプログラムをそ れぞれパイプとフィルタに対応させる.アプリケーショ ンの記述にはWeb遷移図と処理内容記述を用いる. Web遷移図はWebページやプログラム等のWebアプ リケーション構成要素の間のデータの流れを示した有向 グラフであり,処理内容記述は各プログラムの計算の詳 細記述である. なお,この節以降では会議室予約システムを例として 用いる. 例3.1:会議室予約システム 会議室の予約をWeb上で 行う「会議室予約システム」は次の4つの機能を持つ. 1. 利用者のID/パスワードの登録とPIN番号の発行 2. 日時と部屋番号を指定しての会議室の予約 3. 日時と部屋番号を指定しての予約のキャンセル 4. 予約一覧の表示 □ †2 HTML において文字の名前によって文字を表現する方 法.例えば文字参照’<’ は文字’<’ を表す.図1 Web 遷移図のノードと有向辺 3.1 Web遷移図 Web遷移図は図1に示す4種類のノードと2種類の 有向辺で構成される.ノードの中にはその名前を記述す る. 3.1.1 Web遷移図のノードと有向辺 まず4種類のノードについて説明する. 固定Webページノード アプリケーションの実行に よって表示が変化せず,動的に生成するプログラム を必要としないWebページを表す. 出力Webページノード プログラムの実行終了時に 表示され,その計算結果を表示するWebページを 表す.その表示内容はプログラムによって動的に 生成される.固定Webページノードと出力Web ページノードを合わせて,Webページノードと呼 ぶ. 処理ノード サーバ側プログラムを表す.ユーザが Webページ中の送信ボタンを押すことによって呼 び出されて動作を開始し,実行終了時に出力Web ページをブラウザに送信する. 外部記憶ノード データベース等の外部記憶を表す. 外部記憶とはプログラムから読み書きされる永続 記憶であり,すべてのセッションで共有される. PF-Webではデータベースに格納されている各テー ブルをそれぞれ外部記憶として扱う.また,プログ ラムからの電子メールの送信を可能にするため,送 信するメールを一時的に蓄える格納場所があると考 え,これを書き込み専用の外部記憶として扱う.こ 図2 利用者登録機能部分の Web 遷移図 (概略) の格納場所を送信メールスプールと呼ぶ. 有向辺は次の2種類である. ページ遷移リンク デー タ の 転 送 を 伴 わ な いWeb ページ間のリンクを表す.この終点は常に固定 Webページノードである. データフローリンク リンクの起点から終点へのデー タの流れを示す.その正確な意味は,起点と終点 のノードの種類により異なる.処理ノードと外部 記憶ノード間のデータフローリンクはプログラムか ら外部記憶への読み書きがあることを示す.Web ページノードから処理ノードへのデータフローリ ンクは,そのWebページからプログラムが呼び出 され,Webページ中のフォームに入力された値や 3.1.2節で述べる不可視パラメータ等の値がプログ ラムに与えられることを示す.処理ノードから出力 Webページノードへのデータフローリンクは,プロ グラム実行完了時にWebページが出力されること を示す. 例3.2:利用者登録機能のWeb遷移図 図2に会議室予 約システムの利用者登録機能部分のWeb遷移図を示す. 3.1.2節で述べるWebページ構成要素は省いてある.こ の図で,処理ノードADD1が利用者登録をするプログラ ムである.ADD1はRegisterページに入力されたID やパスワードなどの情報を受け取り,それをデータベー ステーブルuser listに追加し,PIN番号をメールで 送信することをユーザに示すためにConfirm1ページを 表示させる.user listテーブルに既に同名のユーザ がいる場合など登録に失敗した場合はError1ページを 表示させる.なお,Confirm1ページとError1ページ のどちらを表示させるか決定する条件はWeb遷移図に
は示さず,3.4節で述べる処理内容記述で定義する. □
3.1.2 Webページ構成要素
Web遷移図のWebページノードの中にはWebペー ジの構成要素を記述する.一般にテキストや画像もWeb ページの構成要素であるが,これらはWeb遷移図には 記述せず,プログラムとのデータ送受信やWebページ 間の遷移に関係する以下の要素を記述する. ページ遷移リンク起点 ページ遷移リンクの起点とな る要素で,Webページ上にはリンクとして表示さ れる. コントロール フォーム内でデータを入力するための 部品であり,文字列を入力するテキスト入力コント ロールや,選択肢一覧からの選択を受け付けるセレ クトコントロール等がある.各コントロールは属性 を持ち,その値がコントロールの表示や働きの詳細 を定める.例えば,テキスト入力コントロールの属 性maxLengthは入力可能最大文字数を,セレクト コントロールの属性optionsは選択肢の要素を定 める. 不可視パラメータ プログラムから出力される値であ り,Webページを経由して次に呼び出されるプロ グラムへ渡される. 可視パラメータ 不可視パラメータと同様であるが, 値がWebページ上にテキストとして表示される点 が異なる.プログラムでの処理結果をWebページ に表示させるために用いる. フォーム付きテーブル デー タ ベー ス テー ブ ル を Webページに表示した上で,そのテーブルから レコードを1つ選択するフォームを作成する構成要 素である.次に呼び出されるプログラムには,選 択されたレコードの各カラムの値が渡される.例え ば,ショッピングカタログから商品を選択するWeb ページで用いる. 各構成要素には名前を付け,図3に示す表記法でWeb ページノード中に記述する.不可視パラメータ,可視パ ラメータ,フォーム付きテーブルはプログラムの出力値 を必要とするため固定Webページノードには含まれな い.フォーム付きテーブルの表記法は後述の例3.4で述 べる. 図3 Web ページ構成要素 図4 利用者登録機能部分の Web 遷移図 例 3.3: RegisterページとConfirm1ページの構成 要素 図2のWeb遷移図にWebページ構成要素を追加 したものを図4に示す.RegisterページにはID,パ スワード,電子メールアドレスを入力するための3つの テキスト入力コントロールと送信ボタンがある.各テキ スト入力コントロールには属性maxLengthに入力可能 最大文字数を与えるが,この値はuser listテーブル の対応するフィールドの長さと同じになるよう設定し て,入力された情報が必ずフィールドに収まるようにす る.Confirm1ページには可視パラメータEMと不可視 パラメータPINがあり,それぞれ電子メールアドレス とPIN番号を表す.これらはプログラムADD1から出 力され,Confirm1ページから呼び出されるプログラム EMAIL1に渡される.EMAIL1は受け取った電子メール アドレス宛てにPIN番号を送信する. □ 例 3.4: フォーム付きテーブルの使用例 会議室予約 システムの予約取り消し機能では,予約一覧から取り 消す予約を選択するページでフォーム付テーブルを用い ている.この部分のWeb遷移図を図5に示す.Cancel ページ内のBOOKINGLISTがフォーム付テーブルであ
図5 予約取り消し画面部分の Web 遷移図 図6 セッション開始ページと終了ページ る.フォーム付テーブルはその構成要素として可視パラ メータ,不可視パラメータ,コントロールを持ち,テー ブル内の1レコード分の表示方法を定義する.Cancel ページでは,フォーム付テーブル内に3個の可視パラ メータDAY, TIME, ROOMと送信ボタンが含まれる.これ により,Webページには予約一覧テーブルの各レコー ドごとにDAY(予約日), TIME(予約時間帯), ROOM(部屋番 号)の3つのカラムの値が表示され,送信ボタンが付加 される.ユーザが送信ボタンを押すと,そのボタンに対 応するレコードのDAY, TIME, ROOMが次のプログラムに 渡される.このように,可視パラメータの名前は表示す るレコードの名前として用いられる.不可視パラメータ の場合は,可視パラメータと同様にカラムの値が次のプ ログラムに渡されるが,表示はされない. □ 3.1.3 セッションの開始と終了の定義 セッション管理を行うには,セッションがいつ始まり いつ終了するのかを定義する必要がある.PF-Webで はセッション開始ページの送信ボタンが押されたことに よってセッションが始まり,プログラムがセッション終 了ページを出力した時点でセッションが終了すると考え る. セッション開始ページとなるのは,処理ノードへの データフローリンクを持つすべての固定Webページで ある.すわなち,データフローの開始をセッションの開 始とする.一方,データフローの終了がセッションの終 了であると考え,処理ノードへのデータフローリンクを 持たない出力Webページがセッション終了ページとな る.しかし,この条件を満たすWebページであっても セッション終了ページとして適当でない場合がある.例 えば,図4のError1ページは入力の不備を通知するエ ラーページであるが,これは前述の条件を満たす.しか し,ユーザが前のページに戻って入力をやり直せるよう にセッションは継続されるべきである.そこで,Web 遷移図ではセッション終了ページとなる出力Webペー ジノードにセッション終了マークを付け明示する(図 6). 3.2 パイプ/フィルタアーキテクチャの適用 プログラムから見るとWebページはフォームに入力 されたデータの送信元であり,計算結果の出力先でもあ る.また,Webページはプログラム間で値を中継する 役割も持つ.このようなプログラムとWebページの関 係に注目して,PF-Web ではWebページとプログラ ムをそれぞれパイプ/フィルタソフトウェアアーキテク チャにおけるパイプとフィルタであるとみなす. プログラムXがWebページAから入力を受けWeb ページBを出力する場合,X, A, Bをそれぞれフィル タFX,FXの入力に結合したパイプPA,FXの出力 に結合したパイプPBに対応させる(図7).ただし,プ ログラムが出力するWebページを条件によって切り替 える場合,すなわち,Web遷移図において処理ノード から複数の出力Webページノードへのデータフローリ ンクがある場合には,そのプログラムを複数のフィルタ で構成し,各フィルタにそのフィルタが使用される条件 と出力先Webページ1つを割り当て,プログラム実行 時には条件を満たしたフィルタ1個のみが計算を行うと 考える. パイプは複数のフィールドから成り,それぞれが1個 の値を出力先のフィルタへ伝達する.各フィールドは Webページ構成要素に対応し,可視パラメータ,不可 視パラメータ,コントロール,フォーム付きテーブルに 対応するフィールドをそれぞれ可視フィールド,不可 視フィールド,コントロールフィールド,フォーム付き テーブルフィールドと呼ぶ.コントロールフィールドに 与えられる値はWebページ上の対応するコントロール
図7 パイプ / フィルタと Web アプリケーションの対応 図8 プログラム ADD1 を構成するフィルタと結合するパイプ に入力された値である.その他のフィールドにはフィル タが出力した値が与えられる. 例3.5:プログラムADD1を構成するフィルタ 図4の プログラムADD1を構成するフィルタと,そのフィル タに結合するパイプ,パイプを構成するフィールドを 図8に示す. □ 3.3 外部記憶へのアクセス データベース等の外部記憶の参照と更新がフィルタか ら行えるように,パイプ内のフィールドの値と同様に外 部記憶内のデータもフィルタに対して入出力されると 考える.例えばデータベーステーブルの場合は,テーブ ル全体がフィルタに入力され,フィルタから出力された テーブルがそのままデータベースに保存されると考える (図9).レコードの追加,更新は,フィルタが受け取っ たテーブルにレコードを追加,更新して出力することに よって実現できる. 3.4 処理内容記述 フィルタが行う計算は,フィルタの入力フィールドの 値から出力フィールドの値を求める式によって定義す る.この式を出力定義式と呼ぶ.入力フィールドとは フィルタの入力側のパイプの全フィールドであり,出 力フィールドは出力側パイプのフィールドのうちコント ロールフィールドを除いたものである.さらに,フィル タから外部記憶へのアクセスがある場合は,その外部記 図9 フィルタ – 外部記憶間の入出力 図10 フィルタ ADD1b の入出力フィールド 憶に対応するフィールドが入力フィールドと出力フィー ルドそれぞれに含まれる. 各出力定義式は等式a = f(a1, a2, . . . , an) (n≥ 0) である.ここで,fはn引数関数,aは出力フィール ド,ai(1≤ i ≤ n)は入力フィールドである. 各フィルタが使用される条件は,式g(a1, a2, . . . , an) で定義する.ここで gは真偽値を返すn引数関数, ai(1≤ i ≤ n)は入力フィールドである.この式を有効 条件式と呼ぶ.プログラム実行時はフィルタを記述した 順番で有効条件式が評価され,最初に有効条件式が真と なるフィルタの計算のみが行われ,そのフィルタの出力 先パイプに対応するWebページがブラウザ画面上に表 示される.どのプログラムも有効条件式が恒真のフィル タを1つ持つものとする. PF-Webには既定義の演算子として四則演算,論理演 算,比較演算などが,既定義の関数として文字列の分割 や結合,正規表現によるマッチング,データベーステー ブルの参照と更新などが用意されており,それらを使用 して出力定義式と有効条件式を記述する. フィルタの出力定義式と有効条件式の記述を合わせて 処理内容記述と呼ぶ. 例3.6:プログラムADD1の処理内容記述 プログラ ムADD1を構成する2つのフィルタのうち,図8に示し
1: process add1 {
2: Error1 if i.ID eq "" || i.PW eq "" || 3: i.EM eq "" || db_ntuples( 4: db_select("ID",i.user_list, 5: "WHERE ID=’%s’",i.ID) 6: ) > 0 with { 7: o.user_list=i.user_list; 8: o.DESC="登録できません。 " 9: } 10:
11: Confirm1 otherwise with { 12: pin=generatePIN(i.ID,i.PW,i.EM) 13: 14: o.EM=i.EM; 15: o.PIN=pin; 16: o.user_list= 17: db_insert(i.user_list, 18: "VALUES(’%s’,’%s’,’%s’,%d)", 19: i.ID,i.PW,i.EM,pin) 20: } 21: } 図11 プログラム ADD1 の処理内容記述 たフィルタADD1bの入出力フィールドを図10に示す. この図では,入力フィールド名の頭には“i.” を,出力 フィールド名には“o.”を付けて両者を区別している. i.user list, o.user listはそれぞれデータベース user listに対応する入力フィールドと出力フィールド である. ま た,ADD1の2つ の フィ ル タ の 処 理 内 容 記 述 を 図11に示す.これは以下の形式で記述されている. process 処理ノード名 { フィルタ名 有効条件式 with { ユーザ定義変数または関数1 = 式; : ユーザ定義変数または関数m = 式 出力フィールド1 = 式; : 出力フィールドn = 式 } (処理ノード1個を構成するフィルタの数だけ上記を 繰り返す) } ここで,通常の有効条件式は“if 式”の形式で,恒真 のものは“otherwise”と記述している. 図12 PF-Web 生成系の構成 図13 Web 遷移図エディタの実行画面 図11の処理内容記述はADD1の2つのフィルタをそれ ぞれ2-9行目と11-20行目で定義しており,2-6行目が 前者のフィルタの有効条件式である.これらの式で用い ている“eq ”や“||”等のPF-Web既定義の演算子の 使用法はPerlと同様である. 4行目と17行目は,それぞれ入力したデータベース テーブルに対する検索とレコード追加の記述である. 16行目は,新規レコードを追加したテーブルの出力を 表し,これによりデータベースの書き換えが行われる. テーブルに対する計算はdb select, db insert等の既 定義の関数を使って記述する.前者は検索結果のテーブ ルを返す関数,後者は引数に渡されたテーブルにレコー ドを追加して返す関数である.これらの関数では,検索 の条件や追加するレコードを記述した文字列を引数とし て与えるが,この記述にはデータベース問い合わせ言語 SQLと同様の文法を使い,その記述中に式の値を埋め込 むためにC言語のprintf関数と同様の文字%を使った 記法を用いる. □
4 PF-Web による構築作業
我々はPF-Web生成系のプロトタイプシステムを作 成した.その構成を図12に示す.実装した生成系は Java 2 Platform, Standard Edition仕様のJavaが利 用可能な計算機上で動作する.生成されるCGIプログ ラムはPerlスクリプトであり,データベースサーバとし てPostgreSQL[5]を使用する. Web遷移図は今回作成したWeb遷移図エディタで構 築する.その実行画面を図13に示す.画面上にノードを 配置し,起点と終点を選択して有向辺を作成するという 作業でWeb遷移図を作成する. 処理内容記述はテキストで記述する.処理内容記述に は各処理ノードごとにそのプログラムを構成するフィル タの有効条件式と出力定義式を記述するほか,関数や変 数も定義できる.また,生成されるCGIプログラムと Webページの格納先やURL,データベースサーバに接 続するのに必要なホスト名,ユーザ名,データベース名 も記述する. PF-Web生成器はWeb遷移図と処理内容記述から, 各処理ノードに対応するCGIプログラムと各Webペー ジノードに対応するWebページテンプレートを生成す る.このとき,Web遷移図と処理内容記述との間の 整合性が検査される.すなわち,処理ノードを構成す るフィルタが処理内容記述で定義されていない場合は エラーになる.また,各フィルタについて,その出力 フィールドの値をすべて定義しているかどうかや,出力 定義式や有効条件式の引数に入力フィールドでもユーザ 定義変数でもない未定義の名前を使用していないかが検 査される. Webページテンプレートは,CGIプログラムが出力 するWebページの雛型となるHTMLドキュメントで ある.その内部にはフィールドの値に置き換えられるべ き文字列を含んでおり,CGIプログラム実行時にはそ の文字列がフィールドの値に置き換えられて完成した Webページとして出力される.生成されたWebページ テンプレートに含まれているのはフォームやリンクな ど,Web遷移図に与えられた情報から生成可能な要素 だけである.このWebページテンプレートはWebアプ リケーションの実行には十分であるが,必要があれば既 存のHTMLエディタやテキストエディタ等で編集し, テキストや画像などを追加してデザインを整えたWeb ページテンプレートにする. 例 4.1: Confirm1ページのWebページテンプレー ト 会議室予約システムのConfirm1ページのWebペー ジテンプレートを図14に示す.CGIプログラムADD1 はこのWebページテンプレート中の文字列 PIN を フィールドPINの値に, EM と #EM をフィールド EMの値に置き換えて出力する.EMについて2種類の置 換文字列があるのは,隠しコントロールに与える文字列 と表示用の文字列が異なるためである.後者については 改行を<BR>タグに置き換えることにより,改行を含む 文字列がWebページ上でも改行されるようにする. □
5 CGI プログラムの生成
PF-Webが生成したCGIプログラムには,出力値を 計算するルーチンのほかに,フォームデータ入力,Web ページ出力,セッション管理,セキュリティ管理,プロ グラム実行順序管理の各処理が含まれている.生成さ れたCGIプログラムの例として会議室予約システムの CGIプログラムADD1の一部を図15に示す.この節で は各処理の実現方法を述べる. 出力フィールド値の計算 処理内容記述で定義した計 算は,入出力フィールドを変数で,関数定義をサブ ルーチンで,フィルタ出力値定義を代入文として実 装することにより実現している.フィルタの選択は if文で行い,そのthen節が各フィルタの出力を求 める手続きで構成される. Webページ出力処理 Webペー ジ 出 力 処 理 は, Webページテンプレート内に埋め込まれた可視 フィールド名を実際のフィールド値に置き換えた上 で出力する.この際,フィールド値がHTMLの特 殊記号’<’, ’>’, ’&’を含んでいれば,それらを文 字参照にそれぞれ置き換える.この処理により,こ れらの特殊記号がタグやクライアントサイドスクリ プトとして解釈されて表示の乱れや誤動作が生じ るのを防ぐ.この処理は,予め定義してあるWeb ページ出力サブルーチンを呼び出して実現している (図15 28–32行目). セッション同定処理 セッション同定処理は,フォー1: <HEAD><TITLE>confirm1</TITLE></HEAD> 2: <BODY>
3: __#EM__ <BR>
4: <FORM METHOD=post ACTION="http://ikura/~tmatsu/roombooking/email1.cgi"> 5: <INPUT TYPE=HIDDEN NAME="_session" VALUE="___session__">
6: <INPUT TYPE=HIDDEN NAME="EM" VALUE="__EM__"> 7: <INPUT TYPE=HIDDEN NAME="PIN" VALUE="__PIN__"> 8: <INPUT TYPE=SUBMIT VALUE="SUBMIT"> <BR> 9: </FORM> 10: </BODY> 11: </HTML> 図14 Confirm1 ページの Web ページテンプレート ムに埋め込んだ隠しコントロールを利用して実現 している.セッション開始時にセッションIDを生 成し,CGIプログラムが出力するWebページ内の 隠しコントロールにセッションIDを与える.これ により,次回CGIプログラムが呼び出される時に セッションIDもブラウザから送信され,どのセッ ションの処理の続きであるかを判断できる. 値の引き継ぎ 値の引き継ぎ処理は,フォームに埋め 込んだ隠しコントロールを利用して実現している. PF-Webにおいて次のプログラムに引き継ぐべき 値は,パイプを構成する可視フィールド,不可視 フィールド,フォーム付きテーブルフィールドの値 である.Webページテンプレート内には各フィー ルドに対応する隠しコントロールを設け,その値 としてフィールド名を与え,Webページ出力処理 時にフィールド名をその値に置き換えるようにす る.この方法により,Webページに埋め込まれた フィールド値は,次に呼び出されるCGIプログラ ムの入力として与えられる.図14に示したWeb ページテンプレートの6, 7行目は値の引き継ぎを実 現する隠しコントロールである. フォームデータ入力 フォームデータ入力処理では, ブラウザから受信したフォームデータをデコードし て各入力フィールドに対応する変数に代入する(図 15 34-42行目).この際,テキスト入力コントロー ルに対応するフィールドの場合,最大入力文字数を 越えていないかを検査する.セレクトコントロール については,対応する入力フィールドの値がセレク トコントロールの選択肢と一致するかどうかを検査 する.これらの検査で入力に異常が見つかれば,エ ラーメッセージを表示するWebページを出力して プログラムの実行を終了する. プログラム実行順序の管理 PF-Webによる計算の記 述はプログラムの実行順序を仮定して行っている. すなわち,Web遷移図には固定Webページを起 点としてデータフローリンクで構成される経路があ り,その経路上に処理ノードが出現する順番でプロ グラムが実行されることを仮定している.しかし, 2節で述べたように,特定の実行順序を仮定している 場合にはブラウザの「戻る」ボタン等が使用された 際に意図通りの計算が行われなくなる危険がある. PF-Webにおいて,仮定と異なる順序でプログラム が実行されて問題が発生するのは,外部記憶への書 き込みを行うプログラムが存在する場合である.例 えば,図16のようにプログラムがX,Y,Zの順で実 行され,それぞれWebページA,B,Cを出力し,現 在WebページCを表示しているとする.また,プ ログラムX,Zは外部記憶Eへの書き込みを,Yは 読み込みを行うとする.ここで,ユーザが「戻る」 ボタンを使ってWebページAに戻ってプログラム Yを呼び出すと,Yは一般には正しく計算を行えな い.外部記憶E内のデータはプログラムZによって 書き換えられており,プログラムX終了直後の状態 と異なるためである. もし,プログラムZが外部記憶への書き込みをし ないならば,戻ってプログラムYを実行しても正 しく計算を行える.その理由は次の通りである. PF-Webではプログラムの入力となる値はフィル タの入力となる値であり,それは入力側パイプの各 フィールドの値と外部記憶内のデータである.値の
01: &readFormData; 02: &openDB;
03: ($id,$nextinstance,$guard)=&session_topCgi(’roombooking’,’localhost’,’tmatsu’); 04:
05: if($i_ID eq "" || $i_PW eq "" || $i_EM eq "" ||
06: &db_ntuples(&db_select("ID",$i_user_list,"WHERE ID=’%s’",$i_ID))>0) {
07: (中略)
08: } 09: else {
10: $v_pin=&f_generatePIN( $i_ID, $i_PW, $i_EM ); 11:
12: $o_EM = $i_EM; 13: $o_PIN = $v_pin;
14: $o_user_list = &db_insert( $i_user_list,
15: "VALUES (’%s’,’%s’,’%s’,%d)", $i_ID, $i_PW, $i_EM, $v_pin ); 16: if (($o_user_list eq $i_user_list)) { 17: %OUT=&session_intermediateFilter($id,$nextinstance,$guard); 18: } 19: else { 20: %OUT=&session_guardedFilter($id,$nextinstance,$guard); 21: } 22: &_gen_confirm1_page; 23: } 24: 25: &closeDB; 26: exit; 27: 28: sub _gen_confirm1_page { 29: $OUT{’EM’}=$o_EM; 30: $OUT{’PIN’}=$o_PIN; 31: &genhtml(’/home/decanter/tmatsu/ikura_html/roombooking/confirm1.html’,%OUT); 32: } 33: 34: sub readFormData { 35: %VAR=&decodeFormData; 36: $i_EM=$VAR{’EM’}; 37: &checkscalar($i_EM,80); 38: $i_PW=$VAR{’PW’}; 39: &checkscalar($i_PW,40); 40: $i_ID=$VAR{’ID’}; 41: &checkscalar($i_ID,20); 42: } 43: 44: (後略) 図15 生成された CGI プログラム ADD1(部分) 引継ぎ処理の実現方法の説明で述べたように,入力 側パイプの各フィールドの値はWebページ中の隠 しコントロールからプログラムに入力されるため, プログラムYが呼び出される時には必ずXが実行 を終了した時点で出力した値を受け取ることができ る.外部記憶に変更がなければ,戻って呼び出され たYの入力はX終了直後と変わらない. PF-Webが生成したプログラムは「戻る」ボタンに より生じる問題を回避するために,セッションの実 行過程で外部記憶への書き込みを行った場合には, それより前のページに戻ってプログラムを呼び出し た際に実行を拒否する.外部記憶への書き込みがな い限りは何度でも戻ってプログラムを実行すること ができる.この処理を実現するには,外部記憶への
図17 会議室予約システムの Web 遷移図 図16 外部記憶書き込み後の「戻る」ボタンの使用 書き込みとWebページの出力との前後関係を判断 する必要がある.そのため,Webページの発行番 号を隠しコントロールに与える.発行番号はWeb ページを出力する度に1ずつ増える値である.外部 記憶への書き込みを行ったCGIプログラムは出力す るWebページに与えた発行番号をサーバ側のデー タベースに記録する.CGIプログラム実行開始時 には,そのCGIプログラムを呼び出したWebペー ジの発行番号とサーバ側で記録した番号とを比較す る.発行番号の方が小さければ,そのWebページ は外部記憶への書き込み以前に表示されたページで あることを意味するため,CGIプログラムの実行 を中断してエラーを通知するWebページを出力す る.
6 生 成 例
会議室予約システムのWeb遷移図の全体を図17に示 す.この図では説明のため,このシステムの4つの機能 を実現するWebページノードと処理ノードをそれぞれ 点線で囲ってある.使用しているデータベーステーブル はユーザ情報を保存するuser listと予約情報を保存 するbooking listの2つである.外部記憶emailは 送信メールスプールであり,ユーザ登録完了後と予約完 了後に電子メールを送信するのに使用する. 図18に会議室予約システムの実行画面を示す.この うち,一覧からキャンセルする予約を選択するcancel ページについては,生成されたWebページテンプレー トを編集しTABLEタグなどを追加して,予約一覧が表と図18 会議室予約システムの実行画面 して整形されるようにした.その他のWebページは生 成されたWebページテンプレートをそのまま使用して いる.
7 PF-Web 生成系の評価
この節では,PF-Web生成系の有効性を確認するた めに行った記述実験について述べ,PF-Webを従来の Webアプリケーション構築方法と比較する. 7.1 記 述 実 験 PF-Web生成系の有効性を確認するために大学院の学 生の協力を得て実験を行い,Webアプリケーションの 作成に必要な記述量と時間を,PF-Webで作成した場 合とPerlでCGIプログラムを作成した場合とで比較し た.作成を依頼したWebアプリケーションは次の2つ である. コメント機能付き掲示板 不特定多数のユーザがメッ セージの投稿,閲覧を行える.投稿者へのコメント をメールで送信することもできる. 電子メールアドレス帳 メールアドレスの一覧を管理 し,アドレスの追加と変更,選択したアドレスへの メール送信が行える. PF-Webの場合もPerlの場合も,各アプリケーショ ンそれぞれ2人ずつに製作を依頼した. PF-Webによる作成に先だって,学生にPF-Web生 成系の解説と,簡単な例題によるWebアプリケーショ ン作成の実演を行った.その後,同じ例題を各自で作成 して作成方法を理解してもらった後に課題のアプリケー ションを作成してもらった. 一方,Perlでの作成にあたっては,事前にPerlの使 用法について学習を依頼した.また,アプリケーション 作成前に以下に示す3つのライブラリを提供し,その使 用法を解説した上で簡単なアプリケーションの作成を通 して使用法を理解してもらった.CGI.pm Perlに標準添付のCGIプログラム作成 支援ライブラリ.ブラウザからのデータ受信や HTMLタグの出力を行うサブルーチン群を提供す る. MyCGI.pm 今回の実験用に作成したCGIプロ グラム作成支援ライブラリ.セッションIDにハッ シュを関連づけてファイルに保存する機能を提供す る. Pg.pm PostgreSQLにアクセスする機能を提供す るライブラリ.PostgreSQLに添付されている. Perlで作成するプログラムでは以下の処理を含めるよ う依頼した.PF-Webが生成するプログラムにはこれ らの機能が含まれるためである. • データベースへの書き込み後とセッション終了後に は「戻る」ボタンで戻ったページからの要求は受け 付けない. • Webページ内に出力する特殊記号は文字参照に置き 換える. • ブラウザから得た入力データが最大長を越えていな いか検査する. 実験結果として,作成に要した時間と記述量を図19に 示す.ここで,PF-Webの記述量としては処理内容記 述の行数を示した.また,Perlについては全CGIプロ グラムの合計行数を示した.ただし,Perlプログラム中 には出力するWebページのHTML記述が文字列とし て埋め込まれていたため,その部分は合計行数には含め ていない.この部分はWebページの記述量として考え るべきであるから,処理内容記述と比較する際には除外 するのが適切である. 図19か ら,PF-Webで の 作 成 時 間 はPerlの 平 均 77%,記述行数は平均23%であり,いずれもPerlに よるCGIプログラム作成より十分少なくてすむと言え
図19 アプリケーションの作成時間と記述行数 る. 記述行数の差に比べ作成時間の差が小さいが,その原 因として次のことが考えられる. 1. PF-WebにおいてWeb遷移図エディタの操作性が 悪く,図の修正に時間がかかった.学生からの指摘 として,Webページ構成要素の配置順序変更など の機能が無いため修正に手間取る点,ノードのコ ピー機能などがあれば作図そのものが容易になる点 が挙げられた.このような操作性を改善することに よりPF-Webによる作成時間は短縮できると思わ れる. 2. Perlで作成されたプログラムにおいて,サブルーチ ン化により行数を削減できる余地がある.例えば, データベースアクセス時のエラー処理や入力データ の文字列長検査など繰り返し使用されている部分 を,エディタのカットアンドペーストで作成する傾 向があった. 作成時間と記述量以外におけるPF-Webの利点とし ては次の2点が得られた. 1. CGIプログラムの作成経験がなくてもPF-Webで Webアプリケーションが構築できる.PF-Webに よる作成を担当した学生Bは,CGIプログラムの 作成経験がなかったが,他の学生と同程度の時間で 作成できた. 2. Web遷移図がWebアプリケーションの設計手段と して有効である.Perlによる作成を担当した学生 は4人ともWeb遷移図,あるいは,それを省略し た形式の図を紙に書いてから作業を始めている. Web遷移図を用いたのは,この学生らが既にWeb 遷移図の記述法を知っているためだと思われる.し かし,手作業によるCGIプログラム作成では必須 でないにもかかわらずWeb遷移図を作成したとい うことは,Web遷移図がWebアプリケーション 設計に有効であることを示しているといえる. 7.2 従来のWebアプリケーション構築方法との比 較 7.2.1 手作業によるCGIプログラム作成との比較 2節で述べたようにCGIプログラムを手作業で作成 する際の問題点としては,データ入出力,セッション管 理,セキュリティ管理,実行順序管理のためのコードの 作成が必要な点がある.また,これらのコードを作成す るためには,Web特有の規格の知識が必要になる.こ れに対し,PF-Webにおいて処理内容記述に必要なのは 入力値から出力値を求める計算を定めた出力定義式と, 次のWebページを決定する有効条件式である.データ 入出力やセッション管理等のコードは必要はない.実装 した生成系では式の記述にC言語やPerlに近い構文を
用いており,これらの言語の使用経験があれば容易に記 述できる. PF-Webの利点について,以下にWebアプリケー ション作成時に必要となる知識とコードの観点から述べ る.PF-Webによる作成ではCGIやフォームデータ符 号化方式の知識は不要であり,Webページテンプレー トの編集に視覚的HTMLエディタを用いる場合には HTMLの知識も不要である.ただし,データベースを 扱う場合には手作業による方法と同様にSQLの知識が 必要となる.フォームデータ入力処理,Webページ出 力処理,セッション管理,実行順序管理に必要なコード はPF-Webによって生成されるため,プログラマが作 成する必要はない.セキュリティ管理としては,入力 データの文字列長及び選択肢の検査と,HTML特殊記 号の文字参照への置換のためのコードが自動生成され る.ただし,入力データの書式の異常を検出するコード は生成されないため,間違った書式に対してエラーを通 知するWebページが表示されるように処理内容記述を 作成する必要がある. PF-WebではパイプがプログラムとWebページとの 間のインタフェースを定義しており,プログラムとWeb ページとの間で入出力される値の個数と名前を明らかに している.そのため,フォームデータ入力処理や値の引 き継ぎ処理などのコードが自動生成できるだけでなく, Webアプリケーション実行前にWebページとプログラ ムの間の不整合を検出できる.例えば,Webページか ら入力される値を処理内容記述中で間違った名前で参照 したり,Webページに出力すべき値を定義し忘れたり という記述ミスを検出できる. Web遷移図は,Webアプリケーションを構成する Webページとプログラムを列挙してそれらの関係を示す ため,全体の動作を把握しやすくする.一般に手作業で 作成したWebアプリケーションにおいて,Webページ とそこから呼び出されるプログラムの関係やプログラム とそれによって出力されるWebページの関係を把握す るには,個々のWebページやプログラムを読む必要が あり,全体の動作を把握するのが困難である. 手作業でCGIプログラムを作成する場合の利点とし て,Cookie,HTTP,HTML等Webに関する規格 を駆使して複雑な制御や表示を用いたアプリケーション を作成できる点がある.PF-WebではWeb遷移図と処 理内容記述で表せる範囲の基本的な表示や制御のみを扱 う.例えば,ユーザカスタマイズ情報のブラウザ側での 保存,ブラウザに合ったWebページ記述言語の自動選 択,フレームを用いた画面分割などを用いたアプリケー ションもあるが,これらの機能をPF-Webで扱うのは 今後の課題である. 7.2.2 CGI以外のサーバ側プログラム実現方法との 比較 サーバ側プログラムの実現方法としてはCGI以外に もサーバ内蔵インタプリタを利用するJava Servletや, ASP, JSP, PHP等のサーバサイドスクリプトを使う方 法がある.これらは,Web特有の処理を容易に作成で きる機能を提供している.例えば,ブラウザから受信し たフォームデータは自動的にデコードされ連想配列に読 込まれるため,フォームデータ入力処理の作成が容易で ある.セッションの同定はCookieを利用して自動的に 行われる.同一セッションに属するプロセスが共有する セッションオブジェクトと呼ぶオブジェクトが提供され ており,値の引き継ぎ処理はサーバ内のメモリを使って 比較的容易に実現できる. しかし,CGIプログラムを手作業で作成する場合と 同様に,セキュリティ管理やプログラム実行順序管理は 手作業で作成する必要がある.また,PF-Webの利点 として7.2.1節で述べたように,Webページとプログラ ムの間の整合性が検査できる点や,Web遷移図によっ てWebアプリケーション全体の動作が把握しやすい点 は,CGI以外のサーバ側プログラム実現方法と比べた 場合の利点でもある. 7.2.3 開発ツールとの比較 Webアプリケーション向け統合開発環境のMicrosoft Visual InterDev[4]では,Webページ上のコントロー ルにイベントハンドラを割り当てる方法でプログラム を作成でき,Webページとプログラムの入出力はコン トロールのプロパティを読み書きして行う.この方法 ではプロパティがWebページとプログラムとのインタ フェースを定義していると見なせる.ただし,この方法 で作成されるのは同一の出力Webページの表示を繰り 返すアプリケーションであり,プログラムの実行と新た な出力Webページの表示を繰り返す一般的なWebア
プリケーションの実行形態には合っていない.また, Visual InterDevでは,サイトダイアグラムと呼ぶ図に よって章と節のようなWebページの親子関係を定義で きる.しかしこの図は兄弟ページや子ページへのリンク 一覧の自動生成を目的としており,Web遷移図のよう にWebページとプログラムの関係を記述するものでは ない.
Autoweb System[2]は,Webアプリケーションで 表示する情報の構造として,情報のクラスとクラス間 の関係を定義することにより,その情報の検索や探索 を行うアプリケーションを生成するシステムで,応用例 としてショッピングカタログや大学の講義案内がある. PF-Webは主にユーザの入力データに基づく情報の蓄 積や更新を行うアプリケーションの生成を目的とし, Autoweb Systemとは扱う対象が異なる. 我々の研究グループではPF-Webとは異なるアプ ローチによるWebアプリケーション生成系も提案して いる.その1つであるT-Web[3]は,Web遷移図を用 い,予め用意されているプログラムテンプレートを処 理ノードに割り当てる方法でアプリケーションを作成す る.この方法では手続きや式の記述が不要であるが,作 成できるWebアプリケーションは用意されているテン プレートの組合わせで実現できる範囲に限られる. 7.3 今 後 の 課 題 今後PF-Webを比較的容易に拡張できると思われる 点を以下に述べる. 可視パラメータによる表示データの多様化 計算結果 の表示に使う可視パラメータで表示できるのはテ キストだけであるが,一般には画像やリンクも計算 結果として表示させることが多い.可視パラメータ に値の型とその表示方法を定義するなどの方法で, テキスト以外も表示可能にする. Web遷移図の記述力の向上 Web遷移図ではその構 造を簡単にするためにWebページは高々1つの フォームしか持たないとしているが,一般には複数 のフォームを持つWebページもよく用いられる. さらに,フレームを用いた分割表示やCookieを用 いたユーザカスタマイズ等も一般によく使用されて おり,これらをWeb遷移図で表現できるようにす る. 構築支援ツールの整備 PF-Webによる構築作業をよ り効率的にするために,Web遷移図や処理内容記 述の作成において分割記述や記述の再利用を可能に するツールや枠組みを整備する. 隠しコントロール改竄の防止 セッション管理や値の 引き継ぎに隠しコントロールを使用しているため, それらの情報の改竄を防ぐ処理が必要である.現 状では,セッションIDの改竄によって他人のセッ ションになりすましたり,Webページ間で引き継 ぐ値を改竄することによってWebアプリケーショ ンを誤動作させることが可能である.このような 改竄を防ぐ方法として,隠しコントロールに与えた データに電子署名を付加する方法や,データをサー バ側で管理する方法などを検討する必要がある. CGI以外のプログラムの生成 PF-Webが生成する プログラムの実現方法としてPerlとCGIを用いた が,それ以外のWebアプリケーション実現方法を 用いたプログラムの生成を可能にする.CGI以外 の主な実現方法として,Java ServletやASPがあ る.これを実現するためには,生成するプログラム の記述言語を変更し,データベース,ファイル,ブ ラウザとの入出力方法を生成対象となるWebアプ リケーション実現方法に合わせれば良い.PF-Web が生成するプログラムはPerl固有の機能を使ってい るわけではないため,Java言語やC言語などの一 般的なプログラミング言語でも実現できる.また, ブラウザからのパラメータの受信,HTML出力, データベースアクセスなどの機能は,Java Servlet やASPに限らずWebアプリケーションの実現を目 的としたシステムならば標準的に用意されている. 例えばJava Servletを生成する場合は,記述言語に Javaを,データベースアクセスにJDBCを,パラ メータ受信やHTML出力にはServletが提供する HttpServletRequestオブジェクトと HttpServle-tResponseオブジェクトを利用すれば良い.
8 お わ り に
Webアプリケーションの実行をパイプ/フィルタアー キテクチャで構築されたソフトウェアの実行とみなす手法を用いて,Webアプリケーション生成系PF-Web を提案し,そのプロトタイプシステムを作成した. PF-Webでは,Webページ,CGIプログラム,デー タベース間のデータフローを示すWeb遷移図と,フィ ルタの出力値を求める式によってWebアプリケーショ ンを記述する.手続き的なプログラミングは不要であ り,図を用いた全体的動作の定義と,値の依存関係に基 づく計算の定義によってWebアプリケーションを容易 に構築できる.CGI等のWeb特有の規格に関する知識 は必要なく,データ入出力やセッション管理等を処理す る煩雑なコードを作成する必要もない.実現したプロト タイプシステムは,フォームデータ入力,Webページ 出力,セッション管理,実行順序管理,基本的なセキュ リティ管理のためのコードを含んだCGIプログラムを 生成する. 今後は,より複雑な制御や表示を可能にするととも に,より効率的な構築作業を支援するためのツールの整 備を検討したい. 参 考 文 献
[ 1 ] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P. and Berners-Lee, T. :
Hypertext Transfer Protocol — HTTP/1.1, 1999. RFC2616.
[ 2 ] Fraternali, P. and Paolini, P. : A Concep-tual Model and a Tool Environment for Developing More Scalable, Dynamic, and Customizable Web Applications, Lecture Notes in Computer Science, Vol. 1377(1998), pp. 421–435.
[ 3 ] Jamroendararasame, K., Suzuki, T. and Tokuda, T. : A Generator of Web-based Transaction Systems Using Web Transition Diagrams, 日本ソフトウェア科 学会第 17 回大会講演論文集, 2000, pp. E6–2.
[ 4 ] Microsoft Corporation : MSDN Library. http:// www.microsoft.com/japan/developer/library/. [ 5 ] PostgreSQL Global Development Group :
Post-greSQL. http://www.postgresql.org/.
[ 6 ] Raggett, D., Hors, A. L. and Jacobs, I. : HTML 4.01 Specification, 1999. http://www.w3.org/TR/ html4/.
[ 7 ] Shaw, M. and Garlan, D. : Software archi-tecture: Perspectives on an emerging disclipline,
Prentice-Hall, 1996.
[ 8 ] Stein, L. D. : Web Security: A Step-by-Step
Ref-erence Guide, Addison-Wesley, 1998.
[ 9 ] Sun Microsystems, Inc. : Java Servlet Technol-ogy. http://java.sun.com/products/servlet/. [10] Sun Microsystems, Inc. : JavaServer Pages
Tech-nology. http://java.sun.com/products/jsp/. [11] The PHP Development Team : PHP: Hypertext
Processor. http://www.php.net.
[12] 松崎智広, 鈴木徹也, 徳田雄洋 : パイプ / フィルタアー キテクチャに基づく Web アプリケーション生成系, 日本ソフ トウェア科学会第 17 回大会講演論文集, 2000, pp. E6–1.