Google Chromeチームが Web Intentをリリースした。これはサードパーティサービスのカスタムAPIを使わずに、Webアプリケーションを連携可能にするAPIだ。Web IntentはAndroidのIntentのWeb版に相当するもので、実行時遅延バインディングを使ってアプリケーションとサービス間の疎な結合を可能にする。Web Intentはユーザフレンドリーな仕組みを提供することで、ユーザ自身によるサービス連携をコントロール可能にする。これにより、開発者の仕事も楽になる。
Intentシステムでは、Intentに対して明示的にサービスを登録する。Intentは基本的にEdit、View、Shareなどの汎用アクションであって、そのアクションに関連したパラメータを伴っている。ユーザは実行時にそのアクションに登録されたサービスの中から1つ選択するよう促される。選択するとそのアプリケーションに、ユーザから渡されたデータを使ったアクションの実行責務が移される。Webの世界におけるこうしたユースケースシナリオとしては、カスタムWebアプリケーションによる写真共有がある。FlickrやPicasaといった各種写真共有サービスと連携するカスタムAPIを書くかわりに、WebアプリケーションはWeb Intentの発行を利用することができる。これはわずか数行のコードで、ブラウザの機能を利用している。FlickrとPicasaのようなサービスを共有するためには、まずIntentのハンドラとして登録する。共有Intentが発行されると、ユーザはハンドラの中から1つ選択するよう促される。現時点で、これをサポートするのに必要な機能を実装したブラウザは存在しないが、Web IntentプロジェクトはJavascript Shimを公開し、IE 8と9、Firefox 3以降、Chrome 5以降、SafariにおけるWeb Intentアプリケーション実行をサポートしている。
GoogleのソフトウェアエンジニアであるJames Hawkins氏は、The Chromium Blogにおいて、詳細なJavaScriptサンプルを提供し、そのAPI機能について説明している。
資金繰りの厳しいスタートアップが運営しているオンライン写真ストレージについて考えてみましょう。彼らには自分たちのアプリに画像編集機能を追加するためのリソースがありません。しかし、それがないと自分たちのサイトはヒットしないだろうと思っています。Web Intentシステムを使えば、わずかな労力で簡単にこれを提供できるようになります。
var intent = new Intent(Intent.EDIT, ‘image/png’, getImageDataURI());
window.navigator.startActivity(intent, loadEditedImage);
// このコールバックは、サービスが編集された画像データを
// 返したときに呼ばれる。
function loadEditedImage(data) {
var image = document.getElementById(‘image’);
setImageData(image, data);
}
ユーザがお気に入りのmemegenサービスを訪れると、そのサイトは次のような宣言によって、タイプが ‘image/*’ のファイルのEDIT Intentをハンドルするよう登録を要求します。
<intent
action=”http://webintents.org/edit”
type=”image/*”
/>
ユーザがEDITアクションを起動すると、登録されたほかの画像エディタとともにサービスがユーザに提示されます。ユーザがMeme Generatorを選択すると、そのサイトが新しいコンテキストでオープンされ、Intentペイロードにある画像データをロードできるようになります。
var intent = window.intent;
memeImg.src = intent.data;
memegenForm.onsubmit = function() {
// 画像を変換する - ミーム化する
addMemeTaglines(memeImg, memeTopText, memeBottomText);
// 生成されたミームをクライアントに送り返す。
intent.postResult(getImageData(memeImg));
};
postResult()が呼ばれると、Meme Generatorコンテキストはクローズされ、startActivity()に渡されたコールバックを通して、その出力データがクライアントに送り返されます。
Discover: Discover Intentは開発者が外部サービスで動いているAPIやサービスをクエリするために設計されている。
Share: Share Intentは現在のページにあるデータを共有するシンプルな仕組みをアプリケーションに提供するために設計されている。Shareをハンドルできるアクションはユーザがインストールした任意のものでよく、Social NetworksやEmailサービスなどでもよいし、それに制限されることもない。"Share"プロトコルは軽量な共有機能のためにある。
Edit: Edit Intentは現在のページにあるデータを編集するシンプルな仕組みをアプリケーションに提供するために設計されている。Editをハンドルできるアクションはユーザがインストールした任意のものでよく、画像編集ツールやテキストエディタなどでもよいし、それに制限されることもない。"Edit"プロトコルは軽量な編集機能のためにある。
View: View Intentはアプリケーションにあるデータを閲覧するシンプルな仕組みをアプリケーションに提供するために設計されている。Viewをハンドルできるアクションはユーザがインストールした任意のものでよく、プロ向け画像ツールやオーディオプレイヤーなどでもよいし、それに制限されることもない。"View"プロトコルは軽量な閲覧機能のためにある。
Pick: Pick Intentはユーザがクライアントアプリケーションで利用するサービスにあるデータを取得する仕組みをサービスに提供するために設計されている。Pickをハンドルできるアクションはユーザがインストールした任意のものでよく、PicasaやFlickrのようなイメージギャラリーでもよいし、それに制限されることもない。クライアントアプリケーションは、GmailやHotmailなどのメールクライアントでも構わない。"Pick"プロトコルは軽量なクラウドファイル取得機能のためにある。
この問題に対するアプローチを統一するため、GoogleはMozillaとともに取り組んでいる。Mozillaもこの領域に関心をもっており、 先月のOpen Web App Addon 0.3 for Firefoxのローンチとともに、Web Activitiesを紹介した。Open Web App EcoSystemには、機械読み込み可能なアプリケーションのManifest、ユーザのアプリリポジトリ、アプリ起動のためのダッシュボード、インタラクション支援などが含まれている。ManifestはWeb IntentシステムにおけるIntentとよく似ている。
現時点ではまだ、ユーザへの導入がうまくいくかは非常に不透明だが、アプリケーションインテグレータやサービスプロバイダにとっては有望な技術だと思われる。あなたはどう思うだろうか?