Windowsフォームアプリ開発と対比しながら、Windows 10時代の新たなプラットフォーム「UWP」を使用したアプリ開発の基礎を解説する。
powered by Insider.NET
PCだけでなく、さまざまなデバイスで動くUWPアプリ*1(次の画像)。Windows 10と同時に登場したこの新しいアプリ形式に興味をお持ちの読者はきっと多いことだろう。もしも、これまでにWindows 8.xのWindowsストアアプリやWindows Phone 7.x/8.xのアプリを開発してきた経験があるのならば、UWPアプリも簡単である。しかしながら、例えば仕事でWindowsフォームの業務アプリを作っているという開発者にとっては、UWPアプリとはどこから手を付けてよいのかすら分からないという、いわば異次元の世界のように見えているのではないだろうか?
そこで本稿では、Windowsフォーム開発者が遭遇するであろう大きなギャップに焦点を当てて、UWPアプリの開発方法を紹介していこう。なお、本稿のサンプルは「Windows Store app samples」からダウンロードできる。
この前編では、UWPアプリの特徴を紹介した後、UI作成の初歩を丁寧に説明していく。UWPアプリのUIはXAML(「ザムル」と読む)で記述する。WindowsフォームでUIを作る方法とはずいぶん違っているので、Windowsフォームと対比しつつできるだけ詳しく解説しよう。
【前編】
後編では、Windowsフォーム開発者にとって大きなギャップとなるであろう課題を四つ選んで解説する予定だ。
【後編】
3. 画面にデータを表示する〜データバインド
4. 非同期!非同期!非同期!〜async/await
5. ファイルの読み書き〜セキュリティ優先設計
6. Webサービスの利用〜「クラウド型」アーキテクチャ
*1 Windows 10のユニバーサルWindowsプラットフォーム用のアプリ。「アプリ」とはプログラムのこと。「UWPアプリ」は、マイクロソフトの文書でも用語そのものやその意味に揺らぎがあるが、本稿ではWindows 10のユニバーサルWindowsプラットフォームで動作するアプリに限定する。ただし、モバイルデバイス(スマートフォン)向けWindows 10のAndroidサブシステムで動作するもの(Project Astoria)、デスクトップPC/ノートPC/タブレット(モバイルデバイスを除く)向けWindows 10用のProject Centennial(2016年リリース予定)、および全Windows 10デバイス向けの「ホストされたWebアプリ」(Project Westminster)は、本稿では除外する。
デスクトップ用とモバイル(=Windows 10を搭載したスマートフォンなど)用のUWPアプリを開発するには、以下の開発環境が必要である。簡単に言えばWindows 10とVisual Studio 2015があればよい(Windows 10 Mobileエミュレーターを使ってデバッグするにはハード/ソフトの条件が厳しくなる)。本稿では、無償のVisual Studio Community 2015を使っている。
*2 SLAT対応ハードウエアは、Windows 10 Mobileエミュレーターの実行に必要だ。ただし未対応でも、ソースコードのビルドと実機でのデバッグは可能である。SLAT対応のチェック方法はMSDNブログの「Windows Phone SDK 8.0 ダウンロードポイント と Second Level Address Translation (SLAT) 対応PCかどうかを判定する方法」を参照。なお、SLAT対応ハードウエアであっても、VM上ではエミュレーターが動作しないことがあるのでご注意願いたい。
*3 Windows 10 Mobileエミュレーターを使用しないのであれば、32bit版でもよい。
*4 開発に使うWindows 10は「開発者モード」を有効にしておくこと(後述する)。そうしないと、VS 2015のXAMLエディターがエラーになる。また、本稿の内容が適用できるのは、Windowsのライフサイクル管理の上では「Windows 10, released in July 2015」と呼ばれるリリース(通称「TH1」)、またはそれ以降である。WinVerコマンドで表示されるバージョンは「10.0 (ビルド 10240)」。UWPアプリ開発におけるデバイスファミリーのバージョン指定としては「10.0.0.0」(Package.appxmanifestファイルのTargetDeviceFamily)である。なお、Windows 10 Mobileエミュレーターを使用しないのであれば、Home版でもよい。
*5 本稿に掲載したコードを試すだけなら、無償のExpressエディションやCommunityエディションで構わない。Visual Studio Express 2015 for Windows 10(製品版)はマイクロソフトのページから無償で入手できる(ページの左側で[Visual Studio 2015]−[Express 2015 for Windows 10]と選ぶ)。Expressエディションはターゲットプラットフォームごとに製品が分かれていて紛らわしいが、UWPアプリの開発には「for Windows 10」を使う(「for Desktop」はWPF/Windowsフォーム/Win32 APIのアプリ開発用)。また、Visual Studio Community 2015(製品版)もマイクロソフトのページから無償で入手できる。なお、英語版がインストールされた場合には、Microsoft Visual Studio 2015 Language Packの日本語版を追加インストールし、[オプション]ダイアログで言語を切り替える。
*6 使用しているVS 2015に含まれていない場合は、Windows SDK for Windows 10のページからダウンロードできる。本稿の内容が適用できるのは、作成したプロジェクトのプロパティに表示されるターゲットバージョンが「10.0; ビルド 10240」またはそれ以降である。
UWPアプリの最大の特徴は、一つのソースコードから作った実行ファイルが複数種のデバイスで動作することだ。デスクトップだけで動くWindowsフォームアプリとは最も異なるところだろう。具体的には、以下に挙げるデバイスとWindows 10のエディションでUWPアプリは動作する(未発表のエディションは角かっこでくくった)。
これら全てで動くアプリを一つのソースコードで作成できるのだ。加えて、CPUアーキテクチャが同じデバイスならば、全く同じバイナリが動作するのである*8。
なお、上記のデバイスのうちで、Windowsフォームアプリを含めた従来のデスクトップPC用アプリ(コンソールプログラムも含む)が動作するのは、PC/タブレット(大)だけである。Windows 10搭載のスマートフォンやSurface Hubでも動くアプリを作りたいとなったら、選択肢はUWPアプリだけなのだ。
*7 タブレット(大)とタブレット(小)の境界は、画面サイズ8インチ前後とされている。あまり厳密な区分けではないようだ。
*8 UWPアプリは、最終的にはCPUアーキテクチャごとにネイティブコンパイルされた状態で配布される(「.NET Native」)。CPUアーキテクチャが異なれば、ソースコードは一つであってもワンバイナリにはならない。.NET Nativeについては、「特集:.NET大変革:.NET 2015とは何か (2/3)」の「.NET Native」の項を参照。なお、Windows 8.xからストアアプリ開発をやっている人のために書き添えておくと、UWPアプリでは.NET Nativeを導入したために「Any CPU」でのビルドはできなくなっている。
Windowsフォームの開発に使えるプログラミング言語はC#とVB(Visual Basic)だけであったが、UWPアプリはそれらに加えてC++/CXやJavaScriptでも開発できる。さらに、少々特殊だがObjective-Cも利用可能だ(「Project Islandwood」)。
本稿ではC#を使って解説していく。
UWPアプリは、原則としてWindowsストアで配布する*9。現在は一般向け(=誰でもアクセスできる)のストアだけだが、企業向けの「Windows Store for Business」も予告されている。Windowsストアにアプリを公開するには、(Visual StudioのライセンスやUWPアプリをテストするためのライセンスの他に)Windowsストアの開発者アカウントが必要である。
Windowsストアで配布するメリットは、次の通りだ。
*9 組織内で展開する方法として「サイドローディング」(「エンタープライズサイドローディング」ともいう)もある。また、テストするために開発者ライセンスでサイドローディングすることもできる(「開発者サイドローディング」ともいう)。開発者サイドローディングはライセンスが30日に制限されており、それを過ぎるとアプリは起動しなくなる。開発者サイドローディングの方法について、詳しくはMSDN「Windows 10 のユニバーサル Windows アプリをパッケージ化する」を参照。
*10 マイクロソフトのストアは、2009年の秋にスタートしたWindows Marketplace for Mobileから数えると、ほぼ6年の実績がある。その間、大きなマルウエア騒ぎがなかったのは皆さんご承知の通りだ(全くのゼロではないし、自由にアプリをインストールできたWindows Mobileではマイクロソフトのストア以外からダウンロードしたアプリに金銭被害を及ぼすマルウエアが仕込まれていたこともあった)。なお、マルウエアとフェイクアプリ(偽物)は別のものである。フェイクアプリ対策にはマイクロソフトも苦労しているようである。
Windowsフォームに限らず従来のデスクトップPC用のアプリは、複雑なものになってくるとインストール時にシステムDLLを置き換えたり、レジストリにたくさんのデータを書き込んだりする。そのようなアプリを多数インストールすると、レジストリの肥大化によるレスポンス低下や、DLLの不整合による動作異常を引き起こしてしまう。これを「Windowsが腐る」と表現することがある。
UWPアプリでは、配布するDLLはアプリごとに全て実行ファイルと同じフォルダーに格納される。また、インストール時/実行時にレジストリへデータを書き込むこともできない。そのため「Windowsが腐る」心配をしなくてよいのである。この性質は業務システムにも有用なものだと筆者は考えている。
Copyright© Digital Advantage Corp. All Rights Reserved.