ユニバーサル Windows プラットフォーム (UWP) アプリとは
UWP は、Windows 用クライアント アプリケーションを作成するさまざまな方法の 1 つです。
Note
Windows アプリの開発を開始する場合は、UWP ではなく、Windows アプリ SDKと WinUI の使用を検討することをお勧めします。 UWP は引き続きサポートされていますが、積極的な開発は行われていません。 詳細については、「Windowsアプリの開発を開始する」を参照してください。
Windows アプリの作成を開始するために必要なツールをダウンロードするために、「Windows App SDK 用のツールをインストールする」を参照し、それから最初のアプリを作成します。
UWP が Microsoft 開発ストーリーの中で占める位置
UWP は、Windows 10 デバイスと Windows 11 デバイスで実行されるアプリを作成するための 1 つの選択肢であり、他のプラットフォームと組み合わせることができます。 UWP アプリでは、Win32 API や .NET クラスを使用できます (UWP アプリ用の API セット、UWP アプリ用の DLL、UWP アプリ用の .NET に関する各記事をご覧ください)。
UWP アプリの機能
UWP アプリには次のような特長があります。
- 高いセキュリティ。UWP アプリはアクセスするデバイス リソースとデータを宣言します。 ユーザーは、そのアクセスを承認する必要があります。
- Windows を実行するすべてのデバイスで共通の API を使用できます。
- デバイス固有の機能を使用して、異なるデバイスの画面サイズ、解像度、DPI に合わせて UI を調整することができます。
- Windows 10 または Windows 11 を実行するすべてのデバイス (または指定したデバイスのみ) で Microsoft Store から入手できます。 Microsoft Store では、アプリで収益を上げるいくつかの方法を提供します。
- コンピューターへのリスクや "コンピューターの劣化" を気にせずにインストールおよびアンインストールできます。
- 魅力的。ライブ タイル、プッシュ通知、Windows タイムラインや Cortana の前回終了した位置から再開を利用したユーザー アクティビティによって、ユーザーのエンゲージメントを高めます。
- C#、C++、Visual Basic、JavaScript でプログラミング可能です。 UI には、WinUI、XAML、HTML、または DirectX を使用します。
これらをさらに詳しく見てみましょう。
セキュリテイ保護
UWP アプリでは、マイク、位置情報、Web カメラ、USB デバイス、ファイルなどへのアクセスに必要なデバイスの機能をマニフェストで宣言します。 アプリに機能が付与される前に、ユーザーがそのアクセスを確認して承認する必要があります。
すべてのデバイスに共通の API セット
Windows 10 ではユニバーサル Windows プラットフォーム (UWP) が導入され、Windows を実行する各デバイスで共通のアプリ プラットフォームが提供されます。 UWP のコア API は、すべての Windows デバイスで同じです。 アプリがコア API のみを使う場合は、対象となるのがデスクトップ PC、Xbox、Mixed Reality ヘッドセットなどのいずれかに関係なく、そのアプリはどの Windows デバイスでも動作します。
C++/WinRT で記述された UWP アプリは UWP の一部である Win32 API にアクセスします。 これらの Win32 API は、すべての Windows デバイスによって実装されます。
拡張 SDK が特定のデバイスの種類に固有の機能を公開する
ユニバーサル API を対象としている場合、アプリは Windows 10 以降を実行するすべてのデバイスで実行できます。 ただし、UWP アプリでデバイス固有の API を利用したい場合は、そうすることもできます。
拡張 SDK では、さまざまなデバイスに特化した API を呼び出すことができます。 たとえば、UWP アプリで IoT デバイスをターゲットにしている場合、IoT デバイスに固有の機能をターゲットにしたプロジェクトに IoT 拡張 SDK を追加できます。 拡張 SDK の追加に関する詳細については、「拡張 SDK を使用するプログラミング」の拡張 SDK のセクションを参照してください。
特定の種類のデバイスでのみ実行されることを想定し、Microsoft Store からの配布をその種類のデバイスのみに制限するようにアプリを記述することができます。 または、実行時に API の存在を条件付きでテストし、結果に応じてアプリの動作を調整できます。 詳細については、「拡張 SDK を使用するプログラミング」のコードの記述のセクションを参照してください。
アダプティブ コントロールおよび入力
UI 要素では、そのレイアウトやスケールを調整して、アプリが実行されている画面のサイズや DPI に対応します。 UWP アプリは、キーボード、マウス、タッチ、ペン、ゲーム コントローラなど、複数の種類の入力で適切に動作します。 特定の画面サイズやデバイスに合わせて UI をさらに調整する必要がある場合は、新しく追加されたレイアウト パネルとツールを使用して、アプリが実行されるさまざまなデバイスやフォーム ファクターに合わせて調整可能な UI を設計できます。
Windows では、UI を次の機能を備えた複数のデバイスを対象としたものにすることができます。
- UI をデバイスの画面の解像度に合わせて最適化するために役立つユニバーサル コントロールとレイアウト パネル。 たとえば、ボタンやスライダーなどのコントロールは、デバイスの画面サイズや DPI 密度に合わせて自動的に調整されます。 レイアウト パネルは、画面のサイズに基づいてコンテンツのレイアウトを調整するのに役立ちます。 デバイス間での解像度と DPI の相違を調整するアダプティブ スケーリング。
- 一般的な入力処理によって、タッチ、ペン、マウス、キーボード、またはゲーム コントローラを介して入力を受け取ることができます。
- さまざまな画面の解像度に合わせて変化する UI の設計に役立つツール。
アプリの UI の一部はデバイス間で自動的に対応します。 ただし、アプリのユーザー エクスペリエンスの設計では、アプリが実行されているデバイスへの対応が必要になる場合があります。 たとえば、フォト アプリが小型のハンドヘルド デバイスで実行されている場合、UI を片手での使用に適するように調整できます。 フォト アプリがデスクトップ コンピューターで実行されている場合、UI は広い画面スペースを利用するように調整する必要があります。
1 つのストアですべてのデバイスに対応する
統一されたアプリ ストアによって、PC、タブレット、Xbox、HoloLens、Surface Hub、IoT (モノのインターネット) デバイス などの Windows デバイスでアプリを入手できるようになります。 開発者は、アプリをストアに提出し、すべての種類のデバイスまたは選択した種類のデバイス向けに販売できます。 Windows デバイス向けのすべてのアプリを 1 か所で提出、管理できます。 UWP の機能を使って最新化し、Microsoft Store での販売を希望する C++ デスクトップ アプリがある場合も 問題ありません。
UWP アプリは、詳細なテレメトリや分析のために Application Insights に統合されています。これは、ユーザーを理解し、アプリの品質を向上させるために欠かせないツールです。
UWP アプリは、MSIX を使用してパッケージ化し、Microsoft Store またはその他の方法で配布することができます。 MSIX を使用すると、アプリがどのような方法で配布されても、アプリを更新できます。「ストアに公開されていないアプリ パッケージをコードから更新する」をご覧ください。
アプリの収益の獲得
アプリを収益化する方法を選択できます。 アプリで収益を得る方法は多数あります。 必要なのは、ニーズに合った最適な方法を選ぶことだけです。たとえば、次のような方法があります。
- 有料のダウンロードは最も簡単な方法です。 必要な作業は価格の指定だけです。
- 試用版を使うとユーザーは購入前にアプリを試すことができ、従来の "フリーミアム" オプションよりも目につきやすく、コンバージョンも簡単です。
- セール価格はユーザーに対して動機付けとなります。
- アプリ内購入。
関連するリアルタイム情報をユーザーに表示して繰り返し集客する
UWP アプリに対するユーザーのエンゲージメントを維持するためのさまざまな方法があります。
- ライブ タイルとロック画面タイルでは、アプリからのコンテキストに関連したタイムリーな情報をひとめでわかるように表示します。
- プッシュ通知は、ユーザーがリアルタイムの通知に注目できるようにします。
- ユーザー アクティビティでは、異なるデバイスでも、アプリで前回中断したところから作業を始めることができます。
- アクション センターでは、アプリの通知を整理できます。
- バックグラウンドの実行とトリガーにより、ユーザーが必要とするときにアプリが有効になります。
- アプリで音声と Bluetooth LE デバイスを使うと、ユーザーはそれらのデバイスを中心に広がる世界とやり取りすることができます。
- 音声コマンド機能をアプリに追加するには、Cortana を統合します。
使い慣れた言語の使用
UWP アプリでは、オペレーティング システムによって提供されるネイティブな API である Windows ランタイムを使います。 この API は C++ で実装され、C#、Visual Basic、C++、JavaScript でサポートされます。 UWP アプリを作成するための一部のオプションを次に示します。
- XAML UI と、C#、VB、または C++
- DirectX UI と C++
- JavaScript と HTML
- WinUI
役に立つリンク
準備
「準備」を確認し、アプリの作成を始めるために必要なツールをダウンロードしてから、初めてのアプリを作成してください。
アプリをデザインする
Microsoft デザイン システムは Fluent と呼ばれます。 Fluent Design System は、すべての種類の Windows デバイスで適切に動作するアプリを作成するためのベスト プラクティスと組み合わされた、UWP 機能のセットです。 Fluent エクスペリエンスは、タブレット、ノート PC、デスクトップ、テレビから、仮想現実デバイスまで、さまざまなデバイスに対応し、自然に操作できます。 Fluent Design の概要については、UWP アプリ向けの Fluent Design System に関するページを参照してください。
適切な設計とは、アプリの外観や機能に加えて、ユーザーによるアプリの操作方法を決定するプロセスです。 ユーザー エクスペリエンスは、ユーザーがアプリでどの程度満足するかを判断する場合に大きな役割を果たします。そのため、この手順は必ず守ってください。 設計の基本に関するページでは、ユニバーサル Windows アプリの設計を紹介します。 ターゲットにするすべての異なるフォーム ファクターでアプリを使用する際の操作エクスペリエンスを検討するために役立つ、デバイスの基本情報に関するページをご覧ください。
さまざまなデバイスでの操作に加えて、複数のデバイスで動作する利点を取り入れるようにアプリの計画を行います。 次に、例を示します。
モバイル、小型画面デバイス、大型画面デバイスに対応するには、「UWP アプリのナビゲーション デザインの基本」を使用してワークフローをデザインします。 さまざまな画面サイズと解像度に対応するようにユーザー インターフェイスをレイアウトします。
複数の入力の種類の対処方法を検討してください。 ユーザーが Cortana、音声認識、タッチ操作、タッチ キーボードなどを使ってアプリを操作する方法については、操作のガイドラインに関するページをご覧ください。 または、従来の操作エクスペリエンスの詳細については、テキストとテキスト入力のガイドラインに関するページを参照してください。
サービスの追加
- デバイス間の同期には Azure クラウド サービスを使います。
- アプリのエクスペリエンスをサポートするには、Web サービスに接続する方法を参照してください。
- プッシュ通知とアプリ内購入を計画に盛り込みます。 これらの機能はさまざまなデバイスで動作する必要があります。
アプリをストアに提出する
パートナー センターを使うと、Windows デバイス向けのすべてのアプリの管理と申請を 1 か所で行うことができます。 Microsoft Store にアプリの公開を申請する方法については、「Windows アプリとゲームを公開する」をご覧ください。
新しい機能が追加されたことで、より高度な管理が可能になった一方、プロセスは簡単になりました。 また、詳しい分析レポートに加えて、支払いの詳細も得られるようになりました。いずれもアプリの宣伝と顧客エンゲージメントの獲得に役立ちます。
別の入門資料については、「Windows 10 デバイス向け Windows アプリのビルドの概要」をご覧ください。
高度なトピック
- アプリでのユーザー アクティビティが Windows タイムラインと Cortana の 前回終了した位置から再開機能に表示されるようにするには、ユーザー アクティビティの使用方法に関するページを参照してください。
- UWP アプリのタイル、バッジ、通知の使用方法に関するページを参照してください。
- UWP アプリで利用可能な Win32 API の完全な一覧については、UWP アプリの API セットおよび UWP アプリの DLL に関するページをご覧ください。
- .NET UWP アプリの作成の概要については、.NET でのユニバーサル Windows アプリに関するページを参照してください。
- UWP アプリで使用できる .NET 型の一覧については、UWP アプリ用 .NET に関するページを参照してください。
- .NET Native によるアプリのコンパイル
- デスクトップ ブリッジを使用して、既存のデスクトップ アプリに Windows ユーザー向けの最新のエクスペリエンスを追加し、Microsoft Store で配布する方法について説明します。
ユニバーサル Windows プラットフォームと Windows ランタイム API の関連性
ユニバーサル Windows プラットフォーム (UWP) アプリをビルドする場合は、"ユニバーサル Windows プラットフォーム (UWP)" と "Windows ランタイム (WinRT)" をほぼ同義と考えると便利です。 ただし、テクノロジの実体を明らかにして、この 2 つの概念の違いを確認しておくことも可能です。 この最後のセクションは、この点に興味があるユーザーを対象としています。
Windows ランタイム (WinRT) API は、Windows API が進化したものです。 元々 Windows は、フラットな C スタイルの Win32 API でプログラミングされました。 そこに追加されたのが COM API です (主な例は DirectX)。 Windows フォーム、WPF、.NET、およびマネージ言語は、Windows アプリの記述方法や API テクノロジの特徴がそれぞれに異なっていました。 COM の次の段階というのが Windows ランタイムの実体です。 実際のアプリケーション バイナリ インターフェイス (ABI) レイヤーで、COM におけるそのルーツが可視化されます。 ただし、Windows ランタイムはさまざまなプログラミング言語から呼び出すことができるように設計されています。 また、それぞれの言語にとってきわめて自然な方法で呼び出すことができます。 このために、Windows ランタイムは言語プロジェクションと呼ばれる仕組みを介してアクセスできるようになっています。 Windows ランタイムの言語プロジェクションは、C#、Visual Basic、標準 C++、JavaScript などに対応しています。 さらに、適切にパッケージ化すれば (「デスクトップ ブリッジ」を参照)、次のような広範囲の言語モデルのいずれかでビルドされたアプリから WinRT API を呼び出すことができます:Win32、.NET、WinForms、WPF。
もちろん、UWP アプリから WinRT API を呼び出すこともできます。 UWP は、Windows ランタイム上に構築されたアプリケーション モデルです。 技術的な UWP アプリケーション モデルのベースは CoreApplication ですが、選択したプログラミング言語によっては、そうした詳細を意識することはありません。 このトピックで説明したように、提供する価値という観点で考えると、UWP は、必要に応じて Microsoft Store に公開でき、かつさまざまなデバイス フォーム ファクターで稼働する単一バイナリを作成するのに適しています。 UWP アプリが対応するデバイスの範囲は、アプリで呼び出す対象として限定した Windows ランタイム API のサブセット、または条件付きで呼び出す Windows ランタイム API のサブセットによって異なります。
Windows ランタイム API の基盤であるテクノロジと、ユニバーサル Windows プラットフォームのメカニズムおよびビジネス価値の違いを、このセクションで理解していただけたら幸いです。