2008年に出会った技術
2008年に出会った技術の中で、今後の当社のソフトウェア開発において、もっともインパクトを与えそうなものを2つご紹介します。
- Adobe Flex & AIR
- Seasar2
Adobe Flex & AIR
Adobe Flex & AIRは、Adobe社が提供するRIA(リッチ・インターネット・クライアント)技術です。
RIAというのは、Webでは一般的なFlashの技術を、業務アプリケーションに持ち込むことで、
従来のWebアプリケーションでは難しかった、高度なユーザインタフェイスや帳票印刷、ローカルファイルアクセスなどを
実現するものです。
対抗馬としては、AJAX、MicrosoftのSilverlight、JavaFXなどが挙げられます。
たとえば、これまで、C/S型のアプリケーションを使用していた業務システムのリプレイスを行う際、
Webアプリケーションでは、コンボボックス、編集可能なデータグリッドなど機能不足な面が多々あります。
これらを解消した上で、より使いやすく生産性の高いアプリケーションを構築することが可能です。
Seasar2
これが、今年当社が出会った、最大の革新的な技術。
Seasar2とは、特定非営利活動法人 Seasarファウンデーションが支援する、国内最大のオープンソースコミュニティによるプロジェクト群を指します。
Seasarプロジェクトには、非常にたくさんのサブプロジェクト、製品が存在します。
当社が使用したのは、主にWebアプリケーション開発・上記Flexとの連動に関するものでした。
javaでのWebアプリケーション開発におけるオープンソース利用としては、
SpringFramework、JSF、Strutsを、データアクセスにはHibernateなどが一般的になりました。
当社では、早くから、これらフレームワークを積極的に取り入れ、顧客に提案してきました。
AOP(オブジェクト横断的な処理の実行)、DI(依存オブジェクトの自動挿入)が、これらフレームワークの特長で、
AOP・DI機能により、ビジネスロジックの記述はシンプルになりました。
しかし、これらのフレームワークは、再利用性の高い高度な設計ができる反面、定義ファイルの記述が爆発的に膨らんでいくという問題を抱えています。
Seasar2が目指すものは、「オープンソースという仕組みの元、開発者のゆとりを実現できるプロダクトの開発と提供を通じて、ユーザと開発者とが共に喜びを分かち合える環境実現をお手伝いすること」としており、文字通り、提供される製品には、以下のような特長があります。
- HOT DEPLOY・・・修正したソースがスグに反映される
- クラス名・変数名・メソッド名の簡単な規約ベースの連携・・・定義ファイル不要
- 繰り返し作業の低減・・・当たり前の処理は記述不要
これらの特長は、実際に触れてみると、直ぐに実感できます。
Seasar2は導入実績が少ないということが言われますが、実は、NTT Dataが提供するintra-martで採用されており、こちらの導入実績は1800社だそうです。また、NTT Dataは、イントラマートのS2関係の資産を、Seasar2ファウンデーションに寄贈しているため、つながりは深いと思われます。
「Strutsを使用しています」という開発においても、S2StrutsやSAStrutsを使用している事例は多くあり、大げさなアピールをしなくても、オープンソースがOKな案件への導入は、案外たやすく可能なのではないかと思います。
今年、私たちが使用したのは、S2Container、S2Dao、S2Flex2、S2Dxo、Teeda、そしてEclipseプラグインであるDoltengです。以下に、簡単に紹介します。
S2Container
AOP・DIを司る、基盤となっているコンポーネントです。
ちまたのDIコンテナが、画面一つ、エンティティ一つに対して定義ファイルを必要とするのと正反対に、
簡単な名前付けルールを守っている限り、まるで空気のように存在し、必要なオブジェクトを提供してくれます。
S2Dao
データアクセスを行うコンポーネントです。
これが、もっとも手ごたえのあったプロダクト。
データ検索・トランザクション実行の実装の記述が不要です。
いりません。Connection、ResultSetなど、見なくてすみます。
実装のないインタフェイスのみ書いて、クラス名・メソッド名に基づいたSQLファイルを用意しておくことで、
データアクセスが実行できてしまいます。
また、SQLファイルも、パラメータにコメントで変数名を書いておくと、インタフェイスに宣言したパラメータが使用されます。
S2Flex2
クライアントにFlex・AIRを使用する場合の、Seasar2によるサーバとクライアントのつなぎをやってくれるプロダクトです。
Flexは、XMLによる通信をサポートしていますが、より効率のよいAMF3というプロトコルを持っています。
S2Flex2は、サーバ側のサービスの呼び出し、エンティティクラスとFlex側のActionScript3.0クラスの変換を行います。
これにより、Flexクライアント側は、非同期メソッド呼び出しと同じように処理を記述することができます。
S2Dxo
S2Containerとともに陰で働く、オブジェクト変換コンポーネントです。
クラス設計の階層化が進むと、階層間でのオブジェクト受け渡しの際に、似たような別のクラスに内容をコピーする処理が必要になります。
例えば、クライアントから受け取ったオブジェクトと、データベースに格納するオブジェクト。
S2Dxoは、やはり名前ルールで、同じ名前の変数を自動的に受け渡してくれます。
これも、S2Daoのように、インタフェイスの宣言だけです。
Teeda
HTMLでのプレゼンテーション層を、シンプルな記述で実現するプロダクトです。
DTO(Data Transfer Object)の変数名とHTMLファイルの要素のidを合わせておくと、ブラウザでアクセスした際に、自動的に展開します。
JSF実装なのに、faces-config.xmlが不要なんて。
Dolteng
開発環境であるEclipseのプラグインで、S2プロダクトの典型的な組み合わせのプロジェクトを生成してくれます。
その他、プロジェクトで使用するデータベースにアクセスして、Dao、Dto、エンティティの作成を助ける機能、
S2Flex2でクライアントを作成する際に必要な、画面(MXML)へのサービス・エンティティの追加機能、
などなど、さまざまな局面で、Seasar2開発者を助けてくれます。
まとめ
この二つのテクノロジについては、いつか書こうと思っていたことでした。
私たちが経験したのは、AIRとSeasar2を組み合わせた案件でした。
主にAIR側に、「なんで???」ということがあり、躓いたことがあったものの、
高いユーザビリティを実現し、「必要なところだけ」サクサク開発を進められるという点において、
Seasar2 + AIRは、非常に強力な組み合わせであることを実感しました。
いままでの作り方に比べて、どんなにか、シンプルでストレスの少ない開発が実践できることでしょう。
来年は、今年得たS2とFlexの経験を生かして、さまざまな案件に提案していきます。
また、私の個人的な目標は、S2コミッターになることです。
参考図書: