Chrome アプリのアーキテクチャ

Chrome アプリはユーザーのオペレーティング システムと緊密に統合されます。ブラウザタブの外部で動作し、オフラインや接続不良のシナリオでも堅牢に動作し、通常のウェブ ブラウジング環境よりもはるかに強力な機能を備えています。アプリコンテナ、プログラミング、セキュリティ モデルは、これらの Chrome アプリの要件をサポートしています。

アプリコンテナモデル

アプリコンテナでは、Chrome アプリの外観と読み込み動作を記述します。Chrome アプリは、従来のウェブアプリとは異なり、アプリコンテナには従来のウェブページ UI コントロールを表示せず、空白の長方形領域のみを表示します。これにより、アプリはシステム上の「ネイティブ」アプリと統合され、ユーザーが URL を手動で変更してアプリのロジックを「乱用」するのを防ぐことができます。

Chrome アプリはウェブアプリとは違った方法で読み込まれます。どちらも同じタイプのコンテンツ(CSS と JavaScript を含む HTML ドキュメント)を読み込みます。ただし、Chrome アプリはブラウザのタブではなく、アプリコンテナに読み込まれます。また、アプリコンテナは Chrome アプリのメイン ドキュメントをローカルソースから読み込む必要があります。これにより、オフラインのときはすべての Chrome アプリが最低限でも最低限でも機能し、より厳格なセキュリティ対策を講じることができます。

アプリコンテナモデルの仕組み

プログラミング モデル

プログラミング モデルでは、Chrome アプリのライフサイクルとウィンドウの動作について説明します。ネイティブ アプリと同様に、このプログラミング モデルの目標は、ユーザーとそのシステムがアプリのライフサイクルを完全に制御できるようにすることです。Chrome アプリのライフサイクルは、ブラウザ ウィンドウの動作やネットワーク接続とは無関係である必要があります。

「イベントページ」では、ユーザーの操作やシステム イベントに応答して Chrome アプリのライフサイクルを管理します。 このページは表示されず、バックグラウンドでのみ存在し、システム ランタイムによって自動的に閉じることができます。ウィンドウの開閉方法、アプリの起動 / 終了のタイミングを制御します。1 つの Chrome アプリにつき「イベントページ」は 1 つのみです。

アプリのライフサイクルの概要

プログラミング モデルの使用方法については、アプリのライフサイクルを管理するをご覧ください。利用を開始するにあたり、Chrome アプリのライフサイクルの概要を以下に示します。

ステージ概要
インストールユーザーがアプリのインストールを選択し、権限を明示的に承認します。
スタートアップイベントページが読み込まれ、「launch」イベントがトリガーされ、アプリページがウィンドウで開きます。アプリに必要なウィンドウを作成します。ウィンドウの見た目やイベントページや他のウィンドウとの通信方法も作成します。
終了ユーザーはいつでもアプリを終了でき、アプリは以前の状態にすばやく復元できます。データを保管することで、データ損失を防ぐことができます。
更新アプリはいつでも更新できますが、Chrome アプリを実行しているコードは、起動時または終了のサイクル中に変更することはできません。
アンインストールユーザーが積極的にアプリをアンインストールできる。アンインストールしても、実行コードや個人データが残されません。

セキュリティ モデル

Chrome アプリのセキュリティ モデルでは、ユーザーの情報を安全な方法で管理することで、ユーザーを保護します。CSP の遵守には、コンテンツ セキュリティ ポリシーに準拠する方法が詳しく記載されています。このポリシーは、危険なスクリプティングをブロックし、クロスサイト スクリプティングのバグを減らし、中間者攻撃からユーザーを保護します。

Chrome アプリのメインページをローカルで読み込むことで、ウェブよりも厳重なセキュリティを適用できます。 Chrome 拡張機能と同様に、ユーザーはインストール時に Chrome アプリを信頼することに明示的に同意する必要があります。つまり、ユーザーは自分のデータにアクセスして使用する権限をアプリに付与する必要があります。アプリが使用する各 API には独自の権限があります。Chrome アプリのセキュリティ モデルでは、ウィンドウごとに権限の分離を設定することもできます。これにより、危険な API にアクセスするアプリのコードを最小限に抑えながら、引き続き使用できます。

Chrome アプリでは Chrome 拡張機能のプロセスを分離することを再利用しており、ストレージと外部コンテンツを分離することでこれをさらに一歩進めています。アプリごとに専用のストレージ領域があり、別のアプリのストレージや、ブラウザで使用するウェブサイトの個人データ(Cookie など)にアクセスできません。すべての外部プロセスはアプリから分離されています。iframe は周囲のページと同じプロセスで実行されるため、他のアプリのページを読み込む場合にのみ使用できます。object タグを使用して外部コンテンツを埋め込むことができます。このコンテンツは、アプリとは別のプロセスで実行されます。