Articles
2007年2月に「VBユーザーでもシンプルだから簡単にできるWebアプリ開発」と題した、X-WebFormとOracle JDeveloper 10gのセミナーを福岡、名古屋、大阪、東京の4都市で開催しました。ご多忙のなか沢山の方にお集まりいただき、この場をお借りして心から御礼を申し上げます。
クライアント/サーバー型言語の経験者に向けたカリキュラムでしたが、参加者がとくに興味を持たれたのがAjaxとデータベースの連携だったという印象でした。
本章より、プログラム開発についてご紹介します。Webアプリケーション(以下、Webアプリ)開発という意味での順番からいくと、HTMLページ生成時のロジック記述法の説明が通例となりますが、ここではあえてAjax技術を使ってプログラミングを行なう手法を先にご紹介したいと思います。
ページ生成時にフォーカスした従来のWebアプリのプログラミング手法と異なり、イベントベースでロジックを記述するAjaxは、まさにクライアント/サーバー・アプリケーションの開発感覚。Webアプリ開発の経験のない方にも十分理解できる内容となっています。
Ajax(エイジャックス=Asynchronous JavaScript + XML)は、Google SuggestやGoogle Mapsなどで利用されたことで一躍脚光を浴びた技術で、Web上でリアルタイム通信を行ない、画面を動的に書き換えるものです。一般的に「古くて新しい技術」などと言われるように、従来から存在するJavaScriptとXMLを組み合わせたHTTP非同期通信アプリケーションの総称です。
例えばGoogle Suggestでは、検索条件欄に1文字入れるごとに、その語句を推測して検索候補がリアルタイムに表示されます。この「文字を入れる」というようなブラウザ上でのイベントをトリガに、サーバー上の処理を実行し、その結果でブラウザを書き換えるというリアルタイムな処理が可能です。
また、従来型のWebアプリ(ここでは、Ajaxを使用していないWebアプリを便宜上このように呼びます)では、画面を書き換える際には、必ずリロード(チラっと画面が切り替わる動作)が発生しますが、Ajaxを使用したWebアプリではリロードは行なわれず特定のフィールドだけが切り替わるため、クライアント/サーバー・アプリケーションのようなユーザビリティが高い画面を作成できます。
では、Ajaxと従来型のWebアプリとでは何が違うのでしょうか?
上の図からわかるように、従来型のWebアプリ(上段)はブラウザからのアクションを受けてサーバー側で処理を行ない、結果としてHTMLページを生成してブラウザに送り返してきます。結果を受け取ったブラウザはHTMLページを表示するため、同じページを表示するようなケースでも常に画面遷移が発生しています。
これに対しAjaxでは、ブラウザからのアクションを受け、サーバー側での処理の結果をHTMLではなくXML形式のデータにしてブラウザに送り返します。ブラウザ側ではデータを受け取り、JavaScriptとDHTMLを使用して、すでに表示しているHTMLページを書き換えるという動作を行ないます。したがってリロードのような動きは発生しません。
Ajaxが登場した当初は、AjaxはXMLデータを受け取って画面を書き換える処理をHTMLフォーム側に実装する必要があるため、デザインとロジックの分離が難しいということがいわれていました。最近は通信と画面書き換えのロジックについてはフレームワーク化が進み、プログラマーはビジネスロジックだけを記述すればよいということになりました。X-WebFormでも、通信や画面の書き換えは意識することなくコーディングが可能です。
Visual Basicのような優れたクライアント/サーバー型言語で作成した入力画面は、生産性も保守性も高いものでした。では、Webアプリでは同様のことができないのでしょうか?
Javaはオブジェクト指向言語ですが、オブジェクトを意識してプログラミングできるのは、あくまでもサーバー側でのビジネスロジックだけです。画面はHTMLページを文字列操作で生成する必要があり、何かアクションが起こるたびにページ全体を意識することは、効率的とはいいがたい面があります。
X-WebFormではHTMLページ上のフィールドをオブジェクトに見立て、サーバー側でクライアント/サーバー的なコーディングが行なえます。
上の図はVisual Basic(左側)と、X-WebFormでAjaxを使って記述したロジック(右側)の対比です。文法的な違いはありますが、ほぼ同じような感覚でプログラミングできることがわかります。特に「click」「gotfocus」といったフォーム上のイベントに応じてロジックが記述されていますが、これはフォームのイベントに応じたロジックが、サーバーサイドでJava言語を使用して作成できることを意味しています。
次に、X-WebFormが生成するJavaソースファイルについて説明します。
「XWFファイル」は前章までにも登場しましたが、X-WebForm Developerでデザインしたフォーム定義内容の保存ファイルです。
「ウェブフォーム表示用JSP」はウェブフォームを表示するためのプログラムファイルです。
JSP(Java Server Pages)はJavaのサーバーサイド技術の1つで、一言でいうとHTMLの中にJavaのプログラムを埋め込んで実行させる仕組みです。Webアプリ開発ではJSPに直接ロジックを記述するのが一般的ですが、これによりソースコードが見にくくなったり、HTMLデザイン変更時に反映が大変、といった問題があります。
X-WebFormでは「ウェブフォーム表示用JSP」はデザイン変更にともなって常に上書きされるので、ここにはロジックは記述しません。
その代わりに、JSPと同時に生成される「フォームクラス」「フォームイベントクラス」「フィールドイベントクラス」というファイルにロジックを記述することができます。「フォームクラス」はHTML生成時のロジック作成用で、「フォームイベントクラス」と「フィールドイベントクラス」はAjax用です。
クラスとはオブジェクト指向プログラミングにおいて、データとその操作手順(メソッド)をまとめた単位です。というとなんだか急に難しく聞こえるので、ここでは「フォームクラス」「フォームイベントクラス」はフォーム全体のロジックを記述する場所、「フィールドイベントクラス」はフィールドごとのロジックを記述する場所とお考えください。
X-WebFormのAjaxプログラミングの特長は、イベントごとに処理手続きが記述できる点にあります。前述したとおり、通常のWebアプリはHTMLページを生成するタイミングにすべてのロジックを記述するので、プログラムが複雑になりがちでした。Ajaxでは、イベントごとにロジックを記述することで処理を見通しよく分割し、かつユーザビリティの高い画面を作成することができます。
X-WebFormのAjaxイベントには以下のようなものがあります。
では、実際にAjaxを使って、ウェブフォーム上のフィールドのイベントに応じたロジックを記述してみましょう。
フォーム起動時にSQLを発行してデータベースから値を取得して画面に設定するような動作は、通常のWebアプリではHTMLフォーム生成時に行ないます(この方法は後の章で説明します)。X-WebFormでは、同様の動作をAjaxを使用して実現することができます。
フォーム全体に対するロジックの記述は、フォームイベントクラスで行ないます。基本的な考え方はフィールドイベントクラスと同様です。
参考までに、よく使うと思われるフォームオブジェクトのメソッドを以下に抜粋します。
| メソッド名 | 内容 | 使用例 |
|---|---|---|
| getValue() | フィールドの値を取得します | String name = Me.bank_name.getValue(); |
| setValue() | フィールドに値をセットします | Me.bank_name.setValue(“○○○銀行”); |
| setFontSize() | フィールドのフォントサイズを変更します | Me.name_kanji.setFontSize(20); |
| setBackgroundColor() | フィールドの背景色を変更します | Me.name_kanji.setBackgroundColor("#FFFF00"); |
| setDisabled() | フィールドの入力可否を制御します | Me.name_kanji.setDisabeld(false); |
| setImeMode() | フィールドのIME入力を制御します | Me.name_kanji.setImeMode(1); |
| setVisibility() | フィールドの可視状態を制御します | Me.name_kanji.setVisibility(false); |
| setFocus() | フィールドにフォーカスをセットします | Me.name_kanji.setFocus(); |
※フィールドの種類によっては使用できないものもあります。
以上、Ajaxプログラミングの基本的な事項について説明しました。次章からはデータベースアクセスなど、実用的なプログラミングについての説明を交えていく予定です。