2007年 12月 13日 木曜日 |
Google Gearsについて考えてみる English Translation: (Yahoo!) / (Google)
先週の金曜日はGoogleデベロッパー交流会に行ってきました。今回のテーマはGoogle Gearsだったんですが、実は事前まで知っていたのは名前と概要ぐらいで実際に触ったことはありませんでした。パネルディスカッションできちんとしたことが言えるようにチュートリアルなどいくつかドキュメントはなんとか読むことができたので、あまり的外れなことはいわなかっただろうと思っています (^^ゞ さて、チュートリアル等いくつかドキュメントを読むことはできたものの、実際にサンプルを動かしたり自分でプログラムを作るところのレベルまでは準備ができなかったので、どちらかというとGearsを使った場合にシステム全体のアーキテクチャがどうなるだろうかということを中心に考えていました。まず一つ目は既存のWebアプリケーションとどのようにアーキテクチャ上、融合していくかです。現状のWebアプリケーションは、分け方は様々であるにしても、HTMLを生成する層、ビジネスロジックを処理する層、データを管理しておく層など幾つかの層に分けて設計することが一般的です。ここではCore J2EE Patternsで紹介されているように次のような層を想定しておきましょう。
これらの層をふまえてアプリケーションを設計する場合、多くの点では今までと同じように設計をして、Gearsを活用したリッチなユーザエクスペリエンスを提供するようにJavaScriptを駆使することになると思います。まとめるとだいたい次のようなアーキテクチャになるでしょうか。
おそらくGearsを使った場合、結果的にはだいたいこのようなアーキテクチャになると思いますが、今回は「考えてみる」とまで題しているのでもう少し話を進めてみたいと思います。Gearsにしても、それ以外の技術が出てくるにしても、Webアプリケーションのユーザエクスペリエンスの改善という点から考察すると、クライアント側のデータベースや非同期処理、キャッシュといった技術は欠かせない要素です。では、最もアグレッシブにGearsの機能を使った場合を考えてみます。Gearsには指定したURLのデータをキャッシュする機能、ローカルに持つことができるデータベース、また主にオフライン/オンラインきり代わり時などにデータをサーバに同期させることを目的としたワーカプールというスレッド管理の機能があります。このワーカプールを使えば、ある意味で何でも処理ができてしまう訳で、場合によってはビジネスロジックまで記述することができるかもしれません。それ以外にもローカルのデータベースに何でもかんでもデータを記録してしまうということもできるでしょう。 ただ、一方ではローカルだけでは処理できないビジネス処理はいくつかあると思います。例えば、ショッピングサイトの買い物確定はローカルだけでは処理できないでしょう。ローカル側で確定した、ということを記録しておいてオンライン化した際に買い物の確定データを同期するという手段で、見せかけ上ローカル側で処理したようにすることもできるかもしれませんが、オフライン化している間に在庫や価格など条件が変わってしまうことがあることを考えればそこまで踏み込んだロジックをGears等を使って実装することはやや非現実的です。また一方、データベースに関しても、お店側の在庫データや価格データをすべてクライアント側に持っておくことはナンセンスです。 それらを考えれば、クライアント側で処理すべき部分と、サーバ側で処理すべき部分は依然としてある程度明確に分類することができそうです。
上図はそれらの分類を基にもう少し考えを進めてみたアーキテクチャです。今までのアーキテクチャと違い、プレゼンテーション層(この場合、名前は もう少しかえた方がいいかもしれません)はサーバとクライアントをまたいで存在するようになり、プレゼンテーション層内部でも役割別にある程度機能をグループ化することができるようになると思います。ここであえてクライアント/サーバをまたいで層を描いてみた理由は、クライアント側で実行されるJavaScriptのロジックも結局はサーバ側で生成しているためです。また、さらにあえてその辺りを意識しなくてもアプリケーションが設計できるようにjMakiのようなラッパーライブラリはこれからもどんどん成長していくと思います。 さて、処理の役割に注目していきます。たとえばクライアント側で処理すべき役割はユーザインタフェースそのものの実現や、表示用のデータの管理です。一方、サーバ側では画面遷移や画面自体の生成が主な役割になります。画面遷移や画面生成をクライアント側に持っていくこともできなくはないですが、システムによっては画面要素に対してそれぞれ権限のチェックなどが必要だったりすることとから考えてサーバ側に置かれているべきでしょう。 データベースはGearsを使えばローカル側にも設置される訳ですが、保存されるデータは表示用のキャッシュデータや、ユーザ自信が作成しする未確定のデータに限られると思います。ユーザ自身が作成する未確定のデータとはSNS上での自分自身のプロフィールや書きかけの日記などです(当然ながらそれらのデータを常にサーバ側に同期することは必要に応じて実施する)。一方、確定済みのトランザクションやデータはすべてサーバ側で管理されているべきでしょう。 さて、以上のように少し自分の中ではGearsの位置づけがようやくすっきりしました。こういった話もこの間のデベロッパー交流会でしようかと思っていましたが、どちらかというと交流会ではどう使っていくか、がメインだったので今回はあきらめました。また、どこかでディスカッションする機会があればいいなと思います。 ★ お名前を空欄にするとIPアドレスが、お名前欄に記入されます。
|
Today's Page Hits: 855 |
>こういった話もこの間のデベロッパー交流会でしようかと思っていましたが、どちらかというと交流会ではどう使っていくか、がメインだったので今回はあきらめました。
うーん、、Google の交流会でも、「どう作るか」ではなく、「どう使うか」ですか。
なんか、日本における2.0に熱心な人の世界って、「ワタシ、使う人。アナタ、考える人」なんですなぁ。Google にしても、Yahoo にしても、YouTube にしても、どういう人がサービスを、会社を立ち上げたのか、、ということを思い出してほしいです。まず、自分でつくってみよ、、と言いたい。
Posted by shita on 12月月 15日, 2007年 at 11:53 午後 JST #
はじめまして。上のエントリで、
>一方、サーバ側では画面遷移や画面自体の生成が主な役割になります。
とありますが、たしかに、Strutsのようなものは、サーバーで画面を作ることになりますが、
SOAPやREST型で(SOAっぽく)サーバーとの受け渡しをする場合、
・認証情報はそのつど、ないし初めに渡し、セッションで保持して、
・サーバー側は結果をXMLにして返すだけで画面に関与しない、
・クライアント側は、マッシュアップして画面表示にのみ専念する
としたほうが、開発しやすいことも結構あります。
この場合、一時的にデータをおいておくところとしてのローカルDBも重要なのですが、コード等、あまり変更のないマスタデータをサーバーに、いちいち取りに行くと、レスポンス上問題があるので、ローカルDBに入れるという選択肢もあると思います。事実、ケータイなどでは、(BREW以外)このような手法がとりにくいために、困ることがあるのですが、Androidでは、ローカルDBアクセス手段が用意されているので、期待をもっています。。
というような話を、本来、懇親会のほうでするんでしょうね。
はじめに、使い方のような大雑把な話をパネルディスカッションでして、細かい開発方法などを懇親会で意見を交わすと
・・・懇親会に出なかった私が言うのも何なのですが(^^;)
Posted by ウィリアムのいたずら on 12月月 19日, 2007年 at 04:32 午後 JST #
shitaさん、ウィリアムのいたずらさん、
興味深いコメントありがとうございます。
長くなりそうなので後ほど別エントリとして返答させていただきます。
Posted by おかざき on 12月月 19日, 2007年 at 04:44 午後 JST #