それでは、従来のデスクトップアプリに替えてWindows 10のUWP用にアプリを開発するメリットは何だろうか? 筆者が重要だと考えているものを、順不同で述べる。
従来のデスクトップアプリをインストールすると、レジストリへのデータ書き込みやシステムDLLの上書きなどをすることがあった。アンインストール時には、レジストリのデータやインストールしたDLLなどを完全に削除できないこともある。その結果、アプリのインストール/アンインストールを繰り返していくと徐々にWindowsの動作が遅くなっていくし、機能に支障をきたすことさえある(この現象をWindowsが「腐る」と表現することがある)。
UWPでアプリをインストールするには「APPXパッケージ」を使う(ファイル拡張子が「.appx」となっている)。APPXパッケージでインストールする際には、レジストリへのデータ書き込みはほとんど行われない(開発者が書き込むデータを追加することはできない)。パッケージに同梱したDLLは、実行ファイルと同じ場所に格納される。このようにすることで、システムへの影響を最小限度に抑えてWindowsが「腐る」ことがないように設計されているのだ。
また、APPXパッケージはWindowsストアや、Windows 10で提供開始される予定となっている「Windows Store for Business」で配布できる。配布やアップデートの手間が少なくて済むのである。
UWP用のアプリを(デバイスを限定せずに)作成すれば、前出の表のように全てのWindows 10デバイスで動作させることができる(CPU依存にしたり、アプリマニフェストでデバイスを限定したりできるので、あくまでも「そのように作れば」の話である)。一つのプロジェクト/一つのバイナリで、複数のデバイスに対応できるのである。
なお、マルチプラットフォーム開発という面では、iOS/Android/Windows 10 UWP向けのアプリをC#やJavaScriptで開発できる環境が整いつつある(Xamarin/Unity/Cordovaなど)。
従来のデスクトップアプリでタブレット用のアプリを作ろうとすると、UIコントロールがタッチ操作を考慮して作られていないため大変な苦労をすることになった(そのような開発をするとなったらサードパーティ製のコントロールなどを利用すべきだ)。
UWPアプリ開発に利用するWindowsランタイムのコントロールやWinJSのコントロールはタッチ対応になっている。
UWP用のアプリが利用するWindowsランタイム/WinJSは、クライアント=サーバー型と似ているが、よりセキュアな構成となっている、いわば「クラウド型」とでも呼ぶべきシステムアーキテクチャを前提としている(次の図)。クライアントからDBサーバーなどに直結させず、Webサービスを介する形態である。これにより重要な情報やタスクが分離されるので、クライアントがサイバー攻撃を受けたとしても情報漏えいは最小限に抑えられるのだ。
また、UWP用のアプリがインストールされるフォルダーは、管理者権限があってもその中を見ることさえできない。アプリを改ざんしようとする攻撃にも強いのである。さらに、Windowsストア/Windows Store for Businessで配布するAPPXパッケージは、Windows 10 Enterpriseエディションの新機能「Device Guard」とも相性がよい(Device Guardの下で従来のデスクトップアプリを使うことも可能ではあるが、デジタル署名にまつわる面倒を全て見ることになる)。
従来のデスクトップアプリ開発と比べたとき、Windows 10のUWP用アプリにはデメリットもある。従来はできていたことができなくなるのだが、しかしそれはUWPのメリットの裏返しでもある。
前述した「クラウド型」システムアーキテクチャに立脚したセキュアなシステムを構築しやすいが、クライアントPCとDBサーバーを直結するようなクライアント=サーバー型のシステムを開発するのは困難である。「クラウド型」システムアーキテクチャを前提としているWindowsランタイムでは、クライアントPCからADO.NETやEntity Frameworkを使ってDBサーバーに直接接続する機能が提供されていないのだ。
UWPアプリでは、ローカルリソースの利用が制限されている。従来のデスクトップアプリでは、クライアントPCのファイルや接続されているプリンターなどをほぼ自由に活用できたし、実行中の他のプロセスにもアクセスできた。ところがUWPアプリでは、ファイルアクセスや印刷を行うには原則としてエンドユーザーの操作が必要なのである。また、プロセス間の情報交換はUWPが中継するものだけに限定されている。
この制限はセキュリティを侵害するようなマルウエアを作らせないためであるが*2、従来のデスクトップアプリに与えられていた自由な環境に比べると窮屈な思いをすることになる。
*2 「特集:Windows 8開発に向けて準備しよう:Metroスタイル・アプリの開発者が知るべき3つのこと」の2ページ目をご覧いただきたい。MSDNブログの「信頼できる Metro スタイル アプリを提供する」も参考になる。
UWPアプリのインストールはAPPXパッケージで行うが、その配布はマイクロソフトのWindowsストアか、あるいはデジタル署名を管理している組織では「サイドローディング」という手段を利用する。配布経路の途中で改ざんされないようにするためである。そのために、従来のデスクトップアプリのように、インストールパッケージを自由に配布して導入するというわけにはいかない。
これもセキュリティが向上したことの裏返しである。Windows 10で導入される企業ユーザー向けの「Windows Store for Business」を利用すれば、組織内での配布は楽になるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.