Windows 10では、デバイスに依存しない普遍的なアプリ(=ユニバーサルアプリ)を作成できる。「Windows 10用のユニバーサルアプリ」(universal apps for Windows 10)や「Windows 10のユニバーサルアプリ」(Windows 10 universal apps)などと呼ばれる。略して「Windows 10ユニバーサルアプリ」、バージョン番号を落として「Windowsユニバーサルアプリ」ともいう(バージョン番号を落とすと、Windows 8.x/Windows Phone 8.1向けのユニバーサルWindowsアプリと区別が付きにくくなるので注意)。
Windows 8.1/Windows Phone 8.1用のユニバーサルWindowsアプリを作ってきた開発者は、それらとWindows 10のユニバーサルアプリとの違いが気になるだろう。それをひと言でいえば、「Windowsランタイムが再構成された」となる。
次の画像は、Windows 10のユニバーサルアプリが紹介されるときによく登場する図である。PC/モバイル/XboxからIoTまで複数のデバイスが一つのアプリプラットフォーム上に載っており、一つのアプリが複数のデバイスで動作するというものだ。
だがこの図だけでは従来のWindows 8.1/Windows Phone 8.1用ユニバーサルWindowsアプリとの違いは分からないだろう。Windows 8.1/Windows Phone 8.1用ユニバーサルWindowsアプリの仕組みを、XboxやIoTにまで拡張したのだろうか? そうではないのだ。
まず「おさらい」として、Windows 8.1/Windows Phone 8.1用ユニバーサルWindowsアプリ開発の仕組みを見ておこう(次の図)。注目すべき点は、Windows 8.1とWindows Phone 8.1で、Windowsランタイムが別々になっているところだ。
Windows 8.1/Windows Phone 8.1用ユニバーサルWindowsアプリでは、利用するAPIは別々のもので、その中に共通するAPIがあった。作成されたアプリも、Windows 8.1用とWindows Phone 8.1用とで分かれており、ストア上で結び付けて管理することによってエンドユーザーにはユニバーサルなアプリとして見せていたのである。Visual Studioに「共有プロジェクト」という新しいプロジェクト形式が用意されたが、それはAPIの共通部分だけを使ったコードを一つにまとめるために利用するものだ*8。
*8 共有プロジェクトを使ったWindows 8.1/Windows Phone 8.1用ユニバーサルWindowsアプリの開発については、「特集:Windowsストアアプリ開発最新情報(Build 2014より):ユニバーサルWindowsアプリ開発の勧め」参照。
Windows 10では、Windowsランタイムが再構成された。イメージ的には次の図に示すように、共通のAPIを切り出して全てのデバイスに載せ、それ以外の部分は「Extension SDK」という形でデバイスごとに提供する形になったのである。
Windows 10用のユニバーサルアプリは、ただ一つのバイナリが複数のデバイスで動作するという、まさしくユニバーサルなアプリなのである。Extension SDKに含まれるAPIはデバイス依存であるが、デバイスに関係なくコンパイルできる。必要なExtension SDKが提供されていないデバイスで実行時にそのようなAPIを呼び出すと例外が発生するので、Extension SDKのAPIを呼び出す前に利用可能かどうかを確認するコードを書く(後述)。
Extension SDKのイメージは、MWC 2015*3のセッションでは次の図のように説明されている。
なお、特定のデバイスだけに配布できないと困ることもあるが(例えばPOSレジ用のアプリがPCに配信されても困るだろう)、そのような手段があるのかはまだ公表されていない*9。
*9 MSDN「ユニバーサル ドライバーの概要」に、「[ターゲット プラットフォーム] が [ユニバーサル] に設定されていることを確認します。 その他のオプションとして、デスクトップ版 Windows 10 Technical Preview のみで実行するドライバーをビルドする [デスクトップ]、Windows 10 Technical Preview for phones のみで実行するドライバーをビルドする [モバイル] があります」とあり、同様の仕組みがアプリにもあると推測される。筆者は、マニフェストの<TargetPlatform>要素にあるName属性が該当するのではないかと考えている。さらに、ストアではより細かい指定ができるようになるかもしれない(現在のWindowsストアでも、最小メモリやタッチパネル必須といった指定ができる)。
また、Windowsランタイムの再構成に伴いMSDNのAPIリファレンスページでの要件表示が変更されているので、それも紹介しておこう(次の画像)。これまではOSとそのバージョンが書かれていたのだが、Windows 10用のAPIでは「Device family」(対応デバイスの区分)と「API contract」(APIの区分とバージョン)に変わっている。また、共通のAPIであっても、実装に差異のある場合もあることが分かる。
次ページではVisual Studio 2015にWindows 10 開発者ツールのプレビュー版をインストールした環境で実際にWindows 10用のユニバーサルアプリを作ってみる。
Copyright© Digital Advantage Corp. All Rights Reserved.