レポート

「業務系システムは今すぐ脱Strutsを!」業務システムエンジニアのためのHTML5勉強会#04 活動報告

この記事を読むのに必要な時間:およそ 6 分

Strutsをやめる理由? デベロッパの視点から?

前頁では,StrutsをやめてJava標準でWebアプリケーションを作らなくてはいけない理由について,「エンドユーザの視点」で考えてみました。OSSによる独自技術でなくJavaの標準技術を使うことで,運用のリスクを最適化することができるという内容です。

本頁では見方を変えて,「デベロッパの視点」から考えてみましょう。Oracleエバンジェリストの寺田氏は,Java標準によるWeb開発を,次世代型と従来型の2種類に分類しました。

  1. 次世代型:クライアントとサーバ間をデータのみで通信し,画面の生成から表示までをクライアントで行う方式。
  2. 従来型:サーバ側でデータを埋め込んだ画面を生成し,クライアントでは表示のみを行う方式。

1. 次世代型WebアプリケーションとJava標準「Java EE 7」

近年,JavaScriptを使って画面の生成を完全にクライアント側で行う方式が広がっています。Backbone.jsやAngularJSなどのクライアントサイドフレームワークを使うようなケースです。

Oracleの寺田氏は,このような次世代型のWebアプリケーション実現方法について「Java EE 7」からいくつかの機能を挙げ,次のように語りました。

写真 寺田氏の講演の様子

写真 寺田氏の講演の様子

Java EE 7は,HTML5,モバイル・アプリ開発の究極のプラットフォームです。ローンチイベントには,世界から1万超が参加しています。

以前のJava EEは,イベントを開いてもあまり注目されることはありませんでしたが,今では支持を得るようになり,様々な企業システムで活用されるようになりました。

Java EE 7でどの機能に興味があるかアンケートしたところ,WebSocket,バッチ,JAX-RS,JSON-P,並列処理と,多くがHTML5に関連した機能に関心を集めているようでした。

次世代型のWebアプリケーションでは,基本的にはJavaScriptで多くの処理を行い,以下のような通信技術を利用して,データのみをサーバとやり取りします。

  • JSON 1.0
  • JAX-RS 2.0
  • WebSocket 1.0

WebSocketとは,HTTPを使って接続をし,HTTPをアップグレードしたWebSocketプロトコルを使って通信を行います。簡単に言うなら,HTTPの中に独自のクライアント-サーバのソケットを作り上げることができるメカニズムです。

通信の技術として,WebSocketもしくはJAX-RSを利用できますが,サーバ側とクライアント側でぞれぞれ簡単に実装できるようになっています。データ・フォーマットも,JSONを使うことができます。

WebSocketとJAX-RSのどちらを使えば良いのかという問いに対しては,私はケースバイケースとしか答えられません。ただ,JAX-RSは基本的にはHTTPです。データ通信には,HTTPヘッダなどが含まれた状態で送受信が行われます。

対して,WebSocket通信は一度クライアントとサーバ間でセッションが確立されると,HTTPヘッダが無い分データ量が少なくなります。JAX-RSよりもWebSocketの方が,パフォーマンスが高いというデータもあります。また,WebSocketは双方向通信を行うことができます。このあたりを踏まえて,どちらを使うか選択していただければと思います。

Java EEの本格導入のためには学ばなくてはいけないことも多いでしょう。まずはJava EE 6を学んでから,Java EE 7を学習するのも手です。

Java EE 6から7,8へのアップグレードは,差分で追加されます。どこか一つのバージョンをしっかりと勉強すれば,他のバージョンにもスムーズに取り組めます。

2. 従来型WebアプリケーションとJava標準「JSF2.0」

画面生成をサーバサイドで行わせる,従来型のWebアプリケーション開発を改善するJava標準には,JSF(Java Server Faces)が挙げられます。

グロースエクスパートナーズ所属でJJUG幹事である久保智氏は,JSFについて次のように語りました。

写真 グロースエクスパートナーズ所属,JJUG幹事 久保智氏

写真 グロースエクスパートナーズ所属,JJUG幹事 久保智氏

エンタープライズでは,先ほど寺田氏の説明にもあった通り,いきなりJava EE 7を利用することは現実的でないでしょう。Java EE 6の利用が安全で,これに含まれるJSF2.0が有益です。

JSF2.0は,Ajaxの使用を前提に設計されており,近年の広がっているリッチなUI開発に向いています。Strutsと骨子が似ているためStrutsからの移行しやすく,またJava EE標準であるためベンダサポートが受けやすいというメリットがあります。

JSFを使えば,JavaScriptレスにAjaxを使用したリッチなUIを作ることができます。f:ajaxを使えば,部分描画変更がサポートされます。よりリッチなUIを作りたいのであれば,Prime Faces,Rich FacesといったJSFの拡張ライブラリも有用です。Prime Facesには有償でないとパッチのサポートが受けられないという制約がありますが,これらの利用は小さなJavaScriptボリュームでリッチなUIを実現することが可能とします。

拡張ライブラリの注意点としては,基本的には最新のWebブラウザしかサポートされない点です。素のJSFはIE8ぐらいから動きますが,拡張ライブラリを使う場合はより新しいバージョンのIEが必要となり,エンタープライズでの活用では制約となることもあるでしょう。

Java EE6(JSF2.0)の範囲で説明すると,Strutsは以下の機能へ移行されます。

StrutsJSF補足
ActionForm Actionmanaged bean入力データの定義がmanaged beanとして一つにまとめて記述できるようになった。また,アノテーションを使って設定の記述が行えるようになった。
JSP+タグライブラリXHTML + ライブラリJSPのようなServlet変換が無くなった。これにより,エラー時のスタックトレースの可読性が上がった。
commons-validatorJSF Validator + Bean Validatorビュー上に直接定義できるJSF Validatorと,Bean上のプロパティにアノテーションで指定するBean Validatorの2種類の方法を提供される。
Struts tilesUI compositionテンプレートを実装できる。
Request ProcessorPhase ListenerStrutsのprocessXXXメソッドは,Phase Lintenerにより実装,Strutsに比べて拡張しやすくなった。

JSF利用時の注意点としては,JSF1.X(Java EE 5以前)とJSF2.X(Java EE 6以降)は別物と言えるほど仕様に違いがあり,1.Xの実装はあまり出来がよくありません。Java EE 5までの場合は,Strutsを使い続けたほうが良いでしょう。

また,JSFにはデザイナーとの協業向け機能があります。XHTMLにjsfc属性を埋め込むと,HTMLがそのままJSFとして認識されます。したがって,Webブラウザから直接確認しながら開発が行えます。ただし,Java EEの6と7で属性の名前が変わっており互換性が無いため,開発時には注意が必要です。

昨今のフレームワークはリッチなUIを実現するために,セッション機能を多様する傾向にあります。このため,セッション管理機能を独自に作るのは避けるべきでしょう。

また,リッチなUIの実現のためには,セッション上に業務用途以外にも多くのデータを持つ必要があり,メモリを大量に積む必要があります。メモリは安価になりましたので,StrutsのレガシーUIの時代よりも,2倍~10倍ぐらい積むことが推奨されます。

──次頁では,少し方向性を変え,Scalaのような別のJava系技術でWebをどのように扱おうとしているのか,探ってみましょう。

著者プロフィール

川田寛(かわだひろし)

某SIer所属のITアーキテクト。業務システム案件への技術支援を行う傍ら,Google準公式コミュニティ「html5j」えんぷら部の部長として,エンタープライズ領域へHTML5などの新しいWeb技術の普及・推進活動を行う。

Twitter / Facebook

コメント

コメントの記入