HTMLツール

無料 Service Workerモジュールテンプレートジェネレーター

キャッシュ戦略、プリキャッシュリスト、オフラインサポート付きのESモジュールService Workerテンプレートを生成します。

ツールを読み込み中...

Service Workerモジュールテンプレートジェネレーターとは

ESモジュールサービスワーカーはregister()呼び出しでtype: 'module'オプションを使用し、importScripts()の代わりにimport/export構文を可能にします。これにより、標準的なJavaScriptモジュールパターン、静的インポート、より優れた依存関係管理が実現します。設定可能なキャッシュ戦略(cache-first、network-first、stale-while-revalidate、network-only、cache-only)と組み合わせることで、サービスワーカーはネットワークリクエストの処理方法を制御し、インストール時に重要なアセットをプリキャッシュし、オフラインフォールバックページを提供できます。

クイックアンサー

設定可能なキャッシュ戦略(cache-first、network-first、stale-while-revalidate、network-only、cache-only)、プリキャッシュURLリスト、自動アクティベーション(skipWaiting + clients.claim)、オフラインフォールバックページをサポートするESモジュールサービスワーカーテンプレートを生成します。importScriptsの代わりに静的import/exportを使用したESモジュール構文を使用します。

Last updated: 2026-05-31

制限事項

  • ESモジュールサービスワーカーは動的import()をサポートしていません。すべてのモジュール依存関係はトップレベルで静的に宣言する必要があります。動的コードローディングには、代わりに従来のimportScriptsパターンが必要です。
  • クロスオリジンモジュールスクリプトはサービスワーカーでサポートされていません。インポートされるモジュールは同一オリジンである必要があります。CDNからスクリプトをロードする必要がある場合は、従来のサービスワーカーパターンを使用するか、コードをローカルにバンドルしてください。
  • サービスワーカーのライフサイクル(install -> waiting -> activate -> update)は開発中にバージョン競合を引き起こす可能性があります。ブラウザDevToolsの「Update on Reload」および「Bypass for Network」オプションが役立ちますが、本番環境でのバージョン管理には注意深いキャッシュ命名とクリーンアップロジックが必要です。

Sources:MDN Web Docs · W3C Specifications · jquery.app on GitHub

使い方

  1. ルートタイプごとにキャッシュ戦略を選択します。静的アセットにはcache-first、API呼び出しにはnetwork-first、頻繁に更新されるコンテンツにはstale-while-revalidate、機密性の高いエンドポイントにはnetwork-only。
  2. インストールイベント中にプリキャッシュするURLのリストを入力します。これらはフェッチされてキャッシュに保存されるため、オフラインでも即座に動作します。
  3. 自動アクティベーションを切り替えてskipWaitingとclients.claimを有効にします。これにより、次のページロードを待たずに新しいサービスワーカーがすべてのクライアントで即座にアクティブになります。
  4. 必要に応じてオフラインフォールバックページを有効にします。フェッチが失敗し、リソースがキャッシュにない場合、サービスワーカーはブラウザのオフラインエラーの代わりにフォールバックページを提供します。

主な用途

  • インストール時にすべての静的アセットをキャッシュし、APIデータにはnetwork-firstを使用し、キャッシュされていないルートにはオフラインフォールバックページを提供するプログレッシブウェブアプリを作成します。
  • 記事にstale-while-revalidateキャッシングを使用するコンテンツサイトを構築します。キャッシュされたバージョンを即座に提供し、バックグラウンドでキャッシュを更新して、ネットワークを待たずにコンテンツを最新に保ちます。
  • 開発者が独自のキャッシュ戦略、プリキャッシュリスト、オフライン動作でカスタマイズできるサービスワーカースケルトンを含むプロジェクトテンプレートを生成します。

用途

使用例

完全オフライン対応の静的サイトPWA

ドキュメントサイトでオフライン動作を実現します。CSS、JS、フォントにはcache-first戦略、HTMLページにはstale-while-revalidate、検索クエリにはnetwork-first、オフラインフォールバックページを備えたサービスワーカーを生成します。プリキャッシュリストにはすべての重要なページが含まれているため、初回訪問後はネットワークアクセスなしでサイト全体が動作します。

共有ユーティリティを持つモジュールベースのサービスワーカー

