2026年版 PWAの基本と実装

要約

PWA開発入門 2026: Webサイトをネイティブアプリのように変身させる技術

Webサイトをネイティブアプリのように機能させるProgressive Web App (PWA) の基本、実装、そしてビジネス価値を徹底解説します。

Keywords: PWA, Service Worker, Webアプリ

目次

1 PWAとは?Webの未来を切り拓く技術

2 PWAを構成する主要技術要素

3 PWAがもたらすユーザー体験とビジネス価値

4 PWA開発における一般的な課題と解決策

5 PWA実装の具体的なステップとコード例

6 よくある質問 (FAQ)

INTRODUCTION

PWAとは?Webの未来を切り拓く技術

皆さん、こんにちは!Kwontekiです。今日の記事では、Webサイトの可能性を劇的に広げる技術、「Progressive Web App(PWA)」について深掘りしていきます。2026年を迎えた今、ユーザー体験の向上とビジネス成長のためにPWAがなぜこれほどまでに重要視されているのか、その核心に迫ります。

スマートフォンが私たちの生活に深く根ざした現代において、ユーザーはWebサイトにもネイティブアプリのような高速性、信頼性、そしてエンゲージメントを求め始めています。しかし、ネイティブアプリ開発には高額なコストと時間がかかり、プラットフォームごとの開発が必要となるため、中小企業やスタートアップにとっては大きな障壁となりがちです。PWAは、こうした課題を解決し、Webサイトが持つリーチの広さとネイティブアプリの優れた体験を融合させる、まさに「ハイブリッド」なソリューションとして注目されています。

“PWAは、Webのオープン性とリーチの広さを維持しつつ、ネイティブアプリが提供する最高のユーザー体験をWebブラウザ上で実現するための技術の集合体です。”

— Kwonteki

PWAは、特定の技術やフレームワークを指すものではなく、Web標準技術(HTML, CSS, JavaScript)と最新のWeb APIを組み合わせて構築されるWebアプリケーションの「品質基準」と考えることができます。Googleが提唱し、多くのブラウザベンダーがサポートするこの技術は、以下の3つの主要な特性によって定義されます。

PWAの主要な特性

信頼性 (Reliable)

オフライン対応 — ネットワーク接続が不安定な場所やオフライン環境でもコンテンツを表示し、基本的な機能を操作できます。

高速な読み込み — キャッシュ戦略により、初回訪問後には瞬時にコンテンツが表示され、スムーズな操作感を提供します。

高速性 (Fast)

即時応答 — アプリケーションの起動が早く、ユーザーの入力に対して即座にフィードバックを返します。

スムーズなアニメーション — スクロールやトランジションが滑らかで、ネイティブアプリに匹敵するパフォーマンスを実現します。

エンゲージメント (Engaging)

ホーム画面への追加 — ユーザーはWebサイトをスマートフォンのホーム画面に追加でき、ネイティブアプリのようにアイコンから直接起動できます。

プッシュ通知 — ユーザーにリアルタイムで最新情報や更新を通知し、再訪問を促すことができます。

全画面表示 — ブラウザのUI(アドレスバーなど)が非表示になり、没入感のある体験を提供します。

これらの特性は、ユーザーがWebサイトを利用する際の摩擦を減らし、より快適で魅力的な体験を提供するために不可欠です。特に2026年においては、モバイルファーストが当たり前となり、Webサイトのパフォーマンスや利便性がビジネスの成否を分ける重要な要素となっています。

ポイント

PWAは、Webサイトにネイティブアプリのような「信頼性」「高速性」「エンゲージメント」をもたらすWeb標準技術の集合体です。これにより、ユーザーはより快適な体験を得られ、企業は高いコンバージョンとエンゲージメントを期待できます。


CORE COMPONENTS

PWAを構成する主要技術要素

PWAの優れた機能は、いくつかの重要なWeb標準技術によって支えられています。ここでは、特に重要な「Web App Manifest」「Service Worker」「HTTPS」の3つに焦点を当てて詳しく見ていきましょう。

Web App Manifest: アプリの「IDカード」

Web App Manifestは、PWAのメタデータ(名前、アイコン、表示モードなど)を定義するJSONファイルです。このファイルがあることで、ブラウザやOSはPWAをネイティブアプリのように扱えるようになります。具体的には、ユーザーがWebサイトをホーム画面に追加する際に表示されるアイコンやアプリ名、起動時のスプラッシュスクリーンなどがこのマニフェストファイルによって制御されます。

