Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

パッケージ型アプリ

パッケージ型アプリ は、リソース (HTML、CSS、JavaScript、アプリマニフェストなど) を Web サーバ上へ置く代わりに、それらをすべてひとつの ZIP ファイルにまとめた Open Web App です。パッケージ型アプリは、ルートディレクトリに アプリマニフェスト を含んだ単なる ZIP ファイルです。マニフェストには manifest.webapp というファイル名を付ける必要があります。

パッケージ型アプリは、ホスト型アプリと異なり、マニフェスト内で launch_path を明記する必要があります。このマニフェスト項目はホスト型アプリではオプションです。

注: 現在 (2013 年 1 月時点) Firefox Marketplace は Firefox OS 用に限りパッケージ型アプリに対応しています。

パッケージ型アプリの目的

パッケージ型アプリの目的は、重要な端末 API へアクセスできるアプリを提供するために有効な方法を提供することです。アプリは、そのアプリが配布されるストア (Firefox Marketplace など) によって検証されなければなりません。ストアはアプリを審査し、条件を満たしていると判断されれば、秘密鍵を使ってその ZIP ファイルにデジタル署名を行います。これにより、潜在的なセキュリティ、プライバシー、機能の問題に関して慎重な審査が行われたというさらなる保証をアプリのユーザに提供できます。

パッケージ型アプリの種類

パッケージ型アプリには 3 つの種類があります。

特権アプリ
特権アプリは特別なプロセスを経て Firefox Marketplace により承認されたものです。これは、アプリが端末上で特定の重要な API へのアクセスを必要とする場合に、ユーザに対してより高い安全性を提供することを目的としています。iOS や Android などのプラットフォーム向けに書かれたネイティブアプリと同じです。アプリが特権アプリであることを指定するには、その manifest.webapp ファイルに type 項目を追加し、その値を privileged とします。
特権アプリには以下のような特徴があります。
  • コードレビューやそれに相当する審査を経て、アプリストアによって承認される。
  • アプリのリソースはアプリストアによって署名される。
  • 信頼できないコンテンツからはアクセスできない、特定の重要な API を使うことが許可される。
  • Content Security Policy (CSP) を強制される。特権アプリが使用する CSP は以下の通りです。
    "default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'"
  • セキュリティに関するその他の要件を実装する。詳しくは Security を参照してください。
認定アプリ
認定アプリは、スマートフォン上の規定の電話やシステム設定アプリなど、重要なシステム機能を対象したものです。この種類のアプリは、Firefox OS 端末上で重要な機能に使用されるでしょう。サードパーティ製アプリ向けではないため、ほとんどのアプリ開発者はこのアプリの種類を使うことはできません。認定アプリは特権アプリに似たパッケージ型アプリですが、端末のすべての許可設定が黙示的であるという点が異なります。つまりそれらはユーザによる明示的な承認なく有効化されています。認定アプリは、重要な API を使うにあたってこの黙示的な承認を得るには、OEM あるいはキャリアによって端末ごとに承認されなければなりません。アプリが認定アプリであることを指定するには、その manifest.webapp ファイルに type 項目を追加し、その値を certified とします。
以下は認定アプリの CSP で、特権アプリの CSP とは若干の違いがあります。
"default-src *; script-src 'self'; object-src 'none'; style-src 'self'"
これは認定アプリと比較した場合、特権アプリのインライン CSP にはより多少緩やかなルールが適用されるという影響があります。この理由について詳しく知りたければ、Default CSP policyBug 768029 を参照してください。
単純なパッケージ型アプリ
単にひとつの ZIP ファイルにパッケージした通常のアプリを作成することも可能です。Marketplace はそうしたアプリに署名しますが、特権・認定アプリに用いられる特別な認証プロセスは実行しません。こうした単純なパッケージ型アプリは、特定の重要な API を使うことはできません。特権・認定アプリの項に記載されている CSP は該当しません。この種類のアプリは、ユーザが初めて使用するときに、アプリの全リソースをダウンロードさせず端末上で使用可能にしておきたい場合に便利でしょう。このパッケージ型アプリの種類は manifest.webapp ファイルに type 項目を必要としません。なぜなら type の既定値 (web) に相当するからです。

