クラウドの“クライアント”としてRIAを試す
連載インデックスへ
検証特集:クラウドの“クライアント”としてRIAを試す(2)

Amazon S3とAdobe AIRで“クラウドRIA”を作ってみた


クラスメソッド株式会社
福田 寅成
2009/9/29



Amazon S3+AIRのサンプルアプリを作るための準備


 今回は、以下の環境でサンプルアプリを開発しています。

  • Flex Builder 3
  • Flex SDK 3.4(デフォルトの3.2ではなく、セキュリティアップデートされた3.4を、今回は利用)

【開発に入る前に】お試しだけなら課金は最小に

 そもそも今回のアプリケーションを利用するにはAmazon S3を利用するためのキーを取得する必要があります。またAmazon S3には、試用期間などがないため、いきなり課金が発生します。ご注意ください!

 Amazon S3への契約はクレジットカードを手元に置いて、「http://aws.amazon.com/s3/」にアクセスし、「Sign Up For Amazon S3」をクリックします。以降、手順に従って契約してください。料金を最小に抑えたい場合は、契約→サンプル構築→契約解除を連続で行えば、数時間だけ契約することになり、ほとんど課金は発生しないでしょう(Amazon Web Servicesは時間課金なので安心)

 契約を行ったら、accessKeyとsecretAccessKeyをメモしておいてください。このキーは重要なキーなので扱いには注意してください。今回のアプリケーションではこのキーは暗号化された領域(EncryptedLocalStore)に保存し、ソースコードなどには記述しません。

コラム 「Amazon S3利用に便利なFirefoxプラグイン、S3 Firefox Organizerとは」

Amazon S3関連の管理ツールとしては、有名な「S3 Firefox Organizer」があります。FTPツールのようなもので、デスクトップ上からファイルを簡単にS3にアップロード可能です。名前から分かるとおりFirefoxのプラグインです。

図4 S3 Firefox Organizerの使用例
図4 S3 Firefox Organizerの使用例(画像をクリックすると、拡大します)

本稿では、わざわざS3 Firefox Organizerのコピーのようなアプリケーションを作るわけです。今回のサンプルを拡張していくと、自社の業務アプリケーションやクラウドと連携しながらS3とデータ通信するAIRアプリケーションを作成できます。

Amazon S3へアクセスできるActionScriptライブラリ

 今回はAmazon S3へのアクセスに、以下のActionScriptライブラリas3awss3lib」を利用しています。

 このライブラリはアドビシステムズのAIR開発チームの方が作成したものです。Amazon S3はRESTとSOAPのAPIを提供しており、このうちのREST APIに対して簡単にアクセスできるようにしてくれるユーティリティ群がパッケージングされています。

 ただ、プロジェクトで簡単に利用できるSWC形式では配布されていませんが、本記事のサンプルアプリケーションのlibsフォルダ内にはSWCファイル形式のものを同梱しています。

as3awss3libライブラリのクラス一覧

 Amazon S3へのアクセスは、as3awss3libライブラリのクラスを通じて行うのですが、ライブラリで提供されているクラス一覧を確認してみます。ほかの言語のAmazon S3アクセスライブラリに比べ数が4個と少ないので以下に全部を列挙しています。

表2 as3awss3libライブラリのクラス一覧(パッケージ:com.adobe.webapis.awss3)
クラス名 役割
AWSS3 Amazon S3へのRESTアクセスを行う
AWSS3Event AWSS3での処理結果イベント
Bucket バケットを表すエンティティオブジェクト
S3Object S3オブジェクトを表すエンティティオブジェクト

 AWSS3クラスはメソッド呼出でS3にアクセスが可能性です。HttpServiceを用いてごりごりRESTアクセスする開発に比べて、効率的にAmazon S3にアクセスするアプリケーションを開発できます。

ActionScriptライブラリを用いたAmazon S3へのアクセス

 AWSS3オブジェクトを用いたS3へのアクセスはHttpServiceやRemoteObjectを用いた通信同様のスタイルで簡単にできます。

AWSS3オブジェクトの初期化

 MainAction#listBucketsButtonClickHandlerメソッドでAWSS3オブジェクトを初期化し、イベントハンドラを設定しています。

s3 = new AWSS3(this.accessKey, this.secretAccessKey); 
s3.addEventListener(AWSS3Event.LIST_BUCKETS, awsS3ListBucketsHandler);
s3.addEventListener(AWSS3Event.LIST_OBJECTS, awsS3ListObjectsHandler);

 ここで、s3はAWSS3オブジェクトです。それぞれ「バケット一覧取得処理」「オブジェクト一覧取得処理」の結果イベントとしてディスパッチされるAWSS3Eventに対するイベントハンドラを定義しています。

バケット一覧の取得

 AWSS3オブジェクトを利用したバケット一覧呼び出しは非常に簡単です。MainActionのlistBucketsButtonClickHandlerで下記処理を呼び出しています。

