既存システムをAjax化することを「Ajaxfy」と呼ぶ。Ajaxfyに当たっては,既存のサーバー側フレームワークや既存のHTML画面と,Ajaxとの相性を確認する。また,既存システムの利用者への配慮が欠かせない。

JSPカスタムタグを作り込む

 既存システムの多くは,Ajax非対応のフレームワークで構築されていることが多い。Ajaxfyするうえで,このフレームワークとの折り合いをどうつけるかが大きな課題になる。

 例えばJavaベースのフレームワークである「Struts」や「JavaServer Faces(JSF)」で構築したシステムの場合,Ajaxのリクエスト処理は比較的容易にサポートできるが,レスポンス処理は問題になりやすい。「非同期レスポンスをXMLなどのデータ形式で返さなければならない場合,サーバー側の修正が必要になることが多い」(NTTデータ 木村氏)。具体的には,JSPカスタムタグ・ライブラリを作成する。そのほか,プレゼンテーション層を「XSLT(XML Stylesheet Language Transformations)」という技術を用いて実装し直すか,「HttpServletResponseWrapper」を使ってレスポンス・メッセージを書き換える方法などが考えられる。

 フレームワークが混在して保守性が下がることを覚悟できるなら,「DWR(Direct Web Remoting)」のようなAjaxフレームワークを追加する方法も検討したい(図1)。DWRはサーバー側の既存のJavaコンポーネントをAjax用のサービスとして提供する機能を持っており,そのサービスを呼び出すJavaScriptのコードを自動生成する。DWRを使えば,JavaScriptの知識があまりなくても開発できるはずだ。

図1●既存WebシステムをAjax化する方法
図1●既存WebシステムをAjax化する方法
「Struts」や「JSF(JavaServer Faces)」などのサーバー側フレームワークで構築した既存WebシステムをAjax化(「Ajaxfy」と呼ぶ)する場合,データ用通信をどう実装するかがポイントになる。この例では,Ajax用フレームワーク(DWR)を追加している
[画像のクリックで拡大表示]

古いHTMLが足を引っ張る

 Ajaxと既存のHTML画面との親和性にも留意しておきたい。HTML画面にCSSを適切に使っているシステムであれば,比較的Ajaxfyすることは容易である。だが,そうでない場合(HTML 2.0/3.2などをベースに作成している場合)は簡単ではない。例えば,<table>タグを駆使してレイアウトを指定していたり,スタイルを使わずに要素のプロパティにスタイル情報を埋め込んだりしているケースである。こうしたシステムをAjaxfyしようとしても,「<table>タグでくくられている要素はそのままでは(Ajax技術を適用しても)ドラッグ&ドロップで動かせない」(ゼロベース 米谷氏)など様々な制約が出てくる。

 問題個所をJavaScriptで書き換えるなどの“抜け道”はあるが,既存の開発支援ライブラリなどがうまく適用できず,効率よくAjaxfyできないことになりかねない。この場合一般的には,CSSを利用するXHTML(Extensible HTML)で画面全体を書き換えることになるだろう。

Ajaxfyしたら「動かなくなった」

 ある企業ではAjaxfyしたとき,利用者から「動かなくなった」という問い合わせが殺到した。これまで複数の画面を遷移していた個所を,一つの画面で部分的に描き直すように変更した。画面遷移するのが当たり前と思っていた利用者は,そうならないために混乱し,「動かなくなった」と思い込んだのだ。

 このように,利用者がAjaxのユーザー・インタフェースになじめるのかも慎重に見極める必要がある。既存システムの利用者には,「画面上の要素をクリックすると次の画面に切り替わり,その繰り返しで処理が進む」というイメージが定着しているはず。このイメージを安易に壊すと,利用者が「使えない」とか「動作がおかしい」などと感じてしまう。

 利用者が習熟しているユーザー・インタフェースをAjaxで大きく変更することは避けるべきだ。それまでのユーザー・インタフェースの一貫性を崩さない範囲でAjax機能を付加するか,「明らかに変えたことが分かるように告知や注意書きを徹底することが必要」(日本IBM 米持氏)だろう。

 システムの改修に多くの工数をかけられるなら,ユーザー・インタフェース全体をAjaxベースで再構築し,“新システム”として提供する方法も考えられる(こうしたケースでは,「Backbase AJAX Struts Edition」など,Ajaxfyに特化したライブラリを使える)。だがそうした場合でも,従来のユーザー・インタフェースをそのまま残し,利用者に選択してもらうようにした方がよい。