Windows ランタイム 8.x から UWP への移行Move from Windows Runtime 8.x to UWP

8.1 ユニバーサル アプリがある場合、Windows 8.1、Windows Phone 8.1、またはその両方の対象か —、ソース コードとスキルがポートをスムーズに Windows 10 に見つかり、します。If you have a Universal 8.1 app—whether it's targeting Windows 8.1, Windows Phone 8.1, or both—then you'll find that your source code and skills will port smoothly to Windows 10. Windows 10 で、ユニバーサル Windows プラットフォーム (UWP) アプリは、これは、顧客がすべての種類のデバイスにインストールできる 1 つのアプリ パッケージを作成できます。With Windows 10, you can create a Universal Windows Platform (UWP) app, which is a single app package that your customers can install onto every kind of device. Windows 10、UWP アプリ、およびアダプティブ コードとこの移植のガイドで説明アダプティブ UI の概念の詳細については、次を参照してください。 UWP アプリに関するガイドします。For more background on Windows 10, UWP apps, and the concepts of adaptive code and adaptive UI that we'll mention in this porting guide, see Guide to UWP apps.

、移植するときに、Windows 10 までのプラットフォームだけでなく XAML マークアップ、UI フレームワーク、ツールと Api の大半を共有して、していただけることを検索しますすべてここについて理解します。While porting, you'll find that Windows 10 shares the majority of APIs with the previous platforms, as well as XAML markup, UI framework, and tooling, and you'll find it all reassuringly familiar. 以前と同様に、XAML UI フレームワークとともに使用するプログラミング言語として、C++、C#、Visual Basic のどれかを選択できます。Just as before, you can still choose between C++, C#, and Visual Basic for the programming language to use along with the XAML UI framework. 現在のアプリの取り扱いの詳細を計画する最初のステップは、所有するアプリとプロジェクトの種類によって異なります。Your first steps in planning exactly what to do with your current app or apps will depend on the kinds of apps and projects you have. これについては、次のセクションで説明します。That's explained in the following sections.

ユニバーサル 8.1 アプリがある場合If you have a Universal 8.1 app

ユニバーサル 8.1 アプリは、8.1 ユニバーサル アプリ プロジェクトから構築されます。A Universal 8.1 app is built from an 8.1 Universal App project. たとえば、プロジェクトの名前が AppName_81。Let's say the project's name is AppName_81. これには、次のサブプロジェクトが含まれます。It contains these sub-projects.

  • AppName_81.Windows します。AppName_81.Windows. これは、Windows 8.1 のアプリ パッケージをビルドするプロジェクトです。This is the project that builds the app package for Windows 8.1.
  • AppName_81.WindowsPhone します。AppName_81.WindowsPhone. これは、Windows Phone 8.1 用アプリ パッケージを構築するプロジェクトです。This is the project that builds the app package for Windows Phone 8.1.
  • AppName_81.Shared します。AppName_81.Shared. これは、他の 2 つのプロジェクトの両方で使われるソース コード、マークアップ ファイル、および他のアセットやリソースを含むプロジェクトです。This is the project that contains source code, markup files, and other assets and resources that are used by both of the other two projects.

8.1 のユニバーサル Windows アプリが同じ機能を提供する多くの場合、— あり、同じコードとマークアップを使用して、Windows 8.1 と Windows Phone 8.1 の両方のフォームで。Often, an 8.1 Universal Windows app offers the same features—and does so using the same code and markup—in both its Windows 8.1 and Windows Phone 8.1 forms. ように、アプリは、最適な候補をユニバーサル デバイス ファミリを対象とする (および最も広範なデバイスにインストールできる) 1 つの Windows 10 アプリを移植するためです。An app like that is an ideal candidate for porting to a single Windows 10 app that targets the Universal device family (and that you can install onto the widest range of devices). 基本的には、共有プロジェクトのコンテンツを移植し、他の 2 つのプロジェクトには、コンテンツがほとんどないため、ほとんど使用する必要がありません。You'll essentially port the contents of the Shared project and you'll need to use little or nothing from the other two projects because there'll be little or nothing in them.

