de:code で担当するセッションについて

久し振りの投稿になります。de:code では、以下の2つのセッションを担当しています。

この準備に追われているのですが、連携技術の中で説明する予定の Windows ランタイム コンポーネント ブローカーの概要と情報の探し方を解説します。 Windows ランタイム コンポーネント ブローカーとは、Windows 8.1 Update で追加された新機能の1つで、Windows ストア アプリからデスクトップの既存ライブラリを使えるように技術のことです。
Windows Runtime Component Broker

Windows ストア アプリから利用する仕組みは、プロキシを利用してコンポーネント側のスタブを使ってラッパーとなる Windows ランタイム コンポーネントを経由して既存のマネージ・ライブラリーを使用します。プロキシ/スタブを介するということは、アプリとコンポーネント間は通信を行うのでデータのマーシャリングが行われることになります。プロキシ/スタブという用語を聞くと、思い出すのが COM コンポーネントではないでしょうか。COM コンポーネントを思い出した方がいらっしゃれば、それは的を得ています。なぜなら、この技術は COM コンポーネント技術の上で構築されているからです。
もちろん、この技術を使って作成された Windows ストア アプリは、Windows ストアの認定には通りません。なぜなら、利用する Windows ランタイム コンポーネント ブローカーを Windows ストアに提出する方法がないため、Windows ストア側でテストができないからです。その代わりに、Windows ストア アプリが実行されるアプリコンテナーという一種のサンドボックスの制限を超えることができます。サンドボックスを超えられる理由は、デスクトップ コンポーネントが動作するプロセスはアプリ コンテナーではなく、通常の Win32 プロセスになるからです。この技術が、4月に行われた Build 2014 カンファレンスで英語では「Brokered Windows Runtime Component」と表現されていました。また、「Respecting Your Investments: How to Leverage Your Existing Code In a New Windows Runtime LOB App」というセッションの中でデモも行われていました。

 

この技術をアプリ ブローカーと呼んでいますが、学習するには以下の3種類の方法があります。

ホワイトペーパー

日本語訳のホワイトペーパーは、日本語的に誤訳ではありませんが、少しおかしなところもありますが、機能を学習するには役立つものです。最新のリンクなどを確認される場合は、英語のホワイト ペーパーをお読みください。このホワイト ペーパーに該当するサンプルも公開されています。ホワイト ペーパーに従って、アプリ ブローカーを作成しようとした時に問題になるのが、プロジェクト テンプレートとして何を選択すれば良いかという点になります。これは、「Windows ランタイム コンポーネント」のテンプレートを使用すればスクラッチで作成することができます。

NorthwindRT サンプル

このサンプルでは、スクラッチでのプロジェクトの作成方法の説明はありません。このサンプルと同等のアプリ ブローカーのプロジェクトを作成するには、「クラス ライブラリ」テンプレートを使用してプロジェクトを作成します。プロジェクトが出来上がってから、プロジェクト ファイルをエディタで編集する必要があります。このサンプルでは、SQL Server Compactを使用して、Windows Forms アプリ用に作成したデータ アクセス コンポーネントを Windows ストア アプリでアプリ ブローカーで使用するようになっています。このようなサンプルですから、現実に即したサンプルと言うことができます。

Brokered WinRT Component Project Templates

アプリ ブローカーを作成するために、Visual Studio のプロジェクト テンプレートを提供するものです。このテンプレートを使用すると、プロジェクト ファイルの編集などという作業は不要になり、目的のコードのみに集中できることになります。このテンプレートを使用する上での注意点は、アプリ ブローカーとプロキシ スタブのプロジェクトにおける既定の言語が「英語(en-US)」になっていることです。これが問題になる場合は、プロジェクト ファイルを編集してください。ちなみに、アプリ ブローカーのプロジェクト テンプレートは、NorthwindRT サンプルと同じで「クラス ライブラリ」テンプレートを使用しています。

アプリ ブローカー プロジェクトの作成方法などは、de:code 終了後に情報をまとめる予定でいます。

追記