s3.listBuckets();

 この呼び出しの結果は先ほど準備した「awsS3ListBucketsHandler」で取得します。

helper.setBucketList(event.data);

 Amazon S3からのレスポンスはPOX(Plain Old XML)が返ってきます。XMLなのでプログラムで扱うには少々扱いにくいのですが(ActionScriptにはE4X(ECMAScript for XML)がありますが)、AWSS3オブジェクト内でXMLはオブジェクトのArrayに変換されているので、上記のevent.dataはそのままスクリプトで処理したりできます。

 上記のhelperであるMainHelperでは、Amazon S3から受け取ったデータをそのままDataGridのdataProviderにセットする処理だけを行っています。

オブジェクト一覧の取得

 オブジェクト一覧の取得も簡単です。バケットDataGridのダブルクリックハンドラであるbucketDataGridDoubleClickHandlerでは下記のようにS3を呼び出しています。

s3.listObjects(bucket.name);

 このbucketは、DataGridでダブルクリックされたバケットです。バケット名を元にオブジェクト一覧を取得しています。この呼び出しの結果は先ほど準備した「awsS3ListObjectsHandler」で取得します。

helper.setS3ObjectList(event.data);

 バケット一覧処理と同様、処理結果はS3Objectの配列で返ってくるので、後続処理の記述は簡単です。

そのほかのS3アクセス処理

 AWSS3オブジェクトではそのほかバケットの作成、削除、オブジェクトのアップロード、ダウンロードなど基本的な処理に対するユーティリティメソッドが用意されています。

 それらは今回のサンプルアプリケーションを参考に読者の皆さんご自身でいろいろと試してみてくさい。

数年後のAmazon S3を使うサービス開発案件に向けて

 Amazon S3はまだまだ日本国内での利用は少ないかと思われます。ただ、数年後には日本国内でもAmazon S3をストレージサービスのバックエンドとして利用するサービスは増えてきているのではないかと思います。

 今回のようにAmazon S3に直接アクセスするようなケースは現実の業務アプリケーション構築のシーンでは管理アプリケーションなどに限定されるでしょう。やはりサーバロジックを挟みたい、ほかのクラウドサービスとマッシュアップしたいといった要望も出てくることも想定されます。そういった「クライアント-サーバ−クラウド型」のアプリケーションに関してはまた機会がありましたら記事にしたいと考えています。

 次回は、Silverlightとクラウドをつなぐアプリケーションを作成してみたいと思います。


@IT関連記事


AIR+SQLiteで実現するGTDアプリ
――「Colabolo」から見るRIAのこれから 
Colaboloには昨今のDBアプリのトレンドが多数盛り込まれています。ぜひ、今後の開発のアイデアやヒントを見つけてください
Database Expert」フォーラム 2009/1/6
動かして試すAdobe AIR+Javaアプリの“可能性”
業務用RIAの本命!? Flex+Java開発入門(最終回)
Flex+Javaの発展形として、SQLiteやローカルファイル操作のサンプルを試しながらAIR+Javaの可能性を探ります
リッチクライアント & 帳票」フォーラム 2008/11/12
Adobe AIRでiTunes×Twitterクライアントを作った
これ、俺ならこう使う(2) iTunesで再生されている楽曲のタイトルを、Twitterアカウントに「いま聴いている曲」として投稿するAIRアプリケーション「音ログAIR」を作ってみました
リッチクライアント & 帳票」フ ォーラム 2008/8/11
Apollo改めAIRプログラミング入門
連載「Apolloプログラミング入門」が「AIRプログラミング入門」としてリニューアル!AIRになってからの新機能をイロイロ紹介します
体験してみて分かった“雲”の違い
特集:クラウド体験記(後編)
 Amazon EC2、Windows Azureの使用感を述べ、Force.comやGoogle App Engineを含めた、エンジニアにとってのクラウド活用の価値を総括
Insider.NET」フォーラム 2009/4/14

プロフィール:福田 寅成(ふくだ ともなり)
クラスメソッド株式会社 エンタープライズサービス部門 システムエンジニア
大手SIerでの長いJava開発経験を経てクラスメソッドに。 Java、JavaScript/Ajax、Flex、AIR、C#など、さまざまな分野に関する技術調査研究、および業務アプリケーション開発に携わる。
FlexやAIRの開発依頼はコチラ

1-2  

 INDEX
検証特集:クラウドの“クライアント”としてRIAを試す(2)
Amazon S3とAdobe AIRで“クラウドRIA”を作ってみた
  Page1
クラウドの老舗によるWebストレージ「Amazon S3」
Amazon S3のデータ構造を体験できるAIRアプリ
Page2
Amazon S3+AIRのサンプルアプリを作るための準備
コラム 「Amazon S3利用に便利なFirefoxプラグイン、S3 Firefox Organizerとは」
ActionScriptライブラリを用いたAmazon S3へのアクセス
数年後のAmazon S3を使うサービス開発案件に向けて



リッチクライアント&帳票 全記事一覧へ



HTML5 + UX フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日 月間