それ以外の場合、Windows 8.1、またはアプリの Windows Phone 8.1 のフォームには、独自の機能が含まれています。Other times, the Windows 8.1 and/or the Windows Phone 8.1 form of the app contain unique features. または、同じ機能が含まれていますが、別のテクニックやテクノロジを使用して、これらの機能を実装します。Or they contain the same features but they implement those features using different techniques or different technology. このようなアプリでは、ユニバーサル デバイス ファミリを対象とした 1 つのアプリに移植するか (この場合、アプリ自体がさまざまなデバイスに対応する必要があります)、または複数のアプリ (たとえば、デスクトップ デバイス ファミリを対象としたアプリとモバイル デバイス ファミリを対象としたアプリ) として移植するかを選ぶことができます。With an app like that, you can choose to port it to a single app that targets the Universal device family (in which case you will want the app to adapt itself to different devices), or you can choose to port it as more than one app, perhaps one targeting the Desktop device family and another targeting the Mobile device family. ユニバーサル 8.1 アプリの特性に基づいて、これらの選択肢のどちらが最適かを判別できます。The nature of the Universal 8.1 app will determine which of these options is best for your case.

  1. 共有プロジェクトのコンテンツを、ユニバーサル デバイス ファミリを対象とするアプリに移植します。Port the contents of the Shared project to an app targeting the Universal device family. 該当する場合は、Windows プロジェクトと WindowsPhone プロジェクトからその他のコンテンツをすべて回収し、それを無条件にアプリで使用するか、その時点でアプリが実行されているデバイスで条件付きで使用します (後者の動作は、アダプティブと呼ばれます)。If applicable, salvage any other content from the Windows and WindowsPhone projects, and use that content either unconditionally in the app or conditional on the device that your app happens to be running on at the time (the latter behavior is known as adaptive).
  2. WindowsPhone プロジェクトのコンテンツを、ユニバーサル デバイス ファミリーを対象とするアプリに移植します。Port the contents of the WindowsPhone project to an app targeting the Universal device family. 該当する場合は、Windows プロジェクトからその他のコンテンツをすべて回収し、それを無条件に、またはアダプティブに使用します。If applicable, salvage any other content from the Windows project, using it either unconditionally or adaptively.
  3. Windows プロジェクトのコンテンツを、ユニバーサル デバイス ファミリーを対象とするアプリに移植します。Port the contents of the Windows project to an app targeting the Universal device family. 該当する場合は、WindowsPhone プロジェクトからその他のコンテンツをすべて回収し、それを無条件に、またはアダプティブに使用します。If applicable, salvage any other content from the WindowsPhone project, using it either unconditionally or adaptively.
  4. Windows プロジェクトの内容を、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーが対象のアプリに移植し、WindowsPhone プロジェクトの内容も、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーが対象のアプリに移植します。Port the contents of the Windows project to an app targeting the Universal or the Desktop device family and also port the contents of the WindowsPhone project to an app targeting the Universal or the Mobile device family. 共有プロジェクトでソリューションを作成し、2 つのプロジェクト間で引き続き、ソース コード、マークアップ ファイル、およびその他の資産とリソースを共有することができます。You can create a solution with a Shared project, and continue to share source code, markup files, and other assets and resources between the two projects. または、さまざまなソリューションを作成しながら、リンクを使用して、同じ項目を引き続き共有することもできます。Or, you can create different solutions and still share the same items using links.

Windows 8.1 アプリがある場合If you have a Windows 8.1 app

プロジェクトを、ユニバーサル デバイス ファミリーまたはデスクトップ デバイス ファミリーを対象とするアプリに移植します。Port the project to an app targeting the Universal or the Desktop device family. ユニバーサル デバイス ファミリを選択しており、デスクトップ デバイス ファミリにのみ実装されている API を呼び出す場合は、これらの呼び出しをアダプティブ コードで保護できます。If you choose the Universal device family, and your app calls APIs that are implemented only in the Desktop device family, then you can guard those calls with adaptive code.

