アプリのパッケージ化

Windows 8.1 の新しいアプリ バンドルを使うと、アプリの提出が以前よりさらに簡単になります。また、リソース パックを使うと、ディスク容量や帯域幅に悪影響を与えることなく、ローカライズや高解像度ディスプレイ用アセットなどの追加機能を必要とするユーザーに提供できます。そのような機能を必要としないユーザーにとっても、アプリ購入エクスペリエンスに影響はありません。

アプリ バンドルを使って効率的にアプリを展開する方法の例については、「Windows ストア DirectX ゲームのパッケージ化」とリソース パッケージを含むゲームのサンプルをご覧ください。

Windows 8.1 の新機能または更新された機能

アプリ リソース

Windows 8.1 では、新しいタイプのパッケージがアプリ モデルに導入されました。リソース パッケージを使うと、開発者は、コア アプリ パッケージから追加リソース (例: フランス語特有の文字列や画像などのアセット) を切り離して、それを独自のパッケージに格納することができます。リソース パッケージは、すべてのリソース パッケージを PC にダウンロードしてインストールすることなく、アプリの全体的なエクスペリエンスを調整する目的に対応しています。

リソース パッケージの使用はオプションであるため、アプリ パッケージがこれに依存することはできません。つまりアプリ パッケージには、PC にリソース パッケージがまったくインストールされていない場合に必ず使うことのできる既定リソースを 1 セット以上含める必要があるということです。これは、次に示すいくつかの重要な約束を守るのに役立ちます。

  • アプリ パッケージは常に、リソース パッケージがない PC 上でも正常にインストールおよび起動できる。

  • インストールされたリソース パッケージが完全でない場合、フォールバックできるリソースがアプリ パッケージに含まれている。

リソース パッケージは、アプリ モデル内で 2 つの役割を果たします。

  • アプリのエクスペリエンスを調整するためにリソース管理システムがアプリの実行中に使用できるリソース候補の提供。

  • リソース パッケージが特定のリソース修飾子 (たとえば、ユーザー スケール、システム スケール、Microsoft DirectX 機能など) をターゲットにできるようにするためのメタデータの提供。

リソース パッケージがターゲットにできるリソース修飾子はパッケージにつき 1 つのみです。ただし、1 つのアプリに対して複数のリソース パッケージを作成することができます。

アプリ バンドル

リソース パッケージに加えて、Windows 8.1 では、Windows ストア アプリとリソース パッケージのパッケージ化と世界中のユーザーへの配布を最適化できるように、アプリ バンドル (.appxbundle パッケージ) が導入されています。

アプリのアプリ バンドル ペイロードは、自分で作成します。 Visual Studio を使ってバンドル マニフェストを作成し、追加します。Microsoft Visual Studio Express 2013 for Windows でアプリのバンドルを行うと、自動的にリソースが別パッケージに分割され、アプリ ブロック マップと署名ファイルがバンドルに追加されます。Windows 8.1 以降のシステムに展開することができる、十分に自己完結している Windows ストア アプリを構成するための項目を次に示します。

アプリ パッケージ (.appx)

アプリ バンドルには、それぞれが異なる特定のアーキテクチャをターゲットとする場合にのみ、複数のアプリ パッケージを含めることができます。たとえば、アプリ バンドルに X86.appx パッケージと amd64.appx パッケージの両方を含めることができますが、2 つの amd64.appx パッケージを含めることはできません。

リソース パッケージ (.appx)

アプリ バンドルには、言語、スケール、DirectX 機能レベルに応じたリソース パッケージ (.appx ファイル) が含まれます。各アプリ バンドルには、異なるデバイス構成をサポートする多数の異なるリソース パッケージを含めることができます。Windows ストア アプリでリソース パッケージを直接参照するときは、リソース管理システムを全面的に利用してください。

  リソース パッケージにコードを含めることはできません。

アプリ バンドル マニフェスト (AppxBundleManifest.xml)

アプリ バンドル マニフェスト (.appxbundlemanifest ファイル) には、含まれるパッケージに関するあらゆる適用性情報が含まれています。アプリ バンドル マニフェストには、個々のパッケージについて、パッケージの種類 ("アプリケーション"または"リソース") と、バージョンとリソースのターゲット情報が指定されています。アプリ パッケージについては、アーキテクチャに関する情報がアプリ バンドル マニフェストに含まれています。

