アセット パッケージの概要

重要

Microsoft Store にアプリを提出する予定がある場合、Windows 開発者向けサポートに連絡してアセット パッケージを使う承認を得る必要があります。

アセット パッケージは、アプリケーションの共通ファイルの一元的な場所として機能するパッケージの種類です。これにより、そのアーキテクチャ パッケージ全体で重複するファイルが事実上不要になります。 アセット パッケージは、どちらもアプリの実行に必要な静的コンテンツが含まれるように設計されているという点でリソース パッケージと似ていますが、ユーザーのシステム アーキテクチャ、言語、表示スケールに関係なくすべてのアセット パッケージがダウンロードされるという点で異なります。

Asset Package Bundle Diagram

アセット パッケージには、すべてのアーキテクチャ、言語、およびスケールにとらわれないファイルが含まれているため、アセット パッケージを活用することによりパッケージ化されるアプリ サイズ全体が減少します (重複するファイルがなくなるため)。この結果、大きいアプリのローカル開発ディスク領域の使用量を管理しやすく、アプリのパッケージを全体的に管理しやすくなります。

アセット パッケージが公開に与える影響

アセット パッケージの最も明確な利点は、パッケージ アプリのサイズが小さくなることです。 アプリ パッケージが小さい方が、App Store が処理するファイルが少なくなるためアプリの公開プロセスにかかる時間が短縮されます。しかし、これはアセット パッケージの最も重要な利点ではありません。

アセット パッケージを作成するとき、パッケージの実行を許可するかどうかを指定できます。 アセット パッケージには、アーキテクチャにとらわれないファイルのみを含める必要があります。一般に、.dll ファイルや .exe ファイルは含まれないため、アセット パッケージの実行は通常必要ありません。 この違いが重要なのは、公開プロセス中、マルウェアが含まれていないことを確認するためにすべての実行可能パッケージをスキャンする必要があり、大きいパッケージの方がこのスキャン プロセスに時間がかかるからです。 ただし、パッケージが非実行可能として指定されている場合、アプリのインストールにより、このパッケージに含まれているファイルを実行できないことが確証されます。 これにより、パッケージ全体のスキャンが確実に不要になり、アプリの公開時 (更新時も同様) のマルウェア スキャンにかかる時間が大幅に短縮されます。したがって、アセット パッケージを使うアプリの公開にかかる時間が大幅に短縮されます。 この公開上の利点を実現するには、フラット バンドル アプリ パッケージも使用する必要があります。これは、Microsoft Store が各 .appx または .msix パッケージ ファイルを並行して処理できるようにするためです。

アセット パッケージを使う必要があるかどうか

アプリのファイル構造を更新してアセット パッケージを活用すると、パッケージ サイズの減少と無駄のない開発サイクルという具体的な利点が得られます。 アーキテクチャ パッケージすべてに大量の共通ファイルが含まれている場合や、アプリの大部分が非実行可能ファイルで構成されている場合、余分な時間はかかりますがアセット パッケージの使用に移行することを強くお勧めします。

ただし、アセット パッケージはアプリ コンテンツの選択性を実現するための手段ではない点に注意してください。 アセット パッケージ ファイルは選択可能ではなく、ターゲット デバイスのアーキテクチャ、言語、スケールに関係なく常にダウンロードされます。アプリでサポートするオプション コンテンツはすべてオプション パッケージを使って実装する必要があります。

アセット パッケージを作成する方法

アセット パッケージを作成するには、パッケージ レイアウトを使うのが最も簡単です。 ただし、アセット パッケージは MakeAppx.exe を使って手動で作成することもできます。 アセット パッケージに含めるファイルを指定するには、"マッピング ファイル" を作成する必要があります。 この例では、アセット パッケージ内のファイルは "Video.mp4" だけですが、アセット パッケージのすべてのファイルがここに一覧表示されます。 アセット パッケージでは、ResourceMetadataResourceDimensions 指定子は省略される点に注意してください (リソース パッケージのマッピング ファイルと比較)。

[ResourceMetadata]
"ResourceId"        "Videos"

[Files]
"Video.mp4"         "Video.mp4"

MakeAppx.exe (MSIX および .appx の場合) を使用してアセット パッケージを作成するには、次のコマンドのどちらかを使用します。

MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.appx
MakeAppx.exe pack /r /m AppxManifest.xml /f MappingFile.txt /p Videos.msix

ここでは、AppxManifest (ロゴ ファイル) で参照されるすべてのファイルをアセット パッケージに移動することはできない点に注意してください。これらのファイルはアーキテクチャ パッケージ間で重複している必要があります。

アセット パッケージに resources.pri を含めることはできません。MRT を使ってアセット パッケージ ファイルにアクセスすることはできません。 アセット パッケージ ファイルにアクセスする方法とアセット パッケージではアプリを NTFS ドライブにインストールする必要がある理由については、「アセット パッケージとパッケージ圧縮を使った開発」をご覧ください。

アセット パッケージの実行を強化するかどうかを制御するには、AppxManifest の Properties 要素で uap6:AllowExecution を使うことができます。トップ レベルの Package 要素に uap6 も追加して、以下のようにする必要があります。

<Package IgnorableNamespaces="uap uap6" 
xmlns:uap6="http://schemas.microsoft.com/appx/manifest/uap/windows10/6" 
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10">

指定しない場合、AllowExecution の既定値は true です。実行可能ファイルのないアセット パッケージでは、公開にかかる時間を短縮するため false に設定します。