Windows Phone 8.1 アプリがある場合If you have a Windows Phone 8.1 app

プロジェクトを、ユニバーサル デバイス ファミリーまたはモバイル デバイス ファミリーを対象とするアプリに移植します。Port the project to an app targeting the Universal or the Mobile device family. ユニバーサル デバイス ファミリを選択しており、モバイル デバイス ファミリにのみ実装されている API を呼び出す場合は、これらの呼び出しをアダプティブ コードで保護できます。If you choose the Universal device family, and your app calls APIs that are implemented only in the Mobile device family, then you can guard those calls with adaptive code.

複数のフォーム ファクターへのアプリの対応Adapting your app to multiple form factors

前のセクションで選んだ選択肢によって、アプリが実行されるデバイスの種類が決まります。場合によっては、非常に多種多様なデバイスになることがあります。The option you choose from the previous sections will determine the range of devices that your app or apps will run on, and that may well be a very wide range of devices. アプリをモバイル デバイス ファミリーに制限した場合でも、さまざまな画面サイズをサポートする必要があります。Even limiting your app to the Mobile device family still leaves you with a wide range of screen sizes to support. そのため、以前はサポートしていなかったフォーム ファクターでアプリが実行される場合は、これらのフォーム ファクターで UI をテストし、必要なすべての変更を加えて、UI が各フォーム ファクターに適切に対応するようにします。So, if your app will be running on form factors that it didn't formerly support, then test your UI on those form factors and make any change necessary, so that your UI adapts appropriately on each. これは、移植後のタスクまたは移植の拡張目標と考えることができます。これについての実践的な例が「Bookstore2」や「QuizGame」のケース スタディに紹介されています。You can think of this is a post-porting task, or a porting stretch-goal, and there are some examples of it in practice in the Bookstore2 and QuizGame case studies.

レイヤーごとの移植アプローチApproaching porting layer-by-layer

ユニバーサル 8.1 アプリを UWP アプリのモデルに移植する場合、実際には、お持ちの知識と経験をすべて役立てることができます。同様に、お使いのソース コードやマークアップ、ソフトウェアのパターンのほとんどを利用することもできます。When porting a Universal 8.1 app to the model for UWP apps, virtually all of your knowledge and experience will transfer, as will most of your source code and markup and the software patterns you use.

  • ビューView. ビューは (ビュー モデルと共に)、アプリの UI を構成します。The view (together with the view model) makes up your app's UI. 理想的にはビューは、ビュー モデルの監視可能なプロパティに対するマークアップ バインドから成ります。Ideally, the view consists of markup bound to observable properties of a view model. 直接 UI 要素を操作するためにコード ビハインド ファイル内のコード用に別のパターンが不可欠です (一般的でありまた便利ですが、短期間に限定されます)。Another pattern (common and convenient, but only in the short term) is for imperative code in a code-behind file to directly manipulate UI elements. いずれの場合でも、UI マークアップと設計、および UI 要素を操作するための命令型コードについても、移植は簡単に実行できます。In either case, your UI markup and design—and even imperative code that manipulates UI elements—will be straightforward to port.
  • ビュー モデルとデータ モデルView models and data models. 形式的な懸念事項分離パターン (MVVM など) を取り入れていなくても、ビュー モデルおよびデータ モデルの関数を実行するコードがアプリ内に必然的に存在します。Even if you don't formally embrace separation-of-concerns patterns (such as MVVM), there is inevitably code present in your app that performs the function of view model and data model. ビュー モデル コードでは、UI フレームワークの名前空間内の型を使います。View model code makes use of types in the UI framework namespaces. また、ビュー モデルおよびデータ モデル コードは共に、非視覚的なオペレーティング システム API および .NET Framework API を使います (データ アクセス用の API を含みます)。Both view model and data model code also use non-visual operating system and .NET Framework APIs (including APIs for data-access). これらの API は、UWP アプリでも利用可能であるため、このコードの (すべてではありませんが) ほとんどが、変更なしで移植されます。And those APIs are available for UWP apps, too, so most if not all of this code will port without change.
  • クラウド サービスCloud services. アプリのいくつか (おそらく、その多く) が、サービスの形式でクラウド内で実行されます。It's likely that some of your app (perhaps a great deal of it) runs in the cloud in the form of services. クライアント デバイス上で実行する一部のアプリは、こうしたアプリに接続します。The part of the app running on the client device connects to those. これは、クライアント部分の移植時に、変化しない可能性が最も高い分散アプリの部分です。This is the part of a distributed app most likely to remain unchanged when porting the client part. まだ用意されていない場合、Microsoft Azure のモバイル サービスは、UWP アプリに対する適切なクラウド サービス オプションになります。これは、ライブ タイル更新のための簡単な通知から、サーバー ファームが提供する高負荷のスケーラビリティに至るまで、アプリで一連のサービスを呼び出すことができる強力なバックエンド コンポーネントを提供します。If you don't already have one, a good cloud services option for your UWP app is Microsoft Azure Mobile Services, which provides powerful back-end components that your app can call for services ranging from simple notifications for live tiles updates up to the kind of heavy-lifting scalability a server farm can provide.