通常、Windows 8.1 のアプリ モデルは、アプリ バンドル マニフェストによってアプリ バンドルの内容を把握し、ユーザーのデバイスにどのアプリ パッケージとリソース パッケージをインストールする必要があるか、インストール時に決定できます。

アプリ バンドル マニフェスト ファイルの例を次に示します。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Bundle xmlns="http://schemas.microsoft.com/appx/2013/bundle" SchemaVersion="1.0">
  <Identity Name="Example" Publisher="CN=ExamplePublisher" Version="2013.101.312.1053"/>
  <Packages>
    <Package Type="application" Version="1.0.0.5" Architecture="x86" FileName="AppPackage_X86.appx" Offset="49" Size="3207">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="application" Version="1.0.0.4" Architecture="x64" FileName="AppPackage_X64.appx" Offset="3329" Size="3204">
      <Resources>
        <Resource Language="en-us"/>
        <Resource Scale="100" />
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.0" ResourceId="French" FileName="ResourcePackage_French.appx" Offset="6606" Size="1423">
      <Resources>
        <Resource Language="fr"/>
        <Resource Language="fr-fr"/>
        <Resource Language="fr-ca"/>
      </Resources>
    </Package>
    <Package Type="resource" Version="1.0.0.3" ResourceId="HiRes" FileName="ResourcePackage_HiRes.appx" Offset="8111" Size="1584">
      <Resources>
        <Resource Scale="140"/>
      </Resources>
    </Package>
  </Packages>
</Bundle>

アプリ ブロック マップ (AppxBlockMap.xml)

ブロック マップ ファイルには、バンドル内のすべてのアプリ ファイル (アプリ パッケージとリソース パッケージを除く) の一覧が、関連付けられている暗号化ハッシュ値と共に記述されています。暗号化ハッシュ値は、オペレーティング システムがファイルの整合性の検証とアプリの更新プログラムの最適化に使います。ブロック マップ ファイルについて詳しくは、「アプリ パッケージ ブロック マップ」をご覧ください。

アプリの署名 (AppxSignature.p7x)

アプリ バンドルの署名は、サイン後にパッケージとコンテンツが変更されていないことを保証します。署名証明書が、信頼されたルート証明機関の証明書として検証されている場合は、だれがパッケージに署名したかも特定できます。パッケージの署名者は、通常、アプリの発行元または作成者です。

  ただしアプリのバンドルを手動で行う場合は、スタンドアロンの MakeAppx ユーティリティと SignTool ユーティリティを使うこともできます。Windows ストア アプリのバンドルと展開を行う方法について詳しくは、Windows ストア アプリのパッケージ化、展開、照会に関するページをご覧ください。

パッケージ ID

Windows 8 のアプリ パッケージと同様、アプリ バンドルの最も基本的な要素の 1 つは、バンドルを識別する 5 部構成の組です。これはパッケージ ID と呼ばれ、次のデータで構成されています。

プロパティ説明
Name

アプリ パッケージのために使われる一般的な名前 (例: myCompany.mySuite.myApp)。

  この名前は、必ずしもアプリのタイルに表示される名前ではありません。
Publisher

Windows ストア アプリの発行元です。ほとんどの場合、発行元は Windows 8 開発者アカウントの登録に使われたアカウントと同じです。

Version

アプリの今後のリリースのために使われる、4 つの要素 (major.minor.build.revision) から成るバージョン記述子 (例: "1.0.0.0")。

ProcessorArchitecture

既定では neutral に設定されます。

ResourceID

既定では "~" に設定されます。

 

アプリ バンドルの展開

Windows ストアを通じてアプリ バンドルを展開する場合のワークフローを次に示します。

アプリのパッケージ化のフロー

Windows ストア アプリの展開プロセスは、複数のフェーズで実行されます。まず、Windows 8.1 がアプリ バンドル マニフェスト、バンドル ブロック マップ、バンドル署名を取得し、検証します。次に、Windows 8.1 は、現在のアーキテクチャに展開できるアプリが存在するか確認するために、バンドル マニフェストをチェックします。適切なアプリ パッケージが見つかると、アプリの展開が成功するように、Windows 8.1 がアプリ パッケージの展開の要件をチェックします。

次に Windows 8.1 は、展開に使用する適切なリソース パッケージのサブセットを決定し、これらのパッケージ バイナリを \WindowsApps\ ディレクトリにステージングします。最後に、Windows 8.1 は、アプリ パッケージとリソース パッケージをユーザーのアカウントに登録します。

