ソース コンテンツ グループ マップの作成と変換
ストリーミング インストール用にアプリを準備するには、コンテンツ グループ マップを作成する必要があります。 この記事は、コンテンツ グループ マップの作成と変換の詳細について説明しながら、ヒントやテクニックを提供することで役立ちます。
ソース コンテンツのグループ マップの作成
SourceAppxContentGroupMap.xml
ファイルを作成したら、Visual Studio または「MakeAppx.exe」ツールのいずれかを使用してこのファイルを最終バージョンの AppxContentGroupMap.xml
に変換する必要があります。 AppxContentGroupMap.xml
を最初から作成して手順を 1 つスキップすることも可能ですが、ワイルドカードは AppxContentGroupMap.xml
(とても役立ちます)に認められていないため、SourceAppxContentGroupMap.xml
を作成して変換する(しかも一般的に簡単です)ことを推奨します。
アプリ ストリーミング インストールが適した簡単なシナリオを見てみましょう。
たとえば、作成したゲームの最終的なアプリのサイズが 100 GB を超えているとします。 このサイズであれば Microsoft Store からダウンロードする際に長い時間がかかって不便です。 アプリ ストリーミング インストールを使用する場合は、アプリのファイルがダウンロードされる順序を指定できます。 最初に重要なファイルをダウンロードするように Store に指示することにより、ユーザーはアプリに早く参加できるようになりますが、その他の重要ではないファイルはバックグラウンドでダウンロードされます。
Note
アプリ ストリーミング インストールの使用には、アプリのファイル構成が大きく影響します。 アプリのファイル分割を容易にするには、アプリ ストリーミング インストールに合わせてアプリのコンテンツ レイアウトをできるだけ早く検討するようお勧めします。
まず、SourceAppxContentGroupMap.xml
ファイルを作成します。
詳細を確認する前に、単純で完全な SourceAppxContentGroupMap.xml
ファイルの例を次の通りに表示します。
<?xml version="1.0" encoding="utf-8"?>
<ContentGroupMap xmlns="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap"
xmlns:s="http://schemas.microsoft.com/appx/2016/sourcecontentgroupmap">
<Required>
<ContentGroup Name="Required">
<File Name="StreamingTestApp.exe"/>
</ContentGroup>
</Required>
<Automatic>
<ContentGroup Name="Level2">
<File Name="Assets\Level2\*"/>
</ContentGroup>
<ContentGroup Name="Level3">
<File Name="Assets\Level3\*"/>
</ContentGroup>
</Automatic>
</ContentGroupMap>
コンテンツ グループ マップには、2 つの主なコンポーネントがあります。これは必要なコンテンツ グループを含む「必須」セクションと、複数の自動コンテンツ グループを含むことが可能な「自動」セクションです。
必要なコンテンツ グループ
必要なコンテンツ グループは、SourceAppxContentGroupMap.xml
の <Required>
要素内にある 1 つのコンテンツ グループです。 必要なコンテンツ グループには、最小限のユーザー エクスペリエンスでアプリを起動するために必要な重要ファイルがすべて含まれている必要があります。 .NET ネイティブ コンパイルにより、すべてのコード(アプリケーションが実行可能なもの)が必要なグループの一部である必要があり、自動グループにアセットとその他のファイルを残します。
たとえば、アプリがゲームの場合、必要なグループにはメイン メニューまたはゲームのホーム画面で使用されるファイルが含まれる場合があります。
元の SourceAppxContentGroupMap.xml
ファイル例のスニペットは次の通りです。
<Required>
<ContentGroup Name="Required">
<File Name="StreamingTestApp.exe"/>
</ContentGroup>
</Required>
ここではいくつか注意する点があります。
<Required>
要素内の<ContentGroup>
は、"Required" という名前である必要があります。この名前は、必須コンテンツ グループ用だけに使用するために予約されており、最終的なコンテンツ グループ マップに含まれる他の<ContentGroup>
には使用できません。<ContentGroup>
は 1 つしかありません。 重要ファイルのグループは 1 つしかないため、これは意図的なものです。- この例のファイルは、1 つの
.exe
ファイルです。 必要なコンテンツ グループは 1 つのファイルに制限されず、複数のファイルが存在する場合もあります。
このファイルの書き込みを始める簡単な方法として、よく使用するテキスト エディターで新しいページを開き、ファイルをアプリのプロジェクト フォルダーですぐに「名前を付けて保存」を行って、新しく作成したファイルに SourceAppxContentGroupMap.xml
という名前を付けます。
重要
C++ アプリを開発している場合は、SourceAppxContentGroupMap.xml
のファイル プロパティを調整する必要があります。 Content
プロパティを「true」に設定し、File Type
プロパティを「XML ファイル」に設定します。
SourceAppxContentGroupMap.xml
を作成するとき、ファイル名にワイルドカードを使用すると便利です。詳細については、「ワイルドカードを使用するためのヒントとテクニック」セクションを参照してください。
Visual Studio を使用してアプリを開発した場合、必要なコンテンツ グループにこれを含めることを推奨します。
<File Name="*"/>
<File Name="WinMetadata\*"/>
<File Name="Properties\*"/>
<File Name="Assets\*Logo*"/>
<File Name="Assets\*SplashScreen*"/>
1 つのワイルドカード ファイル名を追加すると、Visual Studio からプロジェクト ディレクトリに追加されたファイル (アプリ実行可能ファイルや DLL など) が含まれます。 WinMetadata と"プロパティ"フォルダーには、Visual Studio によって生成されるその他のフォルダーを含む必要があります。 アセット ワイルドカードは、アプリがインストールされるために必要なロゴと「SplashScreen」イメージを選択する必要があります。
ファイル構造の根本にダブル ワイルドカードの「**」を使用し、プロジェクトにすべてのファイルを含めることはできないことに注意してください。この操作は SourceAppxContentGroupMap.xml
を最終 AppxContentGroupMap.xml
に変換しようとすると失敗するためです。
フットプリント ファイル(AppxManifest.xml、AppxSignature.p7x、resources.pri など)をコンテンツ グループ マップに含めないことに注意することも重要です。 指定するワイルドカード ファイル名の 1 つにフットプリント ファイル含まれている場合、無視されます。
自動コンテンツ グループ
自動コンテンツ グループは、ユーザーがすでにダウンロードしたコンテンツ グループと対話している間に、バックグラウンドでダウンロードされるアセットです。 これらには、アプリの起動に不可欠ではない追加のファイルが含まれています。 たとえば、自動コンテンツ グループを異なるレベルに分割し、各レベルを個別のコンテンツ グループとして定義できます。 必要なコンテンツ グループ セクションで説明されている通り、.NET ネイティブコンパイルにより、すべてのコード(アプリケーション実行可能ファイル)は必要なグループの一部である必要があり、自動グループにアセットやその他ファイルを残します。
SourceAppxContentGroupMap.xml
の例の自動コンテンツ グループを詳しく見てみましょう。
<Automatic>
<ContentGroup Name="Level2">
<File Name="Assets\Level2\*"/>
</ContentGroup>
<ContentGroup Name="Level3">
<File Name="Assets\Level3\*"/>
</ContentGroup>
</Automatic>
自動グループのレイアウトは必要なグループとかなり似ていますが、いくつかの例外があります。
- 複数のコンテンツ グループがあります。
- 自動コンテンツ グループには、必要なコンテンツ グループ用に確保されている"必須"という名前を除き、一意の名前を付けることができます。
- 自動コンテンツ グループには、必要なコンテンツ グループのいかなるファイルを含めることはできません。
- 自動コンテンツ グループには、その他の自動コンテンツ グループにもあるファイルを含めることができます。 ファイルは 1 回のみダウンロードされ、それらのファイルを含む最初の自動コンテンツ グループと一緒にダウンロードされます。
ワイルドカードを使用するためのヒントとテクニック
コンテンツ グループ マップのファイル レイアウトは常にプロジェクトのルート フォルダーに対して相対的です。
この例では、"Assets\Level2" または "Assets\Level3" の 1 つのファイル レベル内のすべてのファイルを取得するために、両方の <ContentGroup>
要素内でワイルドカードが使用されています。これより深いフォルダー構造を使用している場合は、次のようにダブル ワイルドカードを使用できます。
<ContentGroup Name="Level2">
<File Name="Assets\Level2\**"/>
</ContentGroup>
ファイル名には、テキストを含むワイルドカードを使用することもできます。 たとえば、「Level2」を含むファイル名を持つ"アセット"フォルダーにすべてのファイルを含める場合、次の内容で使用できます。
<ContentGroup Name="Level2">
<File Name="Assets\*Level2*"/>
</ContentGroup>
SourceAppxContentGroupMap.xml を AppxContentGroupMap.xml に変換
SourceAppxContentGroupMap.xml
を最終バージョンの AppxContentGroupMap.xml
に変換するには、Visual Studio 2017 または「MakeAppx.exe」コマンド ライン ツールを使用できます。
Visual Studio を使用してコンテンツ グループ マップを変換する方法は次の通りです。
SourceAppxContentGroupMap.xml
をプロジェクト フォルダーに追加します。- プロパティ ウィンドウで
SourceAppxContentGroupMap.xml
のビルド アクションを「AppxSourceContentGroupMap」に変更します - ソリューション エクスプローラーでプロジェクトを右クリックします
- [ストア] -> [コンテンツ グループ マップ ファイルの変換] の順に移動します
Visual Studio でアプリを開発していない場合、あるいはコマンド ラインのみを使用する場合、「MakeAppx.exe」ツールを使用して SourceAppxContentGroupMap.xml
を変換します。
単純な「MakeAppx.exe」コマンドは、次のようになります。
MakeAppx convertCGM /s MyApp\SourceAppxContentGroupMap.xml /f MyApp\AppxContentGroupMap.xml /d MyApp\
/s オプションは SourceAppxContentGroupMap.xml
へのパスを指定し、/f は AppxContentGroupMap.xml
へのパスを指定します。 最終オプションの /d は、ファイル名ワイルドカードの展開に使用するディレクトリを指定します。この場合はアプリ プロジェクト ディレクトリです。
「MakeAppx.exe」で使用可能なオプションの詳細については、コマンド プロンプトを開いて「MakeAppx.exe」に移動し、次の内容を入力します。
MakeAppx convertCGM /?
最終 AppxContentGroupMap.xml
をアプリに使用するための準備は、これで以上です。 ただし、アプリを Microsoft Store 用に完全に準備するには、まだ他の作業が必要です。 ストリーミングのインストールをアプリに追加するための詳細については、「こちらのページ」を参照してください。