Microsoft は Windows 8 アプリケーション間で情報を共有するために,Windows Share という新しい機構を開発した。テキスト,ビットマップ,HTML,URI,ファイルなどの形式のデータをアプリケーション間で共有することができる。その用途はきわめて広く,例えば取得した共有情報を Twitter や Facebook にポストするアプリを利用すれば,ソーシャルネットワークにアクセスせずに情報をポストするようなことも可能になる。
Microsoft の主席シニアプログラムマネージャ Billie Sue Chafins,同社パートナーデベロップマネージャ Steve Seixeiro の両氏が BUILD 2011 で行った "Share: アプリケーションが創り出す Windows 8 共有エクスペリエンス (your app powers the Windows 8 share experience) " と題するプレゼンテーションで,Windows 8 より登場する新たな共有機能の詳細が説明された。Windows Share はアプリケーション間の情報転送を実現する,一種の汎用ライブ・クリップボードである。ただし従来のクリップボードよりもシステムへの統合性がはるかに高く,リッチな情報を扱える。
Windows Share はテキスト,RTF,ビットマップ,ストレージアイテム (ファイルなど),URI,HTML などの標準データ形式をサポートする。さらに拡張形式を使用すれば,アドレスや連絡先,人々,地理情報といった任意の情報ストリーム転送に利用することも可能だ。ユーザがアプリケーション情報共有の操作を行うと,その情報形式を受け入れ可能なアプリケーションのリストが表示される。そこで選択されたアプリケーションに対して,データが透過的に転送されるのである。
この共有機能では,処理プロセスへの参加者として次のものが定義されている。
- ソース – 他のアプリケーションと共有する情報を保持するアプリケーション
- ターゲット – 他のアプリケーションによって共有された情報を利用するアプリケーション
- ブローカ – ソースとターゲット間の転送を仲介する
共有するものさえ持っていれば,ほとんどのアプリケーションはソースになることができる。Microsoft は開発者に対して,アプリケーションを情報ソースとして開発することを推奨している。ターゲットとなるのは,その情報を受信して処理するアプリケーションだ。Share のメリットは,情報交換のプロトコルが Windows に組み込みで用意されることによって,アプリケーション開発者同士がデータ交換のための特定フォーマットに同意する必要がなくなる,という点にある。ただし拡張フォーマットについては,使用するフォーマットに関係者が同意する必要があるため,Schema.org でサポートされているような標準形式の利用が推奨されている。
例として Web ページ URL やテキストなどを,IE と Twitter や Facebook などのソーシャルネットワークで共有することがあげられる。ネットワークに対するデータポスト処理は,Tweet@rama と Socialite がそれぞれのターゲットアプリとして実行する。情報共有の持つ可能性は非常に大きく,今後多数のアプリケーションが開発されるものと期待される。
データを共有するには,ソースをデータ転送マネージャ (Data Transfer Manager) に登録する必要がある。ユーザが Windows の Share コマンドを選択すると,登録されたソースにそれが通知される。通知を受けたソースはデータパッケージを作成して,ブローカに非同期コールで送信する。ブローカは,ソースが転送したデータ形式の受け入れを登録しているターゲットを検索してリストアップする。ユーザがその中のひとつを選択すると,ブローカはそのアプリケーションをアクティベートして,データパッケージを引き渡す。転送の完了をターゲットが通知すれば,下図に示したプロセス全体が完了するのである。
低レベルで Share の処理を実行するのは,Windows ランタイム (WinRT) の新しいアセンブリである Windows.ApplicationModel.DataTransfer だ。共有するソースを構築する処理は,JS ならば次のようなものになる。
// 転送マネージャのセットアップ
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
// データパッケージを生成するために呼び出されるイベントリスナの生成
dataTransferManager.addEventListener("datarequested", function (e) {
// 共有する情報をデータパッケージに格納
var request = e.request;
request.data.properties.title = "Title for data";
request.data.properties.description = "Description of the data";
request.data.setText("Text to share");
...
});
ターゲットに関しては,アプリケーションのマニフェストファイルの変更や,ユーザが共有アプリケーションとして選択したときに Windows が表示する HTML ページの作成など,さらに必要な作業がある。Visual Studio には共有アプリをセットアップするための基本的なテンプレートが用意されていて,作業の大半はこれを使って完了する。
Windows Share は Windows 8 アプリケーション間でデータ互換を行うには便利な手段だ。新たに導入された Metro インターフェースとの親和性も高い。