特集:Windows 8開発に向けて準備しよう

Metroスタイル・アプリの開発者が知るべき3つのこと
―― アイデアを考え始める前に、これだけは理解しておこう! ――

BluewaterSoft 山本 康彦
2012/03/13
Page1 Page2 Page3

その2: [機能の原則] ユーザーのプライバシーを守護すべし!

 Metroスタイル・アプリはユーザーのプライベート情報を守っているという信頼を得られるように、機能を設計してほしい。

 ユーザーの不信を招くような機能を設計してはいけない。また、プライベート情報を漏えいさせてしまうような用途に使えるAPIは厳しく制限されている。

Metroスタイルで利用できるAPI

 Metroスタイル・アプリで利用できるAPIは、次のようになっている。

  • 新しく作られたWinRT(Windows Runtime)
  • 従来の.NET Framework、COM、Win32APIの一部

 従来のAPIは、一部しか使えない。また、バックグラウンド・タスクで利用できるのはWinRTだけとなる。

 例えば(次の画面に示すように)、従来の.NET FrameworkのSystem.IO名前空間は使えるが、その中のStreamReaderクラスのコンストラクタからは、ファイル名を指定するオーバーロードがなくなっている。パスを指定してファイルを開くことはできないのだ。

ファイル名を指定してStreamを開くことはできない!
「new StreamReader("readme.txt");」というコード()に対して、「無効な引数が含まれている」というエラーが報告されている()。

 そこで、Metroスタイル・アプリでは、WinRTのFileOpenPickerクラス(Windows.Storage.Pickers名前空間)を使ってユーザーにファイルを指定してもらう。

var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.FileTypeFilter.Add(".png");  // 拡張子を設定する(必須)

var file = await openPicker.PickSingleFileAsync();  // ここでユーザーがファイルを指定する。
if (file != null)
{
    // 指定されたfileの読み書きができる。fileのパスも分かる。
    TextFilename.Text = file.Path;
}
List 1: FileOpenPickerクラスを使ってユーザーにファイルを指定してもらう例

 実際にユーザーにファイルを指定してもらう画面は、次のようになる。ダイアログが出るのではなく、画面全体がFileOpenPickerクラスが提供するウィンドウに切り替わる。C:ドライブのルートが表示されているが、一部のフォルダしか見えていない。どんなファイルでも指定できるわけではないのである。

ユーザーにファイルを指定してもらう画面
FileOpenPickerクラスを使ってC:ドライブからファイルを選択しようとしているところ。Program FilesやWindowsフォルダは見えない。

 ファイル・アクセスを例に挙げたが、レジストリの操作やプロセスの起動*1など、およそユーザーのプライバシーを侵害するために使えそうなAPIは、存在しないか、制限されていると考えてもらってよいだろう。

*1 アプリ間の連携は、関連付けによる起動(association launching)や、「共有コントラクト」などを使って実装する。

Capabilityの指定

 特定の条件の下では、例えばファイルやフォルダを列挙することも可能になる。

var storageItems = await Windows.Storage.KnownFolders.PicturesLibrary.GetItemsAsync();
foreach (var item in storageItems)
    TextFilename.Text += "\n" + item.Path;  // ファイルとフォルダが列挙される
List 2: KnownFoldersクラス(Windows.Storage名前空間)を使って、ユーザーのMyPictureフォルダの内容を列挙する例

 ただし、このままビルドして実行すると例外が発生する。これを回避するには、「ユーザーの画像ライブラリ(=KnownFoldersクラスのPicturesLibraryプロパティ)にアクセスしますよ」というCapability(ケイパビリティ、ベータ版では「機能」と訳されている)を、マニフェスト・ファイルに宣言しておく必要がある。次の画面はその宣言を指定している例である。

ユーザーの画像ライブラリを利用できるCapabilityを指定している画面
[ソリューション エクスプローラー]でPackage.appxmanifestファイル()をダブルクリックすると専用のエディタが開くので、[機能]タブ()を選ぶとこの画面になる。が「画像ライブラリ」のCapability指定。

 このCapabilityの情報は、Windows Storeに表示される。ユーザーは、その情報もダウンロードするかどうかの判断材料に使うであろう。また、Capabilityによっては、下の画像に示すように、インストール後に許可を変更できるものもある。