ホスト型アプリとの違い

パッケージ型アプリは通常の Web サイト形式の Open Web Apps (「ホスト型」アプリ) と同じ機能を持ちますが、以下のようないくつかの違いがあります。

  • インターネット生成元 (オリジン) を持ちません。ホスト型アプリに強制される「生成元ごとにひとつのアプリ」というポリシーは、パッケージ型アプリには適用されません。
  • ZIP ファイル内で app://<uuid> という特別なプロトコルが使われます。例えば、パッケージ型アプリで /index.html というコンテンツを読み込むときは、実際には以下のような URL を読み込むことになります (UUID はアプリごとに異なります)。
    app://550e8400-e29b-41d4-a716-446655440000/index.html

    UUID はインストール時にランダムに生成されます。app:// プロトコルは、Web ランタイムの将来のバージョンにおいて、個人認証、課金、OAuth といった一部フローの中で役立つでしょう。

  • マニフェストファイルは manifest.webapp というファイル名にする必要があります。
  • リソースは ZIP ファイルからアクセスされます。ZIP ファイルはアプリがインストールされた端末に保存されます。
  • installPackage() という別の mozApps 関数でインストールされます。
  • すべてのアプリケーションコンテンツに特定の CSP が強制されます (ホスト型アプリも CSP を使えますが必須ではありません)。
  • リモートコンテンツをインラインフレームとして埋め込めますが、そのコンテンツは特権 API にはアクセスできず、既定の CSP も適用されません。
  • アプリの新バージョンを取得するには更新プロセスがあります。ホスト型アプリにはこのプロセスは必要ありません。

パッケージ型アプリは、通常のホスト型アプリと同様に、Web サーバ上のデータベースへのアクセスなどといった操作は可能です。

重要な Web API の使用

悪意を持って利用される恐れのある Web API もあるため、それらへのアクセスは管理される必要があります。アプリからアクセスしたいすべての重要な API について、アプリの マニフェスト 内の permissions 項目にエントリーを追加しなければなりません。

一部の重要な API は通常のホスト型アプリからもアクセスできますが、他の API を使うにはパッケージ型アプリ (特権・認定アプリ) とする必要があります。この要件を記載した表が アプリの許可設定 に載っています。

パッケージ型アプリと Firefox Marketplace

Firefox Marketplace はパッケージ型アプリについてホスト型アプリとは異なる扱いをします。パッケージ型アプリを登録する場合、その ZIP ファイルは Marketplace のサーバ上に保存され、パッケージ型アプリの ZIP ファイルに含まれるアプリマニフェストに基づいて「ミニマニフェスト」と呼ばれる新しいマニフェストを Marketplace が生成します。ユーザがアプリをインストールする際、そのミニマニフェストが installPackage() 関数に渡され、アプリのインストールが行われます。ミニマニフェストはインストールや更新のために生成されるもので、アプリの実行時には使われません。

(Simulator を使った) パッケージ型アプリのインストールテスト

Simulator を使って Firefox OS 端末上でパッケージ型アプリをインストールするには、Simulator ガイドの「デバイスへのプッシュ」の項 を参照してください。

(Simulator を使わない) パッケージ型アプリのインストールテスト

パッケージ型アプリのインストールをローカルでテストしたい場合は、もうひとつ方法があります。以下の手順に従えば、ローカルネットワーク上にある Web サーバから端末にパッケージ型アプリをインストールできます。開発マシン上で動かしている Web サーバでも構いません。パッケージ型アプリのインストールがどのように行われるのか概要が分かるでしょう。

