Service Worker の基本とは

PWAの学習をいよいよ開始します

目次

PWAとは何か

簡単に言うと:
Service Worker =
Webアプリとサーバーの間に入る「優秀な秘書」🤵

自分の代わりに:
✅ データをキャッシュしておく
✅ オフラインでも対応する
✅ バックグラウンドで働く

比喩:通常のWebサイト:
📧 メールが来るたびに郵便局に取りに行く
↓
郵便局が閉まっていたら受け取れない
インターネットがないと何もできない

PWA(Service Worker):
📦 私書箱(Service Worker)が郵便を受け取る
↓
✅ 見たいときに見られる
✅ オフラインでも過去のメールは読める
✅ 新しいメールが来たら通知してくれる

Service Workerの仕組み

通常のWebサイト:

📱 Webアプリ(ブラウザ)
↓ リクエスト(データください!)
↓
🌐 インターネット
↓
🖥️ サーバー
↓ レスポンス(はい、データです)
↓
📱 Webアプリ(表示)

問題:
❌ インターネットがないと何もできない
❌ 毎回サーバーに問い合わせる(遅い)
❌ バックグラウンドで何もできない

PWA(Service Worker あり):

📱 Webアプリ(ブラウザ)
↓ リクエスト
↓
🤵 Service Worker(傍受する!)
↓
「このデータ、キャッシュにあるかな?」
↓
📦 キャッシュ
↓
ある場合: すぐ返す(超速い!)✅
ない場合: サーバーに取りに行く
↓
🌐 インターネット
↓
🖥️ サーバー
↓
🤵 Service Worker(受け取る)
↓
📦 キャッシュに保存
↓
📱 Webアプリ(表示)

メリット:
✅ オフラインでもキャッシュから表示
✅ 2回目以降が超速い
✅ バックグラウンドでも動く

Service Workerができること

オフライン対応 ⭐⭐⭐⭐⭐
✅ インターネットなしでもアプリが開く
✅ キャッシュしたデータは見られる
✅ 「オフラインです」というエラーが出ない

キャッシュ管理 ⭐⭐⭐⭐⭐
✅ よく使うデータを自動保存
✅ 2回目以降が超速い
✅ サーバーの負荷も減る

例:
初回: サーバーから取得(1秒)
2回目: キャッシュから(0.1秒)

  1. バックグラウンド動作 ⭐⭐⭐⭐
    ✅ アプリを閉じていても動く
    ✅ プッシュ通知を受け取れる
    ✅ バックグラウンド同期

例:
アプリを閉じていても通知が来る
夜中に自動でデータを更新
オフラインで記録したデータを後で同期

  1. ネットワークの最適化 ⭐⭐⭐⭐
    ✅ 必要なときだけサーバーにアクセス
    ✅ 画像などを事前にキャッシュ
    ✅ データ通信量を削減

例:

  • アプリアイコン: 初回のみダウンロード
  • UI画像: キャッシュから表示
  • データ: 変更があったときだけ取得

Service Workerは必須?

PWAには必須!

PWAの条件:
✅ HTTPS
✅ Manifest.json
✅ Service Worker ← これがないとPWAじゃない

Flutter Webでも使える?

Flutter Web でビルドすると:
→ HTML/CSS/JavaScriptが生成される
→ そこに Service Worker を追加できる
→ PWA化完了!

実装は難しいか

基本パターンは決まっているらしい:

  1. install イベント(初回のみ)
  2. fetch イベント(リクエストの傍受)
  3. activate イベント(更新時)

→ コピペでもOK!
→ ライブラリもある(Workbox)

とりあえず今日は理解まで

目次