バックグラウンド同期と更新
オンラインに戻ったときにキャッシュを更新して同期します。
「バックグラウンド同期と更新」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。
キャッシュを最新に保つ
オフラインに対応したアプリでは、更新を適切に処理する必要があります。新しいアセットを配布し、古いアセットを削除し、接続が戻ったときに失敗した操作を再試行します。サービスワーカーは、この3つすべてのための機能を提供します。
バージョン付きキャッシュ名
最もシンプルな更新方法は、バージョン付きのキャッシュ名を使うことです。バージョンを上げると新しいキャッシュが作成され、古いキャッシュはアクティベーション時に削除できます。
const CACHE = 'app-v2'; // was 'app-v1'
self.addEventListener('install', (e) => {
e.waitUntil(
caches.open(CACHE).then(c => c.addAll(ASSETS))
);
});古いキャッシュの削除
activate イベントで、すべてのキャッシュ名を一覧にし、現在のバージョンでないものを削除します。これによりストレージを解放し、古いアセットを取り除けます。
self.addEventListener('activate', (e) => {
e.waitUntil(
caches.keys().then(names =>
Promise.all(
names.filter(n => n !== CACHE)
.map(n => caches.delete(n))
)
)
);
});待機中のワーカー
デフォルトでは、新しいワーカーはインストールされても、古いワーカーが制御しているすべてのページが閉じられるまで待機中の状態に留まります。これにより、セッション途中でバージョンが食い違うのを防ぎます。
skipWaiting
self.skipWaiting() は、待機中のワーカーにすぐアクティベートするよう指示し、タブが閉じられるのを待たずに制御を開始させます。更新をすぐに適用したい場合は、install 内で呼び出します。
self.addEventListener('install', (event) => {
self.skipWaiting(); // activate as soon as installed
});clients.claim
アクティベート後に self.clients.claim() を呼び出すと、新しいワーカーはすでに開いているページをすぐに制御できます。これにより、今後のナビゲーションだけでなく、既存のページも制御対象になります。
self.addEventListener('activate', (event) => {
event.waitUntil(self.clients.claim());
});ページからの更新の検出
ページでは、登録の updatefound イベントを使って新しいワーカーを検出し、最新バージョンを取得するために再読み込みするようユーザーに促せます。
reg.addEventListener('updatefound', () => {
const sw = reg.installing;
sw.addEventListener('statechange', () => {
if (sw.state === 'installed') {
console.log('new version available - reload to update');
}
});
});バックグラウンド同期
Background Sync API を使うと、デバイスが接続状態になるまで操作(フォームの送信など)を延期できます。同期タグを登録すると、オンラインになったときにブラウザーが sync イベントを発生させます。
// In the page, after queuing data:
reg.sync.register('send-messages')
.then(() => console.log('sync scheduled'));sync イベントの処理
サービスワーカーで sync を監視し、タグを照合します。waitUntil を使うと、再試行が完了するまでブラウザーがワーカーを稼働させ続けます。
self.addEventListener('sync', (event) => {
if (event.tag === 'send-messages') {
event.waitUntil(sendQueuedMessages());
}
});キューに入れてから同期するパターン
堅牢なオフライン処理の流れは、保留中の操作を IndexedDB に保存し、同期を登録して、sync ハンドラーでキューを読み取り、各項目を POST して成功したら削除するというものです。
async function sendQueuedMessages() {
const items = await readQueueFromIndexedDB();
for (const item of items) {
await fetch('/api/messages', {
method: 'POST',
body: JSON.stringify(item)
});
}
await clearQueue();
}更新と同期のまとめ
これらの機能を組み合わせることで、アプリの回復力が高まります。バージョン付きキャッシュとクリーンアップでアセットを最新に保ち、skipWaiting/clients.claim で適用のタイミングを制御し、ユーザーがオンラインに戻ったら Background Sync で操作を確実に完了できます。
クイックチェック
更新とバックグラウンド同期についての理解度を確認します。
まとめ
バックグラウンド同期と更新について学びました。
- バージョン付きキャッシュ名を使い、
activateで古いキャッシュを削除する。 skipWaitingとclients.claimで更新のタイミングを制御する。updatefoundで新しいバージョンを検出する。- Background Sync は
syncイベントを使い、オンラインになるまで操作を延期する。 - IndexedDB にキューを保存し、同期時に送信する。
Service Workers とオフラインキャッシュの学習は完了です。
よくある質問
「バックグラウンド同期と更新」レッスンは無料ですか?
はい。「バックグラウンド同期と更新」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。
「バックグラウンド同期と更新」で何を学びますか?
オンラインに戻ったときにキャッシュを更新して同期します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
JavaScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「バックグラウンド同期と更新」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJavaScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Service Worker を登録する
- Cache API
- キャッシュ戦略
- バックグラウンド同期と更新