検証

ユーザーが Windows ストア アプリのインストールを開始した後、展開プロセスが開始される前に、Windows 8.1 は次のチェックを完了する必要があります。

テスト条件

アーキテクチャ サポート

バンドルには、最大で 3 つのアーキテクチャ固有のアプリ パッケージを含めることができます。これらはすべて、アプリ バンドル マニフェストに指定されている必要があります。

オペレーティング システムの最小バージョン

前提条件を、アプリ パッケージ マニフェスト内で指定します。前提条件では、必須の要件として、特定のオペレーティング システムの最小バージョンを指定します。たとえば、Windows 8.1 の適切なバージョン番号として 6.3 を指定します。 アプリの前提条件について詳しくは、アプリ パッケージの前提条件に関する情報をご覧ください。

アプリの依存関係

Windows ストア アプリは、アプリに必要な追加機能のための、他のコンポーネント パッケージへの依存関係を表すことができます。アプリの依存関係について詳しくは、アプリ パッケージの依存関係に関する情報をご覧ください。

ディスク領域

各 Windows ストア アプリは、展開するために、一定量のディスク領域を必要とします。パッケージを展開するための十分なディスク領域がない場合、展開は失敗します。

署名チェック

既に検証された BlockMap に対し、アプリ パッケージ内の各ファイルの整合性をチェックする必要があります。

 

パッケージの適用性

Windows 8.1 は、アプリ バンドルをシステムに展開できることを検証した後、ユーザーのエクスペリエンスを拡張するためにアプリ パッケージと共に展開するリソース パッケージを決定します。次の 3 つのリソース修飾子に基づいて、適用性のチェックが行われます。

修飾子説明

ユーザー言語

ユーザーが優先する言語一覧に追加した言語はすべて、展開する適切な言語のリソース パッケージの最終セットに追加されます。Windows 8.1 では、リソース パッケージ用に多数のロケールと言語がサポートされています。

システム スケール

すべてのモニターのスケール値を使って、展開する適切なスケール リソース パッケージの最終セットが決定されます。Windows 8.1 では、リソース パッケージ用に 3 つの倍率 (scale-100scale-140scale-180) がサポートされています。

DirectX 機能レベル

システムで利用できるすべての DirectX 機能レベルを使って、展開する適切な DirectX リソース パッケージの最終セットが決定されます。Windows 8.1 では、リソース パッケージ用に 3 つの DirectX 機能レベル (DXFL-DX9DXFL-DX10DXFL-DX11) がサポートされています。

 

パッケージのステージング

Windows 8.1 がアプリ バンドルをシステム上に展開できることを確認し、どのパッケージを展開するかを決定した後、パッケージ コンテンツが \WindowsApps\ ディレクトリにダウンロードされます。このとき、ダウンロードされるパッケージごとに、次のようにパッケージ ID 名の値を使って新しいディレクトリが作成されます。

<Package Name>_<Version>_<Architecture>_<ResourceID>_<Publisher Hash>

ステージング プロセスは、パッケージの場所のソースに対して展開エンジンによって作成された一連の要求を介して行われます。これらの要求はソースによって実現され、展開のエンジンに返されてから、圧縮解除、BlockMap に対する検証、適切なファイルへのコピーが行われます。

パッケージの登録

パッケージの登録は、展開プロセスの最後のフェーズです。このフェーズでは、2 つの重要な操作が行われます。

  • アプリ パッケージ マニフェストで宣言された拡張機能がオペレーティング システムに登録されます。そうすることで、アプリがオペレーティング システムに緊密に統合されます。たとえば、アプリでテキスト (.txt) ファイルを開くことができるようにする場合は、アプリ パッケージ マニフェストで XML として FileTypeAssociation 拡張機能を宣言し、ファイルの種類として ".txt" を指定します。

    展開時にこの XML は、.txt ファイルを処理するアプリを適切に登録するために行う必要があるシステム変更のセットに変換されます。これらの変更は、アプリの代わりにアプリ モデルによって行われます。アプリ モデルは、さまざまな種類の拡張機能をサポートします。これらの拡張機能について詳しくは、「アプリ コントラクトと拡張機能」をご覧ください。

  • リソース パッケージはすべて、リソース管理システムに登録されます。これにより、リソース管理システムは、リソース パッケージを使って、アプリの実行時にユーザー エクスペリエンスを最適化できます。

 

 

表示: