※本ページにはプロモーション(広告)が含まれています
ブラウザの裏で動くJavaScript。オフライン対応・プッシュ通知・バックグラウンド同期などを実現するPWAの心臓部。
詳しい解説
Service Workerは、ブラウザとページの間に常駐するJavaScriptファイルで、ネットワークリクエストの傍受、キャッシュの管理、プッシュ通知の受信などをバックグラウンドで処理できる仕組みです。PWA(Progressive Web App)の中核技術であり、オフライン動作や高速化を実現する要となっています。
仕組みは、対象ページが最初にアクセスされたときにブラウザへ登録され、その後はページを閉じても独立して動き続けます。ページからのリクエストは全てService Workerを経由でき、『ネットワークが繋がっていればサーバーへ、なければキャッシュから返す』といった振る舞いを自在にカスタマイズできます。これが『オフラインでもアプリが動く』体験の正体です。
主な機能は、①フェッチイベントの傍受によるキャッシュ戦略(Cache First、Network First、Stale-While-Revalidateなど)、②Push APIと連携したプッシュ通知、③Background Sync APIによる通信復帰時の同期、④Periodic Background Syncによる定期的なデータ更新、などです。
セキュリティ上、Service WorkerはHTTPS配信のページ(またはlocalhost)でのみ登録可能で、DOMには直接アクセスできません。メッセージチャネル(postMessage)でページと通信します。スコープも登録したファイルの配置ディレクトリ以下に限定されます。
実装は複雑になりがちですが、Google提供のWorkboxライブラリを使うと、典型的なキャッシュ戦略を数行で宣言的に書けます。デバッグはChrome DevToolsの『Application > Service Workers』タブで、登録状況・キャッシュ内容・プッシュ送信などを確認できます。
更新タイミングが独特で、ブラウザは次回ナビゲーション時に新バージョンを検出して待機状態にするため、即時反映には `skipWaiting` と `clients.claim` を適切に呼ぶ必要があります。
Google ドキュメントを開いている途中でネットが切れても、編集を続けられ、繋がったら自動で同期される…あの体験を支える技術のひとつがService Workerです。キャッシュでページ本体を即座に表示し、オフライン時もUIは動かし、Background Syncで書き込みをキューに入れ、復帰時にサーバーへ反映するという連携で、『繋がっていることを前提にしない』アプリを作れます。
別の呼び方
SW
バックグラウンドワーカー
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!