Android Bazaar and Conference 2011 Winterのメモと感想(3)
Android Bazaar and Conference 2011 Winter
http://www.android-group.jp/abc2011w/
の感想の3回目です。今回は、
のメモと感想となります。
次回はないかもしれませんw
ustのアーカイブに残っているため以下をご覧いただければ、実際の講演内容を見ることができます。
HTML5によるリッチクライアント開発手法についてあれこれ
発表者の方は、HTML5開発者コミュニティ、html5-developershttps-jpの管理人だそうです。
https://groups.google.com/group/html5-developers-jp?hl=ja
また、以下の本の著者だそうです。
- 作者: 白石俊平,株式会社あゆた
- 出版社/メーカー: 日経BP社
- 発売日: 2010/02/25
- メディア: 単行本(ソフトカバー)
- 購入: 15人 クリック: 635回
- この商品を含むブログ (54件) を見る
持っていない本かつ、古い本でもないので今度買いますww
本日のアジェンダ
- Web開発/HTML5の基礎知識
- Web開発の基礎知識
- HTML5の基礎知識
- HTML5によるRIA開発
- 僕に語りうること
- JavaScriptによるRIA開発
- 既存のWeb開発パラダイムからの脱却
- オフラインWebアプリ
ということで始まりました。
昔は、HTMLで見栄えも行っていたり、またJavaScriptが悪とされていた時代があったということでした。たしかに、昔はJavaScriptは危険なものであまり使わないほうがいい、またサイトでもできるだけ使用するなと書いてある本もあったりもしました。しかし、Ajaxの登場で大きく局面が変わり、今ではJavaScriptなしのWebサイトはありえないという時代になっています。
Web開発の基礎知識
- Web関連技術は、様々なオープン標準によってさせられている。
- HTML/CSS/DOM/XML...・・・W3C
- JavaScript(ECMAScript)・・・ECMA
- HTTP/WebSocket/JSON/Atom...・・・IETF
- WebGL・・・Khronos
- HTML5は、HTMLとDOMに関する最新のアップデートバージョン
HTML5って、なんだろう?
- HTML(Hyper Text Markup Language)の最新バージョン
- W3C(World Wide Web Consotium)で標準化作業中
- 2011/5/22に仕様が確定する(Last Call)予定
- Webブラウザによる実装も着々と進行中
補足説明として、『いまのところ、HTML5の仕様確定の時期は守られそう。ただし、確定するだけで完成ではない。その後、ブラウザベンダに実装を進めてもらい問題がないか確認してもらう。その間にテストケースを作成し、そのテストケースを満たす実装が2つ以上出てきた時に仕様が完成、勧告となる。』とのことでした。
また、When can I use...(http://caniuse.com/)というサイトでブラウザの実装状況を確認できるということでした。
サイトを見ると、ChromeやSafari、Firefoxの次のバージョンではHTML5の実装がだいぶ進んでいることがわかります。OperaとIEが若干遅れているかなという感じです。
どこまでがHTML5か?
- HTML5と呼ばれている技術は、実際には様々なプログラミング環境を総称した物。
- HTML5と一般的に呼ばれる範囲
- HTML5
- DOM
- HTML文法
- windowオブジェクト
- ...
- JavaScript API
- Web Storage
- Web Workers
- Web Socket
- IndexedDB
- ...
- 以下を含めてざっくりとHTML5と呼んでしまうことも
HTML5を厳密に言うと、以下の仕様書の部分のみということでした。
http://www.w3.org/TR/html5/
HTML5 & APIが可能にすること
- HTML5とそのAPIは、Webアプリをこう変える
- より美しく、インタラクティブに
- 操作性とリアルタイム性をより高く
- Web Workers・・・バックグラウンド処理を可能に
- WebSocket・・・リアルタイム性の高い、新たな通信形式
- Server-Sent Events・・・HTTPベースのサーバプッシュ
- オフラインでも利用可能に
- アプリケーションキャッシュ・・・オフライン利用可能なキャッシュ
- Web Storage・・・簡単に利用出来るストレージAPI
- Indexed Database API・・・ブラウザ組み込みのKVS
- File API・・・ファイルの読み書き
- Webサービス間の連携がされに容易に
- Cross Document Messaging・・・Webページ間のメッセージ通信
- Cross Origin Resource Shareing・・・オリジンを超えたHTTP呼び出し
- プラットフォームとのより深い統合
File APIや、Drag & Drop APIは先日このブログで書いたエントリーHTML5でローカルファイルのドラッグアンドドロップで画像ファイルを表示でやっていますので、興味があったらご覧ください。
Android向けというか、モバイルのプラットフォーム向けに、カメラやセンサーなどが使用できるためかなりネイティブアプリに近い事ができるようになってきたということです。
デモのサイトは以下。付箋のデモはどこかわかりませんでした。
http://www.html5rocks.com/
http://www.craftymind.com/factory/html5video/CanvasVideo.html
気になったのは、モバイルデバイス向けAPI群。カメラやセンサーを制御できるらしいということで仕様を探してみましたところ、ありました。
http://www.w3.org/TR/dap-api-reqs/
まだ使えなさそうな感じです。
ここから、HTML5によるRIA開発の本題に入りました。
仕様自体が非常に幅広い内容のため、発表者の方もすべてを把握していないという前提で、ということです。
JavaScriptによるRIA開発
自分の経験からも同様のことが言え、この動的「すぎる」言語というところが非常に共感を得られます。
また、モジュール性が低いのも非常に問題で、おそらくそのせいもありJavaScriptの開発環境が整ってこないんだと思います。それでも最近は以前よりはるかに整ってきているようですが、使ったことがないので知りません。
まさに、イマココです。個人的には、ブラウザを固定できるのであればこのブラウザで!ということでやってしまうのもいいのかなと感じています。
IEでないと見られないというようなサイトも今は殆ど無いと思いますので。
リッチクライアントの世界になったところで、この部分がなくなることはないですので、重要性は変わりません。
リッチクライアントのアーキテクチャ
- クライアントでできることはクライアントに、サーバにしかできないことはサーバに
- サーバとクライアントは、インターネットを介して必要なデータとリソースをやりくり
どこまでをクライアントで、どこまでをサーバでという切り分けが一番重要かなと思います。適材適所。
HTTPリクエストの増大は、大きい問題だと思います。Googleのサービスも基本的には最初から全部を読み込まずにAjax等で順次読み込んでいます。Googleのインフラがあってもある程度時間がかかる(待つというレベルでもないですが)ので、安易に行うとトラフィックが過多になりかねないと感じました。
キャッシュとオフライン技術
- HTML5時代のキャッシュ技術
- HTTPキャッシュ
- 静的なリソースのキャッシュは容易だが・・
- 動的なリソースのキャッシュを適切に行うのは難しい
- アプリケーションキャッシュ
- アプリケーションリソース(HTML/CSS/JavaScript/画像...)をまるごとキャッシュできる
- 利用は容易だが、運用上の注意が必要になることも
- ローカルストレージ
- Web Storage/Web SQL Database/Indexed DBというAPIがある
- 動的なリソースのキャッシュに向いている
- 同期処理とは切っても切り離せないので、実は利用が難しい
キャッシュの部分は簡単な解決は難しいかなと感じました。フレームワークでということもおっしゃっていましたが、個人的にはフレームワークレベルでの解決も難しいんじゃないかと思います。
どのキャッシュ技術を、いつ用いるか
- 静的なUIリソース(HTML、CSS、JavaScript、画像...)
- 永続的なリソースは、アプリケーションキャッシュを利用出来る
- 半永続的なリソースは、HTTPキャッシュを利用出来る。
- サーバから読み取ったでデータ(動的リソース)
- 変更頻度が非常に低いデータは、静的リソースに埋め込めばアプリケーションキャッシュを使える。
- それ以外のデータは、HTTPキャッシュを使う
- オフラインアプリも視野に入れるなら、ローカルストレージを使う
- クライアント側で生成されたデータ(動的リソース)
- これをローカルストレージにキャッシュすることで、完全なオフラインWebアプリを実現可能
- 同期処理が難しい
- 同期処理中にネットワークが切断されたら?
- データ更新の衝突が発生したら?
最後の方はキャッシュを中心に話されていました。いまいちピンとこなかったのは、ごっついオフラインアプリケーションを作っていないからかなと思ってみたりしました。すこし、ローカルストレージを使ったものをつくってみようかなと思います。