複数のPWAを管理するチームが、サービスワーカー間でキャッシュユーティリティ関数を共有したいと考えています。静的インポートを使用したESモジュールテンプレートを使用します:import { cacheFirst, networkFirst } from './cache-utils.js'。共有ユーティリティモジュールは個別に管理でき、すべてのサービスワーカーにインポートされるため、importScriptsとグローバルスコープの汚染が不要になります。

よくあるミス

  • ESモジュールサービスワーカー内でimportScripts()を使用する。ESモジュールは静的import/exportをサポートしており、importScripts()は不要です。両方を混在させると実行時エラーが発生します。代わりに標準のimport文を使用してください。
  • アクティベートイベントでキャッシュクリーンアップを行わない。古いサービスワーカーバージョンのキャッシュが蓄積されます。常にアクティベートハンドラを追加して、キャッシュ名をバージョン管理されたリストと比較し、古いキャッシュストアを削除してください。
  • サービスワーカーのスコープを正しく設定し忘れる。サービスワーカーのスコープはそのURLパスによって決まります。/sw.jsのサービスワーカーは/以下を制御しますが、/blog/sw.jsのサービスワーカーは/blog/以下のみを制御します。混乱を避けるために、register()で明示的にscopeオプションを使用してください。

検証

  1. DevToolsのApplicationパネルを開き、Service Workersに移動して、サービスワーカーが「activated and running」ステータスで登録されていることを確認します。スコープが期待されるパス範囲をカバーしていることを確認します。
  2. DevTools(Networkタブ)でオフラインモードに切り替えてページをリロードします。キャッシュされたページがエラーなくロードされ、キャッシュされていないURLにはオフラインフォールバックページが表示されることを確認します。コンソールでfetchハンドラのエラーを確認します。

FAQ

Service WorkerモジュールテンプレートジェネレーターのFAQ

ESモジュールサービスワーカーが従来のimportScriptsベースのワーカーよりも優れている点は何ですか?

ESモジュールサービスワーカーはネイティブのimport/exportをサポートし、標準的なJavaScriptモジュールパターン、静的解析、ツリーシェイキング、より優れた依存関係管理を可能にします。importScriptsのグローバルスコープ汚染を回避し、欠落したインポートに対する適切なエラーハンドリングを提供します。ただし、ESモジュールサービスワーカーは同一オリジンのインポートのみに制限され、動的import()やクロスオリジンモジュールスクリプトはサポートしていません。

cache-firstとstale-while-revalidateは実際の動作でどのように異なりますか?

cache-firstはネットワークを待たずにキャッシュされたレスポンスを即座に返します。キャッシュミスが発生した場合のみネットワークからフェッチします。stale-while-revalidateはキャッシュされたレスポンスを即座に返すと同時に、次回のためにキャッシュを更新するネットワークリクエストをバックグラウンドで行います。cache-firstはバージョン管理されたCSS/JSファイルのような不変アセットに最適です。stale-while-revalidateは、ある程度最新であるべきだが更新の遅延を許容できるHTMLページやAPIレスポンスに適しています。

登録後、サービスワーカーがすぐにアクティベートされないのはなぜですか?

デフォルトでは、新しいサービスワーカーは既存のすべてのクライアントが閉じるか移動するまで待機状態になります。これにより、同じアプリの異なるページを2つのサービスワーカーが制御するバージョン競合を防ぎます。インストールまたはアクティベートイベント中にself.skipWaiting()を呼び出すと待機状態がバイパスされ、clients.claim()ですべての非制御クライアントを即座に制御下に置きます。生成されたテンプレートにはオプショントグルとしてこれらが含まれています。

ESモジュールサービスワーカー内で動的import()を使用できますか?

いいえ。ESモジュールサービスワーカーは静的import宣言をサポートしていますが、動的import()呼び出しはサポートしていません。動的インポートはモジュールマップを実行時に変更可能にする必要があり、サービスワーカーの実行モデルと競合します。すべてのモジュール依存関係はファイルのトップレベルで静的に宣言する必要があります。動的コードローディングが必要な場合は、さまざまなシナリオをカバーする個別の静的モジュールにロジックを分割するか、importScriptsを使用した従来のサービスワーカーパターンを使用してください。

関連ツール

その他のhtmlツール

こちらもお試しください

こちらもお試しください