Windows ランタイム 8 から UWP への移行

[一部の情報はリリース前の製品に関することであり、正式版がリリースされるまでに大幅に変更される可能性があります。本書に記載された情報について、Microsoft は明示または黙示を問わずいかなる保証をするものでもありません。]

ユニバーサル 8.1 アプリがある場合は、その対象が、Windows 8.1 と Windows Phone 8.1 のいずれかであるか、両方であるかにかかわらず、ソース コードとスキルがスムーズに Windows 10 に移植されることがわかるでしょう。Windows 10 では、ユニバーサル Windows プラットフォーム (UWP) を作成できます。これは、どのような種類のデバイスにでもインストールできる単一のアプリ パッケージです。Windows 10、UWP アプリ、およびこの移植ガイドで説明されているアダプティブ コードとアダプティブ UI の概念の詳しい背景については、「UWP アプリのガイド」をご覧ください。

移植を行うとき、Windows 10 では、API だけでなく、XAML マークアップ、UI フレームワークとツールの大部分を以前のプラットフォームと共有しており、そのすべてが、見慣れたものであることがわかります。以前と同様に、XAML UI フレームワークとともに使用するプログラミング言語として、C++、C#、Visual Basic のどれかを選択できます。現在のアプリの取り扱いの詳細を計画する最初のステップは、所有するアプリとプロジェクトの種類によって異なります。これについては、次のセクションで説明します。

ユニバーサル 8.1 アプリがある場合

ユニバーサル 8.1 アプリは、8.1 ユニバーサル アプリ プロジェクトから構築されます。たとえば、プロジェクトの名前が AppName_81 であるとします。これには、次のサブプロジェクトが含まれます。

  • AppName_81.Windows。これは、Windows 8.1 用アプリ パッケージを構築するプロジェクトです。
  • AppName_81.WindowsPhone。これは、Windows Phone 8.1 用アプリ パッケージを構築するプロジェクトです。
  • AppName_81.Shared。これは、他の 2 つのプロジェクトの両方で使われるソース コード、マークアップ ファイル、および他のアセットやリソースを含むプロジェクトです。

多くの場合、8.1 ユニバーサル Windows アプリは、Windows 8.1 と Windows Phone 8.1 の両方の形式で、同じコードとマークアップを使って、同じ機能を提供します。このようなアプリは、ユニバーサル デバイス ファミリを対象とする 1 つの Windows 10 アプリに移植する最適な候補です (これにより、さまざまなデバイスにインストールできます)。基本的には、共有プロジェクトのコンテンツを移植し、他の 2 つのプロジェクトには、コンテンツがほとんどないため、ほとんど使用する必要がありません。

それ以外については、Windows 8.1 と Windows Phone 8.1 のいずれかまたは両方の形式のアプリには、独自の機能が含まれます。または、同じ機能が含まれていますが、別のテクニックやテクノロジーを使用して、これらの機能を実装します。このようなアプリでは、ユニバーサル デバイス ファミリを対象とした 1 つのアプリに移植するか (この場合、アプリ自体がさまざまなデバイスに対応する必要があります)、または複数のアプリ (たとえば、デスクトップ デバイス ファミリを対象したアプリとモバイル デバイス ファミリを対象したアプリ) として移植するかを選ぶことができます。ユニバーサル 8.1 アプリの特性に基づいて、これらの選択肢のどちらが最適かを判別できます。

  1. 共有プロジェクトのコンテンツを、ユニバーサル デバイス ファミリーを対象とするアプリに移植します。該当する場合は、Windows プロジェクトと WindowsPhone プロジェクトからその他のコンテンツをすべて回収し、それを無条件にアプリで使用するか、その時点でアプリが実行されているデバイスで条件付きで使用します (後者の動作は、アダプティブと呼ばれます)。
  2. WindowsPhone プロジェクトのコンテンツを、ユニバーサル デバイス ファミリーを対象とするアプリに移植します。該当する場合は、Windows プロジェクトからその他のコンテンツをすべて回収し、それを無条件に、またはアダプティブに使用します。
  3. Windows プロジェクトのコンテンツを、ユニバーサル デバイス ファミリーを対象とするアプリに移植します。該当する場合は、WindowsPhone プロジェクトからその他のコンテンツをすべて回収し、それを無条件に、またはアダプティブに使用します。
  4. Windows プロジェクトの内容を、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーが対象のアプリに移植し、WindowsPhone プロジェクトの内容も、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーが対象のアプリに移植します。共有プロジェクトでソリューションを作成し、2 つのプロジェクト間で引き続き、ソース コード、マークアップ ファイル、およびその他の資産とリソースを共有することができます。または、さまざまなソリューションを作成しながら、リンクを使用して、同じ項目を引き続き共有することもできます。