移植前または移植中に、同様の目的を持つコードがレイヤー内に集められ、随意に散在しないように、アプリがリファクタリングによって向上するかどうかを考慮します。Before or during the porting, consider whether your app could be improved by refactoring it so that code with a similar purpose is gathered together in layers and not scattered arbitrarily. 前述したように、アプリをレイヤーにファクタリングすることで、アプリの適合性、テスト、以降の読み取りと維持が容易になります。Factoring your app into layers like those described above makes it easier for you to make your app correct, to test it, and then subsequently to read and maintain it. Model-View-ViewModel (MVVM) パターンに従うと、機能をより再利用可能にすることができます。You can make functionality more reusable by following the Model-View-ViewModel (MVVM) pattern. このパターンにより、アプリのデータ部、ビジネス部、UI 部の相互の分離性が維持されます。This pattern keeps the data, business, and UI parts of your app separate from one another. UI 内であっても、状態と動作を別個に維持し、視覚効果から個別にテスト可能にすることができます。Even within the UI it can keep state and behavior separate, and separately testable, from the visuals. MVVM により、データおよびビジネス ロジックを 1 回記述すれば、UI に関係なく、それをすべてのデバイスで使うことができます。With MVVM, you can write your data and business logic once and use it on all devices no matter the UI. 各デバイスで、ビュー モデルとビュー部品の多くを再利用できる可能性があります。It's likely that you'll be able to re-use much of the view model and view parts across devices, too.

