質問: Windows 10 で、ようやくストア アプリが普通に使えそうな感じになってきたので、ひとつプログラムを組んでみようとしました。 もう何年も Windows Forms と WPF の開発はやってきているので、同じ Windows 用のプログラムですから簡単に作れると思ったんですが。 ADO.NET が見当たらず、データベースに接続する手段が無い。 パスを指定してファイルを開くこともできない。 無い無い尽くしじゃありませんか。 なんでこんなに不便で開発しにくい環境になってるんでしょう?
回答: 一言で答えるなら、「エンドユーザーの安心と安全のため」です。 ストア アプリのプラットフォームには、クラウド時代に対応するべく、2つの大きな特徴があります。 1つは、「デバイス&サービス」(あるいは「モバイルファースト、クラウドファースト」) アーキテクチャ。 もう1つは、「アプリの信頼性」です。 * **「デバイス&サービス」アーキテクチャ:** 重要なロジックやデータはクラウドに、デバイス (PC やスマートフォン) はそのフロントエンドに (下図) * **「アプリの信頼性」** エンドユーザーがアプリを信頼できること。 信頼できないアプリは開発 / 配布できないようにプラットフォームや審査で制限 !ストア アプリで想定されているアーキテクチャ この両者は関連しています。 「デバイス&サービス」アーキテクチャを前提としたので、 デバイス側プラットフォームの機能を制限することができたのです。 「デバイス&サービス」アーキテクチャのもとでは、例えばデータベースはクラウドに置きます。 そしてクラウド側の Web サービスでデータベースにアクセスします。 すると、 デバイスからはその Web サービスに HTTP / HTTPS でアクセスできるだけでよく、 デバイス側にデータベースアクセス機能は無くてもすむわけです。 さて、この特徴が理解できると、次のようなエンドユーザーのセキュリティを脅かしたりプライバシーを侵害したりすることも可能な機能がプラットフォームから削られていることに納得がいくでしょう。 * ファイル読み書き 自由にできるなら、ウイルスを「インストール」したり、エンドユーザーのプライバシーに係わるファイルをこっそり読み出したりできる * データベース アクセス LAN 上のデータベースに直接アクセスできるなら、そのユーザーに許可されている操作が何でもできてしまう。 データをごっそり抜き出して外部に送信することも可能ですね。 ※ 現在のところ、サードパーティのデータベースでアプリに同梱して配布可能なものがあります。 Windows 10では、アプリに同梱したデータベースなら Entity Framework 7でアクセス可能になる、という情報もあります。 * ユーザーやデバイスの識別 識別できると、複数のアプリや Web サイトを通じたユーザーの行動を追跡可能になります (1アプリの中だけなら識別可能です) * プロセス間通信、ループバック接続 いずれも、エンドユーザーに気付かれずに他のプログラムと通信させないために禁止されています (他のサーバーを介した通信はトラフィック監視で検出可能ですから許可されています) 「なんでこの機能がないんだ!?」と思ったときは、「**その機能を使ってエンドユーザーの安全を脅かすことが可能か?**」を考えてみてください。 ※ もちろん、まだ十分に機能が充実しているとはいえない状況ではあります。上の「テスト」に合格したアイデアがあれば、UserVoice サイトにリクエストしてください。 以下のドキュメントもご覧ください。 * MSDN Blogs: 「信頼できる Metro スタイル アプリを提供する」 * TechNet Blogs: 「Windows 8 セキュリティ特集 #5 Windows ストア アプリ」 * @IT: 「Metroスタイル・アプリの開発者が知るべき3つのこと」 * Community Open Day 2013: 「Windowsストアアプリでウイルスを作るには!?」