この記事では、FlexおよびJavaアプリケーションの構築に使用されるテクノロジーの概要を紹介します。読者としてはJava、Flex、Adobe AIR、その他のデベロッパーを想定していますが、これらすべてのテクノロジーに通じている必要はありません。
関連記事FlexおよびJavaアプリケーションのアーキテクチャと、概要ビデオFlex 4およびJava統合の紹介*もご覧ください。
Adobe Flash Platform
Adobe Flash Platformは、リッチアプリケーション(SWFファイルの形式)の作成、実行、データ供給のためのテクノロジーファミリー全体にアドビが付けた名前であり、クライアントランタイム、ツール、フレームワーク、サーバー、クラウドサービスを含みます。その個々のコンポーネントの多くは、この記事で詳しく説明されています。
Flash Platformランタイム
Flash Platformの中心となるのは、クライアントランタイムです。すなわち、ブラウザー向けのAdobe Flash Playerと、ブラウザー外部向けのAdobe AIRです。ランタイムは、Flash Platformで作成されたアプリケーション(SWFファイルの形式)をレンダリングします。
Adobe Flash Player
HTMLとJavaScriptで作成された従来のWebコンテンツの操作に関するユーザー体験は、ここ何年かで大きく変化し、単純なリンクと独立した複数のページから、非同期のデータ呼び出しとインタラクティブコントロールを備えた1ページの「アプリケーション」へと進化してきました。しかしこの体験は、ブラウザーのオブジェクトモデルで使用可能なオブジェクトによって相変わらず制限されています。そこで、Flash Playerの出番です。
Adobe Flash Playerは、ブラウザーのプラグインまたはActive Xコントロールとして動作し、リッチなオブジェクトモデルとレンダリングエンジンにより、表現力の高いインタラクティブなコンテンツをWebアプリケーションに含めることを可能にします。このようなリッチなコンテンツを使用するには、何らかのデベロッパーツールを使用してSWFファイル(Flash Playerがレンダリングできるコンパイルされたバイトコードファイル)を作成し、そのSWFファイルをHTMLページで参照します。ブラウザーがHTMLを解析する際に、SWFファイルがダウンロードされ、Flash Playerによってブラウザーウィンドウ内で実行されます。
Adobe AIR
Flash Playerは、ブラウザー内のFlash Platformで作成されたアプリケーションのためのクライアントランタイムです。これらのアプリケーションは、ブラウザーベースのアプリケーションの利点である、あらゆる場所からのアクセス、容易な開発(インストールが不要)、簡単なアップデート、すべてのオペレーティングシステムおよびブラウザーでの一貫性といった特長をすべて備えています。一方で、ブラウザーベースのアプリケーションの制限として、オフラインでのアクセスができないこと、ブラウザーのセキュリティサンドボックスの制約により、ブラウザーウィンドウ外部のユーザーのコンピューターとのやりとりができないことといった欠点を持ちます。
ブラウザー内とブラウザー外の両方のアプリケーションの利点を取り入れるためにアドビが開発したのが、Adobe AIRです。これは様々なオペレーティングシステムで動作するランタイムとツールのセットであり、HTML、Ajax、Flash Platformのアプリケーション(SWFファイル)をデスクトップに展開することを可能にします。最近多く用いられるアプリケーションのデザインパターンとして、全ユーザーのためのブラウザーベースのバージョンと、アクティブユーザーやパワーユーザーのためのデスクトップバージョンを用意するという方法があります。Flash BuilderやFlash Professionalなどのツールを使用して作成したSWFファイルは、Webアプリケーションとデスクトップアプリケーションの両方に使用できます。両方のタイプのアプリケーションを作成した場合、別々のコードライブラリからのコードを共有することもできます。
Flash Builderを使用すれば、FlexでWebアプリケーションとデスクトップアプリケーションの両方を作成できます。両方のタイプのアプリケーションを作成した場合、別々のコードライブラリからのコードを共有することもできます。デスクトップ用にFlexアプリケーションをコンパイルした場合、SWFファイルとXMLファイル(アプリケーションデスクリプターファイルと呼ぶ)ができます。このファイルには、コンテナオペレーティングシステムウィンドウの表示方法、クライアントコンピューター上でアプリケーション用に使用するアイコンなどの情報が記録されています。
開発中に、テストが必要になるたびにアプリケーションをコンピューターにインストールしなければならないのは不便(控えめな言い方をしても)です。Flash Builderの場合、アプリケーションをテストするときには、AIR Debug Launcher(ADL)というツールを起動して、アプリケーションをインストールせずに実行できます。展開の準備ができたら、Flash BuilderのADT(AIR Development Tool)というツールを使用して、リリースビルドを作成します。これには、SWFファイルを含むAIRパッケージファイル、アプリケーションデスクリプターファイル、アセットなどが含まれています。このAIRファイルを、ユーザーに配布します。書き出しの際には、信頼できる機関によるデジタル証明書を使用してアプリケーションに署名する必要があります。このアプリケーションは、ユーザーのコンピューターにフル権限でインストールされ、オペレーティングシステムとやりとりする能力を持つからです。(もちろん、有害なコードを導入するおそれを減らすため、信頼できるアプリケーションだけをインストールするようにすべきです)
AIRアプリケーションをインストールするには、ユーザーのコンピューターにAdobe AIRランタイムがインストールされている必要があります。ユーザーがWebページからアプリケーションを簡単にインストールできるように(AIRランタイムをダウンロードしてインストールしてから、AIRアプリケーションをダウンロードしてインストールするという手間を省くため)、アドビはテンプレート用のデフォルトのHTMLファイルとbadge.swfファイルを提供しています。これを使用すれば、ユーザーがバッジ(フレーム付きのカスタマイズされたイメージボタン)をクリックすると、ランタイムがチェックされ、必要ならインストールが行われた後、AIRアプリケーションがインストールされます。Adobe AIR Marketplace*では、すべてのアプリケーションがこの方法で提供されています。
ツール
アドビは、SWFファイルを作成するためのツールを多数開発しています。Flash Professional、Flash Builder(以前の名前はFlex Builder)、Flash Catalystなどです。それぞれのツールは、異なるスキルを持つデベロッパーやデザイナーを対象としています。
Adobe Flash Builder
Adobe Flash Builderは、デベロッパー向けのEclipseベースの開発ツールです。このIDEでは、Flexフレームワークを使用してSWFファイルを作成します。Flash Builderは、Flexアプリケーション開発を容易にするために、インテリジェントなコードヒントおよびコード生成、リファクタリング、コンパイル時エラーチェック、インタラクティブなステップ式デバッグ、ビジュアルデザインによるユーザーインターフェイスのレイアウトとスタイル指定などの機能を備えています。
フレームワークと言語
アプリケーション作成のための開発ツールに加えて、アドビは、デベロッパーが豊富な機能を持つ堅牢なアプリケーションをすばやく容易に作成できるようにするフレームワークも作成しています。
Adobe Flex
Adobe Flexは、ActionScriptクラス(ActionScriptはFlash Player用のスクリプト言語)のライブラリと実行可能ファイルから構成される無料のオープンソースフレームワークであり、アプリケーションの開発、コンパイル、インタラクティブなデバッグをすばやく容易に行えるようになっています。Flexフレームワークには、100種類を超える拡張可能なコンポーネントのクラスが含まれています。この中には、UIコントロール(ボタン、リストボックス、スライダー、ステッパー、データグリッド、チャートなど)、コンテナ(VGroup、HGroup、Panel、Formなど、適応性のあるアプリケーションインターフェイスの構築に役立つもの)、マネージャー(スタイル、ドラッグ&ドロップ、フォーカス、ポップアップ、カーソル、ブラウザー履歴、ディープリンクなど)、リモートプロシージャーコール(HTTP要求、Webサービス、リモートオブジェクト)、フォーマッター、バリデーター、ユーティリティなどが含まれます。Tour de Flex*アプリケーションは、Flexフレームワークについて調べ、様々なコンポーネントの動作を確認するために使用できます。
ActionScript
Flexアプリケーション(Flexで作成したSWFファイル)は、ActionScriptとMXMLという2つの言語で作成します。ActionScriptは継承に基づくオブジェクト指向スクリプト言語であり、ECMAScript標準に基づいています。最新バージョンのActionScript 3は、ECMA-262第4版に基づいています。この版は、提案はされましたが、承認と公開は行われませんでした。構文とオブジェクト指向機能は、Javaによく似ています。クラスを定義して拡張し、インターフェイスを定義して実装し、private、public、protected、内部(パッケージ)の名前空間を使用します。Javaと異なる点は、クラスを定義する際にpackageキーワード内部で中括弧を使用すること、メソッドの定義にfunctionキーワードを使用すること、Javaで用いられるデータ型接頭辞の代わりにコロンの後のデータ型指定を使用することです。また、データ型指定はオプションです。すべてのデータに型を指定すれば、IDEのコードヒントや、コンパイル時と実行時の型チェックが利用できます。一方、柔軟性が必要な場合は動的型指定も使用できます。
MXML
MXMLは便宜のための言語です。宣言的なタグベースのXML構文を使用して、ActionScriptを生成する方法を提供します。アプリケーションをコンパイルすると、MXMLが解析されてメモリ上でActionScriptに変換され、ActionScriptがバイトコードにコンパイルされてSWFになります。MXMLはまったく使用しないことも可能ですが、通常はアプリケーションインターフェイスの定義に用いられ(レイアウトを定義するには、MXMLコードのほうが対応するActionScriptコードよりも簡潔でわかりやすくなります)、ActionScriptはアプリケーションロジックの作成に用いられます。ロジックが別々のActionScriptクラスに分割されるように、MXMLコードも再使用可能な別々のMXMLコンポーネント、すなわち別々のActionScriptクラスに分割できます。
サードパーティ製メッセージングフレームワーク
Granite DS*は、LiveCycle Data Services(この後で説明)の代わりとなる無料のオープンソースフレームワークであり、Flex/EJB 3/Seam/Spring/Guice/POJOアプリケーション開発のための、AMF3/RemoteObjectの利点をすべて備えたフレームワークを提供します。
Midnight Codersが提供しているWebORB for Java*は、Flex(およびFlash、AJAX、Silverlightクライアント)を、Javaオブジェクト、Spring Beans、EJB(v1またはv3)またはXML Web Services、ネイティブオペレーティングシステムリソース、リッチメディアストリーム(オーディオ、ビデオ)と接続する機能を持ちます。
サーバーおよびサーバーサイドテクノロジー
BlazeDS
Javaサーバー用の何種類かのサーバーサイドFlash Remoting実装を選択できます。BlazeDS*は、アドビが作成した無料のオープンソースバージョンであり、データをリアルタイムでFlexアプリケーションにプッシュするサーバーサイドJavaリモーティングとWebメッセージングテクノロジーを提供します。このメッセージングサービスを利用すれば、Flexアプリケーションと、他のFlex以外のJMS対応アプリケーションとの間で、メッセージを交換することもできます。
リモーティングサービスとメッセージングサービスを組み合わせて、リアルタイムのデータ中心アプリケーションを作成できます。このタイプのFlexアプリケーションでユーザーがデータを変更した場合、データはサーバー上のデータベースに保存され、その後に現在そのデータにアクセスしている他のすべてのクライアントにプッシュされるので、ユーザーは常に最新のデータを見ることができます。このタイプのデータ同期を作成するには、サーバーにデータを保存し、他のクライアントにデータをプッシュし、データの衝突を管理するために、かなりの量のコードを作成しなければなりません。別の方法として、LiveCycle Data Servicesを使用すれば、このようなコードのかなりの部分を自動的に作成できます(この後のAdobe LiveCycle Data Servicesの項目を参照)。
Spring BlazeDS Integration
SpringSourceとアドビは共同で、BlazeDSの特別バージョンであるSpring BlazeDS Integration*を作成しました。その目的は、SpringとBlazeDSとの間の統合を容易にすることです。SpringとBlazeDSをそれぞれ異なる構成ファイルを持つ別々のシステムとして扱い、基本的な通信メカニズムだけを使用する代わりに、Spring BlazeDS Integrationでは、Springからアプリケーションの他のコンポーネントと同じ方法でBlazeDSを管理できます。使用を始めるには、Spring BlazeDS IntegrationのTest Drive*が役に立ちます。これは、TomcatとSpring BlazeDS Integrationの最小限のバージョンを、設定済みの使用可能な状態で、サンプル付きで提供するものです。
Adobe LiveCycle Data Services
Adobe LiveCycle Data Servicesは、BlazeDSのスーパーセットであり、エンタープライズFlexアプリケーションのためのデータインフラストラクチャー一式を提供します。BlazeDSで利用できるリモーティングおよびメッセージングサービスに加えて、データ管理サービスを提供しているので、リアルタイムのデータ中心アプリケーションの開発と保守のコストを削減できます。
データ管理サービスは、Flexアプリケーションとミドルティアとの間のデータ同期を自動化するもので、データ同期、衝突解決、ページングおよび遅延ローディング、大きいデータコレクションやネストされたデータ関係(1対1および多対1の関係など)の管理、Hibernateとの統合、AIRアプリケーションでのオフラインデータアクセスといった機能を提供します。LiveCycle Data Services ES2に導入されたモデリングテクノロジーにより、これらの高度なデータ管理サービス機能の多くを、サーバーサイドのコードをいっさい作成せずにアプリケーションに追加できます(この後の2つの項目を参照)。
LiveCycle Data Servicesの他の特長としては、高いスケーラビリティを実現する高度な展開オプション、Real Time Messaging Protocol(RTMP)によるストリーミング、PDF生成、ポータル統合、LiveCycle接続、デベロッパーおよびエンタープライズサポートリソースへのアクセスなどが挙げられます。詳しくは、LiveCycle Data ServicesとBlazeDSの比較表を参照してください。
Flexリモートプロシージャーコール
Flexアプリケーションは、バックエンドのサーバーと、直接のソケット接続またはHTTP(こちらの方が一般的)で通信します。HTTP要求(JSPまたはXMLファイル、RESTful Webサービス、またはHTTP経由でテキストを返すその他のサーバーファイルに対する)、Webサービス要求(HTTP経由でSOAPフォーマットのテキストを返すWebサービスに対する)、またはFlash Remoting要求(HTTP経由でバイナリAction Message Formatを返すサーバーサイドのJavaクラスのメソッドに対する)を実行できます。Flash Remotingの場合、データ転送フォーマットがバイナリなので、XML、JSON、SOAPといったデータ量の多いテキストベースのフォーマットに比べて、アプリケーションによるデータのロードが最大 10倍高速になります。したがって、可能な場合はこれを使用することをお勧めします。
Flash Remoting
Flash Remotingは、クライアントサイドとサーバーサイドの機能の組み合わせによって実現される呼び出し-応答モデルであり、Flash Platformからサーバーサイドのオブジェクトに、ローカルオブジェクトと同様にアクセスするための方法です。アクションメッセージフォーマット(AMF)へのシリアライズ、デシリアライズ、クライアントとサーバーの間のデータ変換を処理することで、ActionScriptとサーバーサイドのデータ型の間でのトランスペアレントなデータ転送を実現します。Flash Remotingが使用するクライアントサイド機能はFlash Playerに内蔵されており、サーバーサイド機能はアプリケーションサーバーにインストールする必要があります。
いくつかのサーバー(ColdFusion、Zendなど)にはFlash Remotingが組み込まれていますが、他のサーバーの場合はインストールが必要です(Java EEサーバーの場合のBlazeDSまたはLiveCycle Data Services、.NETサーバーの場合のWebORBまたはFluorineFX、PHPサーバーの場合のZend Frameworkまたはamfphpなど)。
AMF
Action Message Format(AMF)は、ActionScriptオブジェクトをシリアライズするためのバイナリフォーマットであり、Flash Platformアプリケーションとリモートサービスとの間で、インターネット経由でデータを交換するために使用されます。このプロトコルはアドビによって公開されています。最新版はActionScript 3用のAMF 3仕様*です。ActionScriptからJavaへ、およびJavaからActionScriptReferへの変換の際のデータ型マッピングの一覧表については、ドキュメンテーションを参照してください。
Adobeアプリケーションモデリングテクノロジー
Adobeアプリケーションモデリングテクノロジー(コード名Fiber)は、Flexアプリケーションのモデル駆動型開発を可能にするテクノロジーの組み合わせであり、データ中心のFlexアプリケーションの開発を容易にします。
Flash Builder 4では、アプリケーションモデリングテクノロジーは、サーバーサイドサービスにマップされるActionScriptデータサービス(引数なしのコンストラクターとパブリックメソッドを持つJavaクラス)を作成して使用する際に用いられます。ActionScriptデータサービスを作成する場合、Flash Builderは、リモートサービスを呼び出し、対応するデータ転送オブジェクト(値オブジェクトとも呼ぶ)を操作するActionScriptクラスとコードを生成します。Javaクラスのメソッドで動作される対応するJavaオブジェクト(多くの場合はデータベーステーブルのレコードに対応するもの)にマップされるActionScriptクラスが作成されます。これにより、クライアントとサーバーで同じタイプのオブジェクトを操作して、そのインスタンスを相互にやりとりできるようになります。
さらに、LiveCycle Data Servicesを使用した場合、生成されたクライアントサイドのコードは、LiveCycle固有のクラスを使用して、前に説明した追加のデータ管理機能も実現します。
Adobe Flash Builder用Adobeアプリケーションモデリングプラグイン
LiveCycle Data Services ES2を使用している場合、Adobe Flash Builder用Adobeアプリケーションモデリングプラグイン*をダウンロードしてインストールできます。これはグラフィカルなモデリングエディタであり、クライアントサイドのコードに加えてサーバーサイドのコードも自動生成します。
モデラーを使用して、既存のデータベースに基づくモデルを定義し、このデータの操作に必要なクライアントサイドのコード、サーバーサイドのコード、サーバーサイドの構成ファイルを生成します。新規プロジェクトでデータベーステーブルがまだ存在しない場合は、モデラーでモデルを定義した後、データの操作に必要なクライアントサイドとサーバーサイドのコードに加えて、データベーステーブルも生成することができます。
Flash Platform Services
独自のデータメッセージングサービスを組み込んで管理する代わりに、Adobe Flash Platform Services*の1つであるCollaboration*サービスを使用することで、チャット、オーディオ、ビデオなどのリアルタイムのコラボレーション機能を利用できます。Flash Platform Servicesにはこの他に、Distribution*サービス(ソーシャルネットワーク、モバイルデバイス、デスクトップへのアプリケーションの配信、宣伝、追跡、課金)やSocial*サービス(Facebook、MySpace、Twitter、Yahoo、Google、AOLなどの複数のソーシャルネットワークとの1つのActionScript APIによる統合)などがあります。
まとめ
この記事では、FlexおよびJavaアプリケーションの構築に使用されるテクノロジーを紹介しました。これらのテクノロジーについて詳しくは、以下のリソースを参照してください。
- FlexおよびJavaインテグレーションセンター
- Adobe LiveCycle Data Services ES2ドキュメンテーション
- BlazeDSドキュメンテーション*
- Adobe Flexデベロッパーセンター
- Flex用Adobe AIRデベロッパーセンター
著者について
Jeanette Stallonsは、Adobe、Oracle、Boeing、Wachovia、Morgan Stanley、Charles Schwabなどの企業の代理人として様々な講習・研修活動を営む、個人のFlexトレーナー兼コンサルタントです。個人での活動を開始する以前は、Allaire、Macromedia、Adobeに勤務し、トレーニング部署での活動やアーキテクトとしての活動、執筆活動、指導活動などに加え、Flash、Flexおよびその他の製品を用いたアプリケーション開発にも携わってきました。Jeanetteが手がける最新プロジェクトのFlexアプリケーション「Adobe Flex Learning Paths」においては、企画者、プログラマーおよびコンテンツ専門家として活躍しています。