PWAとは
PWAはProgressive Web App(プログレッシブ・ウェブ・アップ)の略で、一般に「ピー・ダブリュー・エー」と読みます。Web技術で作られ、インストールやオフライン動作などアプリに近い体験を提供するWebアプリです。
URLで配信・更新されるWebアプリケーションを基礎に、Web App Manifest、Service Worker、レスポンシブ設計、安全文脈、プラットフォームAPI等を必要な範囲で組み合わせます。
PWAは単一ファイル形式や一つのAPIではありません。インストール可否、オフライン機能、背景機能、配布方法はブラウザーとOS、アプリケーション実装で異なります。

構成を七つの部品へ分ける
HTML、CSS、JavaScript、サーバーAPIをWebとして提供します。
名前、アイコン、開始_url、適用範囲、表示、テーマ等をJSONで記述します。
ブラウザーがオリジンとアプリ情報を示し、利用者の操作で機器へ追加します。
開始URLと表示モードを使い、独立時間窓風に起動できます。
Service Worker、キャッシュ、再試行、ローカル状態でオフライン・不安定なネットワークを処理します。
通知、カメラ、位置等は個別権限とプラットフォーム対応が必要です。
リソース・マニフェスト・ワーカーを各キャッシュとライフサイクル規則に沿って更新します。
マニフェストはアプリのメタデータをまとめる
Web App Manifest(ウェブ・アップ・マニフェスト)は、アプリケーション名、アイコン、起動URL、ナビゲーション適用範囲、表示モード、色等をJSONリソースで提供します。ブラウザーはインストールUIと起動文脈へ適用します。
start_urlは起動入口、scopeはマニフェストが適用されるナビゲーション範囲です。適用範囲外URLへ移ると、通常のブラウザーUIへ戻す等の扱いになります。
インストール可能条件はブラウザーが決める
現行マニフェスト仕様はユーザーエージェントがWebアプリケーションをインストールするモデルを定めますが、インストールUIをいつ表示するか、必要なマニフェストメンバー、継続利用条件、デスクトップ・モバイルの提供面は実装ごとに異なります。
「インストールボタンが出ない」をService Worker有無だけで判断せず、マニフェスト取得、アイコン、開始URL、オリジン、ブラウザー対応、プラットフォーム方針を確認します。ブックマーク追加とインストール済み webアプリではマニフェスト適用範囲が違います。
オフラインはService Worker等で作るアプリケーション機能
シェルリソースをCache Storageへ置き、ナビゲーション失敗時にオフラインページを返し、入力データをローカル保存へ保留し、再接続時にサーバーへ同期する設計があります。
どの操作がオフラインで可能か、データ競合をどう解決するか、ログアウト後にキャッシュ済みの個人データをどう消すかを明示します。「PWAだからオフライン」の一語だけでは、すべての機能が使えることを保証できません。
インストールしても権限は自動付与されない
通知、カメラ、マイク、位置、クリップボード等はAPIごとの権限と利用者操作が必要です。インストール済み時間窓でもオリジンのセキュリティモデルが基本です。
起動ツールアイコンや全画面風表示は、ネイティブアプリケーションと同じ権限を意味しません。権限を拒否したときにも主要機能を使える代替処理を用意します。
更新はWebの速さとライフサイクルの安全性を両立する
サーバーリソースを更新しても、HTTPキャッシュ、Service Workerキャッシュ、待機ワーカー、開いたクライアントにより複数バージョンが並ぶことがあります。データスキーマとAPIを後方互換にします。
重要更新で再起動を促す場合も、利用者の未保存データを失わないよう通知と移行を設計します。通知なしの更新が常に正解ではありません。
アンインストールとサイトデータ削除は同じとは限らない
起動ツールからアプリを削除しても、ブラウザープロファイルのCookie、保存領域、権限、キャッシュが残る実装があります。アンインストールUIがデータ削除選択肢を提示するか確認します。
PWAはWebの配信モデルを保ちながら、マニフェストによるインストール・起動と、アプリケーションが実装する回復力・対応能力を段階的に加える考え方です。
manifest metadata、install・launch、scope、display、uninstallとprivacy要件:W3C「Web Application Manifest」。offline request制御を担うworker:W3C「Service Workers」