要件

  • Web サーバは端末と同じネットワーク上になければなりません。またローカルネットワークからリクエストを送信できる必要があります。
  • 端末は Firefox OS を実行し、Wi-Fi に接続している必要があります。
  • 以下のサンプルコードで使われているファイルパスをあなたのサーバに合わせて編集します。
  • サーバの IP アドレスを取得し、以下の例の <server-ip> を書き換えます。サーバが非標準ポートを使用している場合はそれも記載します。非標準ポートの IP アドレスの例はこのようなものです。
    10.10.12.1:8080

手順

  1. パッケージ型アプリの ZIP ファイルを生成し、package.zip という名前を付けます。このファイルには、マニフェストを含め、アプリのリソースファイルがすべて含まれています。
  2. package.manifest というファイルを作成し、以下のような内容で保存します。これがパッケージ型アプリのインストール用に使用されるミニマニフェストです。ZIP ファイル内にあるアプリの主要マニフェストではありません。ミニマニフェストについての詳しい情報は ミニマニフェストの項目 を参照してください。
    {
      "name": "My App",
      "package_path": "https://<server-ip>/package.zip",
      "version": "1.0"
    }
  3. install.html という以下のような内容のファイルを作成します。これにはパッケージ型アプリを呼び出す JavaScript (installPackage()) と成否の通知を受け取るコールバック関数が含まれます。
    <html>
      <body>
        <p>パッケージ型アプリのインストールページ</p>
        <script>
          // この URL は完全な URL でなければなりません
          var manifestUrl = 'https://<server-ip>/package.manifest';
          var req = navigator.mozApps.installPackage(manifestUrl);
          req.onsuccess = function() {
            alert(this.result.origin);
          };
          req.onerror = function() {
            alert(this.error.name);
          };
        </script>
      </body>
    </html>
  4. package.zippackage.manifestinstall.html を Web サーバのドキュメントルートフォルダにコピーします。
  5. 端末上のブラウザで https://<server-ip>/install.html を開き、アプリのインストール確認を承認します。スクリプトがインストールの成否を表示します。

注: 認定アプリの API (上記参照) をテストしたい場合は、アプリをインストールしたい端末 (Firefox OS) 上で「開発者モード」を有効にし、manifest.webapp ファイル内で適切な type を指定します。

ミニマニフェストの項目

以下がミニマニフェストの例です。

{
  "name": "My app",
  "package_path": "https://thisdomaindoesnotexist.org/myapp.zip",
  "version": "1.0",
  "size": 172496,
  "release_notes": "First release",
  "developer": {
    "name": "Developer Name",
    "url": "https://thisdomaindoesnotexist.org/"
  },
  "locales": {
    "fr_FR": {
      "name": "Mon application"
    },
    "se_SE": {
      "name": "Min balla app"
    }
  },
  "icons": {
    "16": "/icons/16.png",
    "32": "/icons/32.png",
    "256": "/icons/256.png"
  }
}

Firefox Marketplace があなたのアプリ用にミニマニフェストを生成する場合、一部の項目についてはあなたのアプリのマニフェストから情報を取得します。それらの項目については アプリマニフェスト の記事を参照してください。ミニマニフェスト固有の項目は、package_pathrelease_notessize です。アプリマニフェスト内の nameversiondeveloperlocales 項目は、ミニマニフェストと完全に一致させる必要があります。

ローカルでのテストに関連するミニマニフェストの情報は以下の通りです。

name
(必須) アプリの名称。最長 128 文字。
package_path
(必須) アプリの ZIP ファイルが置かれた完全な URL。
version
アプリのバージョン。
size
アプリの ZIP ファイルのサイズ (バイト)。これはローカルでのテストには不要ですが、記載しておくとインストール中に進捗バーが表示されます。
release_notes
アプリのこのバージョンに関する情報。Marketplace では、登録プロセス中に表示されるページで入力された情報が使用されます。
developer
開発者に関する情報。nameurl 項目を含みます。
locales
ローカライズの情報。
icons
アプリが使用するアイコン。

パッケージ型アプリの更新

アプリの更新に関する情報は アプリの更新 を参照してください。

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: kohei.yoshino, ethertank
 最終更新者: kohei.yoshino,