Smartphone home screen with PWA icons

マニフェストファイルは、Webサイトの<head>セクションからリンクされます。以下に基本的なマニフェストファイルの例を示します。

コード解説

このJSONファイルは、PWAの基本的な情報を定義します。nameshort_nameはアプリ名、iconsはホーム画面に追加するアイコンのパスとサイズ、start_urlはPWA起動時の初期URL、displayは表示モード(スタンドアローンでブラウザUIなしなど)をそれぞれ指定します。


// manifest.json
{
  "name": "Kwonteki PWA App",
  "short_name": "Kwonteki PWA",
  "description": "Kwontekiの最新PWA技術を体験しよう!",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#f0f3ff",
  "theme_color": "#667eea",
  "icons": [
    {
      "src": "/icons/icon-72x72.png",
      "sizes": "72x72",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-96x96.png",
      "sizes": "96x96",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-128x128.png",
      "sizes": "128x128",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-144x144.png",
      "sizes": "144x144",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-256x256.png",
      "sizes": "256x256",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-384x384.png",
      "sizes": "384x384",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

HTMLファイルでのリンク方法:

コード解説

<head>タグ内に<link rel="manifest" href="/manifest.json">を追加することで、ブラウザにマニフェストファイルの場所を伝えます。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kwonteki PWA Demo</title>
    <link rel="manifest" href="/manifest.json">
    <!-- その他のメタタグやCSSリンク -->
</head>
<body>
    <!-- コンテンツ -->
</body>
</html>

ポイント

Web App Manifestは、PWAを「アプリらしく」見せるための設定ファイルです。適切なアイコンや表示モードを設定することで、ユーザーは違和感なくWebサイトをホーム画面に追加し、ネイティブアプリのように利用できます。

Service Worker: PWAの「心臓部」

Service Workerは、PWAの最も革新的な技術要素です。これはブラウザがWebページとは別にバックグラウンドで実行するJavaScriptファイルで、ネットワークリクエストの傍受、キャッシュ管理、プッシュ通知、バックグラウンド同期など、Webサイトにネイティブアプリのような機能をもたらします。

Service Worker lifecycle flowchart

Service Workerの主な機能は以下の通りです。

機能1: ネットワークリクエストの傍受とキャッシュ管理

Service Workerは、Webサイトが発行するすべてのネットワークリクエストを傍受し、キャッシュからリソースを返したり、ネットワークからフェッチしたりする戦略を実装できます。これにより、オフライン環境での動作や高速な読み込みを実現します。

機能2: プッシュ通知

ユーザーがWebサイトを閉じていても、Service Workerを通じてサーバーからプッシュ通知を受け取り、ユーザーに情報を届けることができます。これにより、再エンゲージメントを促進します。

機能3: バックグラウンド同期

オフライン中に実行されたユーザーのアクション(フォーム送信など)をService Workerが一時的に保存し、ネットワークが回復した際に自動的にサーバーと同期させることができます。これにより、データの一貫性を保ちます。

Service Workerの登録は、通常WebサイトのJavaScriptファイル内で行われます。

コード解説

このコードは、ブラウザがService Workerをサポートしているかを確認し、サポートしていれば/service-worker.jsファイルをService Workerとして登録します。登録が成功すると、Service Workerがバックグラウンドで動作を開始します。


// app.js (メインのJavaScriptファイル)
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('Service Worker registered with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
}

ポイント

Service WorkerはPWAの「オフライン対応」「高速化」「プッシュ通知」の鍵となる技術です。ネットワークリクエストの制御、キャッシュ戦略の実装、バックグラウンド処理の実行により、ユーザーに途切れない体験を提供します。

HTTPS: セキュリティと信頼の基盤

PWAの導入には、Webサイト全体がHTTPSで提供されていることが必須条件です。HTTPSは、Webサイトとユーザー間の通信を暗号化し、データの盗聴や改ざんを防ぐためのプロトコルです。Service Workerがネットワークリクエストを傍受する特性を持つため、悪意のある攻撃からユーザーを保護するためにはHTTPSによるセキュリティが不可欠となります。

HTTPS化は、PWAだけでなく、現代のWebサイト運営における基本的なセキュリティ要件であり、SEOの観点からも重要です。無料で利用できるSSL/TLS証明書(例: Let’s Encrypt)も普及しており、導入のハードルは以前に比べて格段に下がっています。

注意

PWAのService Workerは、セキュリティ上の理由からHTTPS接続が必須です。ローカル開発環境ではlocalhostが例外として許可されますが、本番環境では必ずHTTPSを導入してください。

App Shell Architecture: 高速起動のための設計パターン

App Shell Architectureは、PWAの高速性と信頼性を最大化するための設計パターンです。これは、アプリケーションのUIを構成する最小限のHTML、CSS、JavaScript(「アプリシェル」と呼びます)をService Workerでキャッシュし、初回ロード時やオフライン時に即座に表示することで、ユーザーに高速なフィードバックを提供するものです。

App Shell architecture diagram

アプリシェルは、Webサイトのヘッダー、ナビゲーション、フッターなど、コンテンツに依存しない基本的なフレームワークを指します。ユーザーがPWAを起動すると、まずこのキャッシュされたアプリシェルが瞬時に表示され、その後に実際のコンテンツがバックグラウンドで読み込まれて表示されます。これにより、ユーザーは「真っ白な画面」を待つことなく、すぐにアプリが利用可能になったかのような感覚を得られます。

ポイント

App Shell Architectureは、PWAの高速起動を実現するための重要な設計思想です。UIの骨格を事前にキャッシュすることで、ネットワーク状況に左右されず、ユーザーに一貫した高速な体験を提供します。


BENEFITS & USE CASES

PWAがもたらすユーザー体験とビジネス価値

PWAは単なる技術トレンドに留まらず、ユーザー体験の劇的な向上とビジネス成果への明確な貢献をもたらします。ここでは、その具体的なメリットと多様なユースケースを見ていきましょう。

ユーザー体験の向上:「アプリのような」快適さ

PWAの最大の魅力は、Webサイトがネイティブアプリに匹敵する、あるいはそれを超えるユーザー体験を提供できる点です。

メリット

高速な読み込みとスムーズな操作性: Service Workerによるキャッシュ戦略とApp Shell Architectureにより、初回ロード後にはほぼ瞬時にコンテンツが表示され、ネイティブアプリと遜色のないスクロールやトランジションが可能です。これにより、ユーザーの離脱率が大幅に低下します。例えば、Googleの調査では、読み込み速度が1秒遅れるごとにコンバージョン率が7%低下すると報告されています。

オフライン対応: ネットワーク接続がない場所でも、キャッシュされたコンテンツを閲覧したり、一部の機能を操作したりできます。これは、電波状況が悪い場所や移動中など、多くのシチュエーションでユーザーにとって大きな利便性となります。

ホーム画面への追加と全画面表示: ユーザーはPWAをスマートフォンのホーム画面に簡単にアイコンとして追加できます。これにより、ブラウザを開いてURLを入力する手間がなくなり、ワンタップで起動可能です。また、全画面表示モードでは、ブラウザのUIが非表示になり、より没入感のあるアプリ体験を提供します。

プッシュ通知による再エンゲージメント: ユーザーの許可を得て、重要な情報やパーソナライズされたコンテンツを直接通知できます。これにより、ユーザーの再訪問を促し、アプリの利用頻度を高める効果が期待できます。

“ユーザーは優れた体験を求め、PWAはその期待に応えるための最も効果的な手段の一つです。アプリストアの壁を越え、Webの持つ無限の可能性を解き放ちます。”

— Web開発者コミュニティ

ビジネスへの影響:コンバージョンとエンゲージメントの向上

PWAは、ユーザー体験の向上を通じて、ビジネス指標にも大きなプラスの影響を与えます。

ビジネスメリット

コンバージョン率の向上: 高速な読み込みとスムーズな操作性は、ユーザーがサイト内で迷わず目的を達成する手助けとなり、結果として購入や登録などのコンバージョン率を高めます。多くの企業がPWA導入後、コンバージョン率が平均で20%以上向上したと報告しています。

エンゲージメントの強化: プッシュ通知やホーム画面への追加機能は、ユーザーの再訪問を促し、アプリの利用頻度を高めます。これにより、ユーザーのロイヤリティが向上し、長期的な関係構築に貢献します。

開発・運用コストの削減: ネイティブアプリのようにiOSとAndroidそれぞれに開発する必要がなく、単一のコードベースで複数のプラットフォームに対応できるため、開発コストとメンテナンスコストを大幅に削減できます。アプリストアの審査や手数料も不要です。

SEO効果の向上: PWAの高速性は、Googleの検索ランキング要因の一つであるページスピードに寄与します。また、モバイルフレンドリーな設計は、モバイル検索での視認性を高め、オーガニックトラフィックの増加に繋がります。

具体的なユースケースと成功事例

PWAは、ECサイト、メディアサイト、SaaSアプリケーション、旅行サイトなど、幅広い分野で導入され、その効果を発揮しています。

事例1: Twitter Lite

Twitterは、データ通信量の制限がある地域や低速ネットワーク環境のユーザー向けにPWA版「Twitter Lite」を提供しました。これにより、データ使用量を70%削減し、ページ読み込み速度を30%向上させ、エンゲージメント率を20%増加させることに成功しました。

事例2: Starbucks

Starbucksは、PWAを導入することで、オフライン環境でもメニューの閲覧や注文が可能になりました。これにより、デスクトップユーザーの注文数が23%増加し、アプリの利用頻度も向上しました。

事例3: Pinterest

Pinterestは、Webサイトのユーザー体験を改善するためにPWAを導入しました。その結果、Webサイト滞在時間が40%増加、広告収益が44%増加、コアエンゲージメントが60%増加という驚くべき成果を達成しています。

これらの事例は、PWAが単なる「おまけ機能」ではなく、ビジネス成長のための強力な戦略ツールであることを明確に示しています。2026年現在、多くの企業がPWAへの移行を進めており、今後もその導入は加速していくでしょう。

ポイント

PWAは、高速性、オフライン対応、プッシュ通知、ホーム画面追加といった特性を通じて、ユーザー体験を劇的に向上させます。これにより、コンバージョン率の向上、エンゲージメントの強化、開発コストの削減、SEO効果の向上など、ビジネスに多大な価値をもたらすことが実証されています。


CHALLENGES & SOLUTIONS

PWA開発における一般的な課題と解決策

PWAは多くのメリットをもたらしますが、開発プロセスにおいてはいくつかの課題に直面することもあります。ここでは、代表的な課題とその解決策について解説します。

問題 01

ブラウザサポートと互換性の問題

PWAの主要な機能であるService WorkerやWeb App Manifestは、主要なモダンブラウザ(Chrome, Firefox, Edge, Safari)で広くサポートされていますが、一部の古いブラウザや特定の機能については互換性の違いが存在します。特にiOS Safariは、プッシュ通知やホーム画面への追加機能において、Android Chromeと比較して機能制限がある場合があります。

解決策 — プログレッシブエンハンスメントと機能検出

PWAは「プログレッシブエンハンスメント」の原則に基づいて設計されるべきです。これは、すべてのユーザーに基本的な機能を提供しつつ、PWAをサポートするブラウザのユーザーには追加の機能や体験を提供するという考え方です。Service Workerの登録前に'serviceWorker' in navigatorのような機能検出を行うことで、サポートされていない環境でもWebサイトが問題なく動作するようにします。


if ('serviceWorker' in navigator) {
  // Service Workerがサポートされている場合の処理
  navigator.serviceWorker.register('/service-worker.js').then(...);
} else {
  // Service Workerがサポートされていない場合のフォールバック処理
  console.log('Service Worker is not supported in this browser.');
}

if ('BeforeInstallPromptEvent' in window) {
  // ホーム画面への追加プロンプトがサポートされている場合の処理
  window.addEventListener('beforeinstallprompt', (e) => {
    e.preventDefault(); // デフォルトのプロンプトを阻止
    // 後で独自のUIでプロンプトを表示するロジック
  });
}

問題 02

キャッシュ戦略の複雑さ

Service WorkerによるキャッシュはPWAの核となる機能ですが、どのようなリソースをいつ、どのようにキャッシュし、いつ更新するかというキャッシュ戦略の設計は非常に複雑になることがあります。間違ったキャッシュ戦略は、ユーザーに古いコンテンツを表示したり、ストレージを不必要に消費したりする原因となります。

解決策 — 適切なキャッシュ戦略の選択とWorkboxの活用

コンテンツの種類(静的アセット、動的APIデータなど)に応じて、以下のようなキャッシュ戦略を使い分けます。

  • Cache First (Cache-only): アプリシェルや静的アセットなど、更新頻度が低いコンテンツに最適。
  • Network First: 常に最新情報を表示したい動的コンテンツに。ネットワークが利用できない場合はキャッシュから。
  • Stale-While-Revalidate: キャッシュから即座にコンテンツを返しつつ、バックグラウンドでネットワークから最新版を取得してキャッシュを更新。高速性と鮮度を両立。

Googleが提供するライブラリWorkboxを利用すると、これらのキャッシュ戦略を容易に実装・管理できます。Workboxは、Service Workerの複雑な記述を抽象化し、ビルドプロセスに統合することで、開発者の負担を大幅に軽減します。

問題 03

プッシュ通知の乱用とユーザーへの配慮

プッシュ通知は強力なエンゲージメントツールですが、乱用するとユーザーに不快感を与え、通知をブロックされたり、PWA自体をアンインストールされたりするリスクがあります。特に、サイト訪問直後に通知許可を求めるプロンプトを表示することは、ユーザー体験を損なう原因となります。

解決策 — 許可プロンプトのタイミングと価値の提示

プッシュ通知の許可プロンプトは、ユーザーがそのサイトの価値を理解し、通知を受け取ることにメリットを感じるタイミングで表示することが重要です。例えば、以下のようなアプローチを検討します。

  • ユーザーアクション後: 注文完了後や、お気に入りリストへの追加後など、特定の行動を完了したユーザーに通知のメリットを説明した上で許可を求める。
  • サイト滞在時間: ある程度の時間サイトを閲覧し、コンテンツに興味を示しているユーザーにのみプロンプトを表示する。
  • カスタムUIの導入: ブラウザのネイティブプロンプトの前に、サイト独自のUIで通知の価値を説明し、ユーザーが「通知を受け取る」ボタンをクリックした場合にのみネイティブプロンプトを表示する。

また、送信する通知の内容も、パーソナライズされ、関連性が高く、ユーザーにとって価値のあるものであるべきです。過度な頻度での通知は避け、A/Bテストを通じて最適な通知戦略を模索しましょう。

ポイント

PWA開発では、ブラウザの互換性、キャッシュ戦略の複雑さ、プッシュ通知の適切な管理といった課題に直面します。これらは、プログレッシブエンハンスメント、Workboxの活用、ユーザー中心の通知戦略によって効果的に解決できます。


IMPLEMENTATION GUIDE

PWA実装の具体的なステップとコード例

ここからは、実際にPWAを実装するための具体的なステップとコード例を見ていきましょう。基本的なPWAを構築するために必要な要素に焦点を当てます。

ステップ1: HTTPS化の確認

前述の通り、PWAの要件としてHTTPSは必須です。サイトがhttps://でアクセスできることを確認してください。まだの場合、Let’s Encryptなどの無料証明書サービスを利用するか、ホスティングプロバイダーが提供するSSL/TLS証明書を導入してください。

HTTPS化の確認と設定

WebサイトがHTTPSで提供されていることを確認します。もしHTTPでしかアクセスできない場合は、SSL/TLS証明書を取得し、Webサーバーを設定してHTTPSを有効にしてください。多くのレンタルサーバーやCDNサービスでは、簡単な設定でHTTPS化が可能です。

ステップ2: Web App Manifestの作成とリンク

まず、manifest.jsonファイルを作成し、Webサイトのルートディレクトリに配置します。次に、HTMLの<head>セクションからこのファイルをリンクします。

manifest.jsonの作成

以下の内容でmanifest.jsonを作成し、Webサイトのルートディレクトリに保存します。アイコン画像も/iconsディレクトリに配置してください。

コード解説

このマニフェストは、PWAの表示に関する基本的な情報を提供します。display: "standalone"は、ブラウザのUIなしでスタンドアローンアプリとして表示されることを意味します。


// public/manifest.json
{
  "name": "Kwonteki PWA Demo App",
  "short_name": "Kwonteki PWA",
  "description": "KwontekiのPWAデモアプリです。",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#f0f3ff",
  "theme_color": "#667eea",
  "icons": [
    {
      "src": "/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

次に、HTMLファイルにマニフェストをリンクします。

コード解説

<head>タグ内に<link rel="manifest" href="/manifest.json">を追加します。これでブラウザはPWAのメタデータを認識し、ホーム画面への追加機能などを有効にします。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kwonteki PWA Demo</title>
    <link rel="manifest" href="/manifest.json">
    <!-- その他のメタタグ -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Kwonteki PWAへようこそ!</h1>
    <p>これはPWAのデモページです。オフラインでもアクセスできます。</p>
    <img src="/images/pwa-hero.jpg" alt="PWA hero image" style="max-width: 100%; height: auto; padding-bottom: 16px;">
    <script src="app.js"></script>
</body>
</html>

ステップ3: Service Workerの登録と実装

Service Workerは、PWAのオフライン機能と高速化の鍵を握ります。まず、メインのJavaScriptファイル(例: app.js)からService Worker(例: service-worker.js)を登録します。

Service Workerの登録 (app.js)

以下のコードをapp.jsに記述し、Service Workerを登録します。

コード解説

このスクリプトは、ブラウザがService Worker APIをサポートしているかを確認し、ページが完全に読み込まれた後に/service-worker.jsファイルを登録します。


// public/app.js
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/service-worker.js')
      .then(registration => {
        console.log('Service Worker registered with scope:', registration.scope);
      })
      .catch(error => {
        console.error('Service Worker registration failed:', error);
      });
  });
}

次に、service-worker.jsファイルにキャッシュ戦略を実装します。ここでは、シンプルにアプリシェルをキャッシュする「Cache First」戦略を採用します。

コード解説

このService Workerは、インストール時にCACHE_NAMEで定義されたすべてのリソースをキャッシュに保存します。fetchイベントリスナーは、すべてのネットワークリクエストを傍受し、キャッシュにリソースがあればそれを返し、なければネットワークから取得します。これにより、オフライン対応と高速表示を実現します。


// public/service-worker.js
const CACHE_NAME = 'kwonteki-pwa-cache-v1';
const urlsToCache = [
  '/',
  '/index.html',
  '/style.css',
  '/app.js',
  '/icons/icon-192x192.png',
  '/icons/icon-512x512.png',
  '/images/pwa-hero.jpg' // 追加した画像もキャッシュ対象に
];

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        // キャッシュにリソースがあればそれを返す
        if (response) {
          return response;
        }
        // なければネットワークから取得
        return fetch(event.request);
      })
  );
});