トピックTopic 説明Description
プロジェクトの移植Porting the project 移植プロセスを開始するとき、2 つの方法から選ぶことができます。You have two options when you begin the porting process. 1 つは、既にあるプロジェクト ファイル (アプリ パッケージ マニフェストなど) のコピーを編集する方法です。この方法については、「アプリをユニバーサル Windows プラットフォーム (UWP) へ移行する」に記載されているプロジェクト ファイルの更新に関する説明をご覧ください。One is to edit a copy of your existing project files, including the app package manifest (for that option, see the info about updating your project files in Migrate apps to the Universal Windows Platform (UWP)). もう 1 つの方法は、Visual Studio で新しい Windows 10 プロジェクトを作成し、お使いのファイルをそのプロジェクトにコピーする方法です。The other option is to create a new Windows 10 project in Visual Studio and copy your files into it.
トラブルシューティングTroubleshooting この移植ガイドは最後まで読むことを強くお勧めしますが、早く先へ進んで、プロジェクトのビルドと実行の段階まで到達したいと思われるのも無理のないことです。We highly recommend reading to the end of this porting guide, but we also understand that you're eager to forge ahead and get to the stage where your project builds and runs. このために、重要でないコードに対してコメント アウトやスタブの挿入を行って一時的に先に進み、後でその部分に戻って対応することもできます。To that end, you can make temporary progress by commenting or stubbing out any non-essential code, and then returning to pay off that debt later. このトピックには、トラブルシューティングの現象とその対処法を示す表が記載されており、以降のいくつかのトピックに示されている情報に代わるものではありませんが、この段階での作業に役立ちます。The table of troubleshooting symptoms and remedies in this topic may be helpful to you at this stage, although it's not a substitute for reading the next few topics. 以降のトピックを読み進む中で、いつでもこの表に戻って参考にすることができます。You can always refer back to the table as you progress through the later topics.
XAML と UI の移植Porting XAML and UI 宣言型 XAML マークアップ形式での UI の定義は、ユニバーサル 8.1 アプリから UWP アプリに適切に変換されます。The practice of defining UI in the form of declarative XAML markup translates extremely well from Universal 8.1 apps to UWP apps. ほとんどのマークアップには互換性がありますが、場合によっては、使っているシステムのリソース キーやカスタム テンプレートを調整する必要があります。You'll find that most of your markup is compatible, although you may need to make some adjustments to the system Resource keys or custom templates that you're using.
I/O、デバイス、およびアプリのモデルの移植Porting for I/O, device, and app model デバイス自体とそのセンサーに統合するコードには、ユーザーに対する入力と出力が含まれます。Code that integrates with the device itself and its sensors involves input from, and output to, the user. また、データ処理を含むこともあります。It can also involve processing data. ただしこのコードは一般には、UI レイヤーまたはデータ レイヤーのいずれにも見なされません。But, this code is not generally thought of as either the UI layer or the data layer. このコードには、振動コントローラー、加速度計、ジャイロスコープ、マイクとスピーカー (音声認識と音声合成で使います)、地理位置情報、およびタッチ、マウス、キーボード、ペンなどの入力モダリティとの統合が含まれます。This code includes integration with the vibration controller, accelerometer, gyroscope, microphone and speaker (which intersect with speech recognition and synthesis), (geo)location, and input modalities such as touch, mouse, keyboard, and pen.
ケース スタディ:Bookstore1Case study: Bookstore1 このトピックでは、シンプルなユニバーサル 8.1 アプリを Windows 10 UWP アプリへ移植するケース スタディについて説明します。This topic presents a case study of porting a very simple Universal 8.1 app to a Windows 10 UWP app. ユニバーサル 8.1 アプリは、Windows 8.1 用のアプリ パッケージと、Windows Phone 8.1 用の別のアプリ パッケージをビルドするアプリです。A Universal 8.1 app is one that builds one app package for Windows 8.1, and a different app package for Windows Phone 8.1. Windows 10 では、さまざまなデバイスにユーザーがインストールできる単一のアプリ パッケージを作成できます。このようなアプリ パッケージの作成を、このケース スタディで取り上げます。With Windows 10, you can create a single app package that your customers can install onto a wide range of devices, and that's what we'll do in this case study. UWP アプリのガイド」をご覧ください。See Guide to UWP apps.
ケース スタディ:Bookstore2Case study: Bookstore2 このケース スタディは、SemanticZoom コントロールに関する情報に基づいて作成されています。This case study—which builds on the info given in SemanticZoom control. ビュー モデルでは、Author クラスの各インスタンスが該当する著者によって書かれた書籍のグループを表します。SemanticZoom では、著者ごとにグループ化された書籍の一覧を表示したり、縮小して著者のジャンプ リストを表示したりすることができます。In the view model, each instance of the class Author represents the group of the books written by that author, and in the SemanticZoom, we can either view the list of books grouped by author or we can zoom out to see a jump list of authors.
ケース スタディ:QuizGameCase study: QuizGame このトピックでは、機能しているピア ツー ピアのクイズ ゲームに関する WinRT 8.1 サンプル アプリを、Windows 10 UWP アプリへ移植する場合のケース スタディについて説明します。This topic presents a case study of porting a functioning peer-to-peer quiz game WinRT 8.1 sample app to a Windows 10 UWP app.

ドキュメントDocumentation