Windows 8.1 アプリがある場合

プロジェクトを、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーを対象とするアプリに移植します。ユニバーサル デバイス ファミリーを選択しており、デスクトップ デバイス ファミリーにのみ実装されている API を呼び出す場合は、これらの呼び出しをアダプティブ コードで保護できます。

Windows Phone 8.1 アプリがある場合

プロジェクトを、ユニバーサル デバイス ファミリーまたはモバイル デバイス ファミリーを対象とするアプリに移植します。ユニバーサル デバイス ファミリーを選択しており、モバイル デバイス ファミリーにのみ実装されている API を呼び出す場合は、これらの呼び出しをアダプティブ コードで保護できます。

複数のフォーム ファクターへのアプリの対応

前のセクションで選択した選択肢によって、アプリが実行されるデバイスの種類が決まります。これは、非常に多種多様なデバイスである場合もあります。アプリをモバイル デバイス ファミリーに制限した場合でも、さまざまな画面サイズをサポートする必要があります。そのため、以前はサポートしていなかったフォーム ファクターでアプリが実行される場合は、これらのフォーム ファクターで UI をテストし、必要なすべての変更を加えて、UI が各フォーム ファクターに適切に対応するようにします。これは、移植後のタスクまたは移植の拡張目標と考えることができます。これについての実践的な例が「Bookstore2」や「QuizGame」のケース スタディに紹介されています。

レイヤーごとの移植アプローチ

ユニバーサル 8.1 アプリを UWP アプリのモデルに移植する場合、実際には、お持ちの知識と経験をすべて役立てることができます。同様に、お使いのソース コードやマークアップ、ソフトウェアのパターンのほとんどを利用することもできます。

  • ビュー。ビューは (ビュー モデルと共に)、アプリの UI を構成します。理想的にはビューは、ビュー モデルの監視可能なプロパティに対するマークアップ バインドから成ります。直接 UI 要素を操作するためにコード ビハインド ファイル内のコード用に別のパターンが不可欠です (一般的でありまた便利ですが、短期間に限定されます)。いずれのケースでも、UI マークアップと設計、そして、UI 要素を操作するために不可欠なコードについても、簡単に移植できます。
  • ビュー モデルとデータ モデル。形式的な懸念事項分離パターン (MVVM など) を取り入れていなくても、ビュー モデルおよびデータ モデルの関数を実行するコードがアプリ内に必然的に存在します。ビュー モデル コードでは、UI フレームワークの名前空間内の型を使用します。また、ビュー モデルおよびデータ モデル コードは共に、非視覚的なオペレーティング システム API および .NET Framework API を使います (データ アクセス用の API を含みます)。これらの API は、UWP アプリでも利用可能であるため、このコードの (すべてではありませんが) ほとんどが、変更なしで移植されます。
  • クラウド サービス。アプリのいくつか (おそらく、その多く) が、サービスの形式でクラウド内で実行します。クライアント デバイス上で実行する一部のアプリは、こうしたアプリに接続します。これは、クライアント部分の移植時に、変化しない可能性が最も高い分散アプリの部分です。まだ用意されていない場合、Microsoft Azure のモバイル サービスは、UWP アプリに対する適切なクラウド サービス オプションになります。これは、ライブ タイル更新のための簡単な通知から、サーバー ファームが提供する高負荷のスケーラビリティに至るまで、アプリで一連のサービスを呼び出すことができる強力なバックエンド コンポーネントを提供します。

移植前または移植中に、同様の目的を持つコードがレイヤー内に集められ、随意に散在しないように、アプリがリファクタリングによって向上するかどうかを考慮します。前述したように、アプリをレイヤーにファクタリングすることで、アプリの適合性、テスト、以降の読み取りと維持が容易になります。Model-View-ViewModel (MVVM) パターンに従うと、機能をより再利用可能にすることができます。このパターンにより、アプリのデータ部、ビジネス部、UI 部の相互の分離性が維持されます。UI 内であっても、状態と動作を別個に維持し、視覚効果から個別にテスト可能にすることができます。MVVM により、データおよびビジネス ロジックを 1 回記述すれば、UI に関係なく、それをすべてのデバイスで使うことができます。各デバイスで、ビュー モデルとビュー部品の多くを再利用できる可能性があります。

このセクションの内容

トピック 説明

プロジェクトの移植

移植プロセスを開始するとき、2 つの方法から選ぶことができます。1 つは、既にあるプロジェクト ファイル (アプリ パッケージ マニフェストなど) のコピーを編集する方法です。この方法については、ユニバーサル Windows プラットフォーム用アプリの開発に関するページに記載されているプロジェクト ファイルの更新に関する説明をご覧ください。もう 1 つのオプションは、Visual Studio で新しい Windows 10 プロジェクトを作成し、お使いのファイルをそのプロジェクトにコピーする方法です。

トラブルシューティング

この移植ガイドを最後まで読み進むことを強くお勧めしますが、まず先に進み、プロジェクトの構築と実行の段階に到達することが非常に望まれていることは理解できます。このために、一時的に重要でないコードをコメントアウトするかスタブを挿入して先に進み、後でその部分に戻って手当てすることもできます。各現象に対するトラブルシューティングと対処法を示すこのトピックの表は、次の数トピックの情報に代わるものではありませんが、この段階での作業に役立ちます。以降のトピックを読み進む中で、いつでもこの表に戻って参考にすることができます。

XAML と UI の移植

宣言型 XAML マークアップ形式での UI の定義は、ユニバーサル 8.1 アプリから ユニバーサル Windows プラットフォーム (UWP) アプリに適切に変換されます。ほとんどのマークアップには互換性があることがわかりますが、場合によっては、使っているシステムのリソース キーやカスタム テンプレートを調整する必要があります。

入出力、デバイス、アプリ モデルの移植

デバイス自体とそのセンサーに統合するコードには、ユーザーに対する入力と出力が含まれます。また、データ処理を含むこともあります。ただしこのコードは一般には、UI レイヤーまたはデータ レイヤーのいずれにも見なされません。このコードには、振動コントローラー、加速度計、ジャイロスコープ、マイク、スピーカー (音声認識と音声合成で使います)、地理位置情報、そしてタッチ、マウス、キーボード、ペンなどの入力モダリティとの統合が含まれます。

ケース スタディ: Bookstore1

このトピックでは、シンプルなユニバーサル 8.1 アプリを Windows 10 ユニバーサル Windows プラットフォーム (UWP) アプリへ移植するケース スタディについて説明します。ユニバーサル 8.1 アプリは、Windows 8.1 用のアプリ パッケージと、Windows Phone 8.1 用の別のアプリ パッケージをビルドするアプリです。Windows 10 では、さまざまなデバイスにユーザーがインストールできる単一のアプリ パッケージを作成できます。このようなアプリ パッケージの作成を、このケース スタディで取り上げます。「UWP アプリのガイド」をご覧ください。

ケース スタディ: Bookstore2

このケース スタディは、「Bookstore1」で説明されている情報に基づいて作成されています。ここでは、最初に、グループ化されたデータを SemanticZoom コントロールに表示するユニバーサル 8.1 アプリについて取り上げます。ビュー モデルでは、Author クラスの各インスタンスは、該当する著者によって書かれた書籍のグループを表します。SemanticZoom では、著者ごとにグループ化された書籍の一覧を表示したり、縮小して著者のジャンプ リストを表示したりすることができます。

ケース スタディ: QuizGame

このトピックでは、機能しているピア ツー ピアのクイズ ゲームに関する WinRT 8.1 サンプル アプリを、Windows 10 ユニバーサル Windows プラットフォーム (UWP) アプリへ移植する場合のケース スタディについて説明します。

 

関連トピック

ドキュメント

Windows ランタイム リファレンス

すべての Windows デバイスを対象としたユニバーサル Windows アプリの構築

アプリの UX の設計