はじめに
第1回、第2回では、Windowsストアアプリケーションのデフォルトのプロジェクトを解説しました。
第3回では画面を構成する部品「コントロール」について紹介しました。
今回からは、Windowsストアアプリケーションを開発するうえで避けて通れない概念「コントラクト」についての解説となります。
まずは「検索コントラクト」「共有コントラクト」「設定コントラクト」「リモート再生コントラクト」について紹介していきます。
なお、本記事はXAML+C#での開発を想定しています。
コントラクトの概要
「コントラクト」は、アプリケーションが自身ではできないことを、OSやほかのアプリケーションの力を借りて実現可能にする機能です。
Windowsストアアプリケーションは、自由度という点でスマートフォンアプリやブラウザ内アプリと似ており、サンドボックスで守られています。そのため、危険なウイルスの仕込まれたファイルを実行したり、無断でユーザーの望まない通信処理を行ったりすることができません。また、アプリケーションとしては、自由にほかのアプリケーションとデータをやり取りできないといった制限も課せられています。
このような制限を超えた操作を行いたい場合に、コントラクトを利用することで実現できるものがあります。
例えば、ほかのアプリケーションにデータを渡す(共有コントラクト)ことや、チャームの検索からアプリ内のデータの検索(検索コントラクト)が、実現できるようになります。
コントラクトは宣言(契約)という意味があり、OSと機能を利用することについての契約を結ぶというイメージです。
契約を結ぶことによって、アプリケーション側にも契約に応える義務が発生します(検索コントラクトで検索された場合に、アプリケーション側で検索結果を表示する機能を実装しなければならないなど)。
コントラクトは他とのやり取りを行うものを「コントラクト」、自身の拡張を行うようなものを「拡張機能」と分類することもあります。
コントラクトには以下の種類があります。
- 検索コントラクト
- 共有コントラクト
- 設定コントラクト
- ファイルピッカーコントラクト
- リモート再生コントラクト
- キャッシュファイルアップデーターコントラクト
- 自動再生拡張機能
- バックグラウンドタスク拡張機能
- 連絡先ピッカー拡張機能
- ファイルのアクティブ化拡張機能
- プロトコルのアクティブ化拡張機能
- カメラの設定拡張機能
- 印刷タスク拡張機能
- アカウント画像プロバイダー拡張機能
- SSL/証明書拡張機能
以下では、これらのコントラクトの概要と簡単なサンプルコードを紹介していきます。
Windowsストアアプリケーションのマニフェストファイル(「package.appxmanifest」)には、「宣言」と「機能」の2つのタブがあります。
「宣言」はコントラクトの設定を行いますが、「機能」はアプリケーションが利用する機能「インターネットの利用」「マイク・カメラを利用する」などを設定します。機能タブに設定を行わないとマイクの機能などが呼び出せませんので、こちらも併せて確認しておきましょう。
検索コントラクト
検索コントラクトの概要
検索コントラクトを利用すると、アプリケーションは検索チャームからの検索対象となることができます。
検索コントラクトに対応したアプリケーションは、以下の画像のように検索チャームからの検索対象として表示されます。
Windowsストアアプリケーション以外で検索機能を提供する場合、それ以外のプラットフォームであれば、検索用の入力コントロールを配置して、検索ボタンをつけるのが常です。しかし、Windowsストアアプリケーションの場合は、検索チャームからの検索を提供すべきです。
ガイドラインで推奨されているというのもありますが、Windowsストアアプリケーションのコンセプトには、コンテンツを最優先するというものがあるからです。コンテンツを最優先することでボタンなどの機能は画面の外、チャームやアプリケーションバーに隠れた形で配置されます。
これは一見分かりにくいUIに思えますが、Windowsストアアプリケーションは、チャームなどの共通認識された位置に機能を配置することでユーザーの混乱を避けています。検索チャームを利用せずに入力コントロールと検索ボタンを配置することは、この共通認識に沿わない形となってしまい、OSも含めた全体の操作の共通性を損なってしまいます。