インストール後も変更できるCapability
Webカメラとマイク()などは、アプリの実行中でもユーザーがその場で許可をON/OFFできる。

 ユーザーの許可の下に使える機能、それがCapabilityを必要とするAPIだと考えてもらいたい。また、インストール後もON/OFFできるCapabilityは、実行中にOFFにされても落ちないようにアプリを設計・実装しなければならない。

Windows Storeの規定

 [配布の原則]で述べたように、Metroスタイル・アプリはWindows Storeを通じて配布しなければならない。Windows Storeに登録するためには、定められている要件に従う必要がある。詳細はマイクロソフトのサイトを見ていただきたい。

Windows アプリの証明書の要件
ここに書かれた要件を満たしていないとWindows Storeに上げることができない、すなわち、事実上アプリを配布できないということになる。

 要件の中から、アイデアの実現性に関わりそうな項目をいくつか引用しておこう。

[引用]
  • 2.1 アプリは広告だけを表示するものであってはならない(筆者注:アプリの機能とは別に、画面内に広告を表示するのは可)

  • 2.4 ユーザーがアプリのコンテキスト外のエクスペリエンスにリダイレクトすることなく、アプリ内で主要なタスクを実行できるようにする必要がある(筆者注:IEを起動してWebサイトにリダイレクトするなど。WebViewコントロールを使ってアプリ内にWebページを取り込むのはOK)

  • 3.1 アプリは Metro スタイル アプリ用 API しか使ってはならない

  • 3.6 システムが提供するメカニズムを備えた機能をアプリがサポートする場合、システムが提供するメカニズムを使用しなければならない(筆者注:スナップモードのサポートは必須、[×]ボタンは不可、リジューム機能は必須、など)

  • 4.1 個人情報を公開するアプリは、オプトイン同意または同等の同意を得なければならない

  • 4.3 アプリは Windows システムのセキュリティまたは機能を危険にさらしたり侵害したりしてはならない

  • 4.4 ユーザーまたは他の個人に物理的被害を与えるタスクを実行、命令、または奨励する目的でアプリを設計、販売してはならない(筆者注:ハードウェアを無人制御するアプリや、緊急・救命の状況下で使うアプリなど。なお、原文には「目的で」という開発者の意思を示す語はない。)

  • 5.1 アプリに成人向けコンテンツを含めてはならない(筆者注:そのほかに、差別・違法行為・人権侵害等を助長するコンテンツや、誹謗中傷・過度に粗野な言葉など)

Windowsアプリ認定キット

 要件の中で自動的に判定できる部分は、Windowsアプリ認定キット(以下「認定キット」)を使って開発者がテストできる。そのテスト内容や実施方法は、MSDNの「Windows アプリ認定キットでのアプリのテスト」を参照してほしい。

 認定キットからは、次のようなレポートが出力される。

認定キットのレポート例(IE10CPで表示)
[Overall Score]が「FAILED」になっているため、この出力結果ではWindows Storeに登録できない。
ここでは「サポートされているAPI」の項目が「FAILED」になっている()。

 このレポート例では、Win32 APIのGetTickCount()関数を呼び出していることが検出されてエラーになっている(要件3.1に違反)。このように、コンパイル時には見逃されてしまう規約違反も認定キットでは発見されるのだ。開発の初期段階から、しばしば認定キットでのテストを実施することを強くお勧めする。

 さらに付け加えると、例えば画面のキャプチャやスタート画面のタイル配置なども、ユーザーのプライベート情報に属することだとして、Metroスタイル・アプリからは取得が制限されている。デスクトップ・アプリに慣れ親しんできた開発者には、いかにも窮屈に感じられるかもしれないが、「ユーザーのプライバシーを守護するのだ」という誇りを持って開発に臨んでもらいたい。

 それでは次のページでは、最後の3つ目のポイントを説明する。


 INDEX
  [特集] Windows 8開発に向けて準備しよう
  Metroスタイル・アプリの開発者が知るべき3つのこと
    1.[配布の原則] Windows Storeで配布すべし!
  2.[機能の原則] ユーザーのプライバシーを守護すべし!
    3.[設計の原則] 万全のリジューム機能を装備すべし!


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH