続く技術セッション2ではBluewaterSoftの山本康彦氏からWindows 10のUWPアプリ開発の概要について話があった。
BluewaterSoft 山本康彦氏
BluewaterSoftを名乗ってフリーランスでアプリ開発や執筆活動をしている。Windowsストアアプリ開発とはWindows 8 Developer Preview(2011年秋)からの付き合いなので、そろそろ4年になる。今日は全体的に中立な立場、というよりもむしろ3年前までSIerに所属していた実際の現場開発者としての立場に重点をおいて説明・発言する。
このセッションでは、デスクトップアプリとUWPアプリの相違点を中心に話が進められた。
UWPアプリがどんなものなのかについての話でセッションは始まった。デスクトップで使用する分には、UWPアプリはWPFとほとんど見分けが付かない。その一方で、UWPアプリの場合は、単一のバイナリがさまざまなデバイスで動作する。
次に、UWPをとりまく用語について整理をしてくれた。一言で説明すると「UWPアプリは、Windows 10のUWPで動作するアプリのことである」。ただし、「ユニバーサルWindowsアプリ」「ユニバーサルアプリ」「Windowsアプリ」などという呼称が使われることもある。これらはWindows 8.1/Windows Phone 8.x用の「ユニバーサルWindowsアプリ」と混同を招く場合がある(こちらの「ユニバーサルWindowsアプリ」は、プラットフォームごとに別のバイナリが作成され、そのユーザーエクスペリエンスが共通になるという意味で「ユニバーサル」なものとなっている)。記事を読んだり、同僚と話をしたりする場合には、どんなコンテキストで用語を使っているかを明確にしておく必要があるだろう。
UWPアプリは新形式のAppXパッケージを動かすものだ。その特徴としては、以下のことが挙げられる。
UWPアプリの特徴について上のようにまとめると、話はAPIとして見た場合のUWPへ。UWPとは「単一のAPIサーフェイスを提供する」ものであり、この共通部分(これを「Windows Core」と呼ぶこともある)を使用している限りは、全てのWindows 10デバイスで動作する。
その一方で、デバイスに固有な部分をサポートするAPIもある。これらは、Extensionとして提供される。Extensionはデバイスの種類ごとに用意されるが、現在はWindows 10 Desktop/Mobile/IoT/Team(Surface Hub用)の存在が確認されている。UWPアプリを開発する際には、Windows 10のどのエディションでどのExtensionを使えるかに注意する必要がある(見分け方は「デバイスの形」となる)。
次に、従来のデスクトップアプリとUWPアプリとの比較が詳しく行われた。以下、文字でまとめるが、セッションでは表にまとめて分かりやすく説明をしてくれているので、セッションのアーカイブをぜひご覧いただきたい。
まず動作するデバイスとWindowsのバージョンについて。従来のデスクトップアプリはPC/タブレットPC上で動作し、対象とするWindowsのバージョンは7/8.x/10となる(Windows RTは除く)。これに対して、UWPアプリはPC/タブレットPCに加えてスマートフォン/IoT/Surface Hub/HoloLens/Xbox Oneなどの上でも動作する。ただし、対象とするWindowsのバージョンは「10だけ」となる。
開発の手法としては、従来のデスクトップアプリについて簡単にまとめると次のようになる。Windowsフォーム/WPF/MFCといったUIフレームワークと、C#/VB/C++などの言語を組み合わせて開発を行うことになる。使用できるAPIはWin32、COM、.NET Frameworkなどがある(Windowsランタイムも一部使用可)。これに対して、UWPアプリでは、XAML+C#/VB、HTML+JavaScript、XAML+C++といった組み合わせで開発が行われる(これ自体はWindowsランタイムアプリ開発とあまり変わらない)。利用可能なAPIとしてはWindowsランタイムが主に使われる(.NET Framework、Win32、COMも一部使用可能)。タッチ対応については、従来のデスクトップアプリは自前で実装するか、サードパーティ製のプロダクトを利用することになったが、UWPアプリでは標準で対応となる。
アプリの配布については、MSIパッケージやサードパーティ製のインストーラー、実行ファイルをそのまま配布していたものが、上述した通り、AppXパッケージとWindowsストアによる配布となる。
従来のデスクトップアプリではインストール時にレジストリへの大量の書き込みが行われたり、システムDLLが上書きされたりする可能性があった。これは最終的にWindowsを「腐らせる」ことにつながっていた。これに対して、UWPアプリはそのようなことはほぼない。これは大きな違いといえるだろう。
セキュリティ面での制限として、従来のデスクトップアプリはUACを除けばほとんどなかった。だが、UWPアプリはサンドボックスで動作/管理者権限不可/ファイルI/Oやプリンター制御などに制限/DBアクセスやプロセス間通信が行えないといった制限がある。また、アプリの保護についてもUWPでは、管理者権限があってもインストールフォルダーにはアクセスできない/デジタル署名を利用した改ざんチェック/実行時に他アプリからのアクセスが不可といった形で、アプリが強固に守られるようになっている。これらはマルウエアを作らせないようにするための施策だ。
では、UWPで業務アプリを開発する際にはどのようなアーキテクチャになるのだろうか。上述したように、DBへの直接接続は行えない。そのため、UWPアプリではWebサービスを介した形でクライアントとサーバーが通信を行うようになる。山本氏はこれを「クラウド型のアーキテクチャ」と呼んでいる。
UWPアプリ開発を始めるには何が必要か。もちろん、Windows 10が動作するPCが必要だ。これに加えて、Visual Studio 2015とWindows 10 SDK、マイクロソフトアカウントが必要になる。実機デバッグできるようにターゲットデバイスもあった方がよい。アプリを配布するにはストアに開発者登録が必要になる(このとき、クレジットカードも必要になる)。
また、Windows Phoneエミュレーターを使う場合にはHyper-Vが必要になる。
なお、注意点としてはWindows Updateの方針がWindows 10で大きく変わったことがある。セキュリティアップデートは強制。新機能アップデートは、CB(Current Branch)は強制。Pro以上で選択可能となるCBB(Current Branch for Business)では一定期間延期が可能だ。Enterprise/Educationで選択可能なLTSB(Long Term Servicing Branch)では最大10年間の延期が可能となっている。企業内でEnterpriseエディションを使っている場合には、新機能アップデートは適用せずに、以前のバージョンを維持したいという状況も考えられる。UWPで業務アプリを開発する際には一考が必要かもしれない。
次に、UWPアプリ開発の実際がどんなものになるかが、デモを交えて語られた。
注意点はターゲットとなるWindows 10バージョンを指定する欄がプロジェクトのプロパティ画面にあることだ。このターゲットから外れたバージョンのWindows 10デバイスにはアプリをインストールできない。
C#/VBなどでUWPアプリを開発する際、UI構築はXAMLで行う。このため、WPFに慣れていれば戸惑うことはないだろう。アプリが扱うデータとUI画面を結び付けるデータバインディング機構についても同様だ。
もう一つ。非同期処理も重要だ。UWPアプリでは、非同期処理を行うAPIが非常に多い(ファイルの読み書きすら非同期処理となる)。async/awaitに習熟しておきたい。
UWPアプリのUI構築に関しては、複数デバイスに対応するための「Adaptive Trigger」も重要になる。Adaptive TriggerはXAMLだけでアダプティブなUIを構築するための仕組みであり、デバイスの画面サイズに応じてUIをどんなものにするかを場合分けしてXAMLファイルに記述していく。
XAML Viewというものもある。これは、Windows 10 Desktop/Mobileなどの種類ごとにXAMLコードを別途用意してしまうというものだ。デバイスの種類に応じて、画面構成を大きく変更したいという場合には有効に使えるだろう。ただし、Windows 10 SDKの正式版でこれが残されるかは不明だ。
デバイス固有のAPIを呼び出す場合には、ApiInformationクラス(Windows.Foundation.Metadata名前空間)に用意されている各種のAPIを使用して、現在、実行されているデバイスで呼び出そうとしているAPIが提供されているかを確認する必要がある。ただし、これは面倒な処理なので、「Platform Specific Analyzer」というツールが公開されている。
開発したUWPをストアに提出する際には、デバッグビルドではなく、リリースビルドに切り替える必要がある。忘れないようにしよう。その後、WACK(Windows App Certification Kit=Windowsアプリ認定キット)を使って、ローカルな環境でアプリのテストをする。その後、ストアへ提出という道筋をたどることになる。
最後に業務アプリをUWPで開発することのメリット/デメリットとして以下が挙げられて(○がメリット、×がデメリット)、これまた内容の濃いセッションは終了した。
業務アプリを開発する際には上記のような点に留意して、どのプラットフォームを選択するかを検討したい。
なお、本セッションの詳細については、以下に示すセッション資料やセッション動画を参照していただきたい。
Copyright© Digital Advantage Corp. All Rights Reserved.