2009年12月18日金曜日

[Dion Almaer] クローム拡張機能とwebOSアプリはすごく似ている

(原文: Chrome Extensions and webOS Applications look quite similar


ちらっと見ただけでわかるけど、クローム拡張機能とwebOSアプリはすごく似ている
― 賢明なる友人談
webOS(訳注: Palmのモバイル向けOS)アプリとクローム拡張機能を書いてみてわかったんだが、そのそっくりさ加減と、書こうと思えばそっくりに書けるんだと言う事実に衝撃を受けた。

ブラウザ拡張機能の仕組みとモバイルアプリのランタイムライブラリの相似性というのは一見奇妙に思えるかも知れないが、良く見ると実は上位層において以下のような多くの共通点がある

サンドボックスからの脱獄

両者ともにブラウザのサンドボックス型実行環境という壁を打ち破る必要がある。
拡張機能(訳注: Firefox拡張機能のこと?)はこういった制約をもともと受けないし、クローム拡張機能においても(訳注: タブ毎のサンドボックスという制約があるクローム拡張機能においても)ブラウザのUI構成要素に関する各種APIにより、より広範なアクセスが実現されている。

webOSにおいても全く同様な問題がある。ネイティブアプリを構築する場合はこういった制約が無いのだが、Webアプリでは制約を受けることになるので新たにAPI・UIウィジェット・サービスAPIが追加された

この問題はwebOS・クローム拡張機能という2つの世界を越えて存在するものであり、近い将来、Webアプリ向ランタイムライブラリが受難することになる最も大きな試練のうちの一つである。私は、ランタイムライブラリでより多くのことが出来るようになり、データアクセスに関しても、サードパーティが運営しているサーバが提供するサービスを通じたデータアクセスだけではなくローカルマシンでも可能になってほしいと期待している。こういった願望は、以下に述べるような問題へと我々を誘う…

パーミッション

Webはパーミッション指定によるアクセス制御モデルになっている。サンドボックス環境では実行権限が制限されているし、世間の人々は何かと言うとすぐに(最重要課題である)セキュリティ云々について言及するけれど、もしWeb経由では実行不可能なことなどが生じてきたら、そんなセキュリティのことなんて忘れてしまう。exeファイルをローカルPCにダウンロードし、それが一体何をしでかすかを全く知りもせずに、ほいほい実行してしまうと言うのは良くある話だ。

Vistaの二の舞にならず、かつ、おバカさんなユーザを上手く導けるような実行モデルを作り出すと言うのは、我々にとって大いなるチャレンジだ。ユーザに対して今何が起こっているのかを確認させる一方で、馬鹿の一つ覚えのようにユーザに確認をとるのは避けたいという要望もバランスよく取り入れる必要がある。少なくともパワーユーザにとっては、何が行われているかを表示する方が良いと私は思う。たとえアプリケーションに対してより大きな実行権限を与えている場合であっても、いつ何が行われているかを見ることが出来れば色々と助かるだろうから。もちろんAPIレベルでアクセス制限が行われていれば言う事なしだ。社会的信用にかかわる部分を切り分けて、技術的に実現したセキュリティの上に配置させるような段階まで進んだ場合においては特にそうだ。Mozillaチームはまさにこのことについて多く言及しており、私はより多くのアイディアと実装が彼らから出てくるのを心待ちにしている。

(こちらの例ではChromeにおけるクロスサイトXMLHttpRequestのパーミッションをどうやって設定するかを見ることが出来る)

アプリケーションバンドル情報


パーミッション情報およびその他のメタデータがどこかに保持されている必要がある。webOSの場合、アプリケーションに関して宣言した情報が入っているappinfo.jsonというファイルがある。Chromeではmanifesto.jsonがそうだ。

Webでは本来こういったものは存在しない。URLを入力してそこを起点とするだけだ。たしかにHTML5のマニフェストではキャッシュその他のスコープ(訳注: 適用範囲のこと。HTML5では何をどこにキャッシュするかをマニフェストで指定出来る)をブラウザに通知するが、それ以上のことはしない。webOSアプリとクローム拡張機能ではより多くのことをシステムに通知出来る。id・バージョン情報・アップデート情報の所在・アイコン・main関数の有無なんかがそうだ。

顔の無いニワトリ

諸君は顔の無いWebアプリ(訳注: UIを持たないWebアプリ)というものを思いうかべることはあまり無いだろう。一方、顔の無いwebOSアプリやクローム拡張機能というのは思い当たるところがあるだろう。UIを持たないサービスが諸君のPC上で今いくつ実行されているかご存知? webOSではnoWindowフラグ付きで実行することが可能だが、そういったウィンドウを持たない各種サービスが提供する価値ある情報を、リッチでバリエーションに富んだ通知用UIを通じてユーザに提供することが可能である。バックグラウンド実行型アプリケーションが上手くサポートされているのだ

クローム拡張機能ではバックグラウンドページという概念により、長い実行ライフサイクルを持つタイプのアプリケーションを管理している。バックグランドページは以下に示すようなシングルトン(訳注: デザインパターンでお馴染み)になっている
バックグラウンドページを持つクローム拡張機能の典型的なもの、例えばブラウザアクションやページ・オプションページアクションは、ダムビュー訳注: 口のきけないビュー、すなわちビュー自身は表示機能を持たないということ)の形で実装される。ビューが何らかのステータス通知表示を必要とする場合は、ビューがバックグラウンドページに対してリクエストを発行することでステータスを取得する。バックグラウンドページがステータス変化を感知した場合、バックグラウンドページはビューに対し、ステータス表示を更新するよう要求する。
webOSとMojoフレームワークには、シンプルなモデル・ビュー・コントローラ定義だけでなく、アプリケーションのライフサイクルに関する詳細も盛り込まれたリッチなMVCシステムがある。

道のりは続く


この2つの世界やその他の世界(Jetpackとか)を見れば見るほど、これらがひとつに統合されてほしいと願う気持ちがつのる。要求される事は似通っているし、クローム拡張機能の側からクロームOSを眺めてみれば、進む道さえ間違えなければまだまだ前進の余地があるのだということが理解出来るだろう。


訳者コメント:INIT/cdev時代を知る人にとっては「拡張」機能じゃなくて機能「拡張」のほうが馴染み深いと思うんですが、どうなんでしょう? ググったところでは
拡張機能 の検索結果 約 8,200,000 件
機能拡張 の検索結果 約 7,700,000 件
ということで「拡張」機能が若干優勢。

0 件のコメント:

コメントを投稿