self.addEventListener('activate', event => {
  const cacheWhitelist = [CACHE_NAME];
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          if (cacheWhitelist.indexOf(cacheName) === -1) {
            return caches.delete(cacheName); // 古いキャッシュを削除
          }
        })
      );
    })
  );
});

ステップ4: オフライン対応のテスト

PWAが正しくオフライン対応しているかを確認するために、ブラウザの開発者ツールを使用します。

4

Chrome DevToolsでのテスト

1. PWAをChromeブラウザで開きます。
2. 開発者ツール(F12または右クリック > 検証)を開きます。
3. 「Application」タブに移動し、「Service Workers」セクションを開きます。登録されたService Workerが表示されていることを確認します。
4. 「Network」タブに移動し、「Offline」チェックボックスをオンにします。
5. ページをリロードします。オフライン状態でもページが正しく表示されれば成功です。

キャッシュされたリソースは「Cache Storage」セクションで確認できます。

Chrome DevTools Application tab screenshot

ステップ5: Lighthouseでの監査と改善

Google Lighthouseは、PWAの品質を測定し、改善点を見つけるための非常に強力なツールです。PWAの開発プロセスにおいて定期的にLighthouse監査を実行し、スコアの改善に努めましょう。

5

LighthouseによるPWAスコアの監査

1. PWAをChromeブラウザで開きます。
2. 開発者ツールを開きます。
3. 「Lighthouse」タブに移動します。
4. 「Categories」で「Progressive Web App」をチェックし、他の必要なカテゴリも選択します。
5. 「Generate report」をクリックします。

レポートには、PWAの要件を満たしているかどうかのチェックリストと、パフォーマンス、アクセシビリティなどの改善提案が表示されます。これらの提案に基づいてコードを修正し、PWAの品質を向上させましょう。

Google Lighthouse PWA report screenshot

ポイント

PWA実装の基本ステップは、HTTPS化、Web App Manifestの作成、Service Workerの登録とキャッシュ戦略の実装、そしてLighthouseによる継続的な監査と改善です。これらのステップを着実に実行することで、高品質なPWAを構築できます。

FAQ

よくある質問 (FAQ)


カテゴリー フロントエンド開発 タグ