サービスワーカー API
メモ: ã“ã®æ©Ÿèƒ½ã¯ã‚¦ã‚§ãƒ–ワーカー内ã§åˆ©ç”¨å¯èƒ½ã§ã™ã€‚
サービスワーカーã¯ã€åŸºæœ¬çš„ã«ã‚¦ã‚§ãƒ–アプリケーションã€ãƒ–ラウザーã€ãã—ã¦ï¼ˆã‚‚ã—繋ãŒã£ã¦ã„れã°ï¼‰ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®é–“ã«ä»‹åœ¨ã™ã‚‹ãƒ—ãƒã‚シーサーãƒãƒ¼ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã„ã¾ã™ã€‚ã“れã¯ã€ã‚ˆã‚Šã‚ˆã„ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã®æ“作性をå¯èƒ½ã«ã™ã‚‹ã‚ˆã†ã«æ„図ã•れã¦ãŠã‚Šã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ä»‹åœ¨ã—ã¦ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ä½¿ç”¨å¯å¦ã®çжæ³ã«åŸºã¥ã„ã¦é©åˆ‡ãªå¯¾å¿œã‚’å–ã£ãŸã‚Šã€ã‚µãƒ¼ãƒãƒ¼ä¸Šã«ã‚る資産を更新ã—ãŸã‚Šã—ã¾ã™ã€‚ã¾ãŸã€ãƒ—ッシュ通知やãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰åŒæœŸã® API 群ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚‚ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ã‚µãƒ¼ãƒ“ã‚¹ãƒ¯ãƒ¼ã‚«ãƒ¼ã®æ¦‚念ã¨ä½¿ã„æ–¹
サービスワーカーã¯ã€ã‚るオリジンã¨ãƒ‘スã«å¯¾ã—ã¦ç™»éŒ²ã•れãŸã‚¤ãƒ™ãƒ³ãƒˆé§†å‹•åž‹ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã§ã™ã€‚ JavaScript ファイルã®å½¢ã‚’å–りã€ãƒŠãƒ“ゲーションやリソースã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’横å–りや改変ã—ãŸã‚Šç´°ã‹ã„粒度ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’ã‚ャッシュã™ã‚‹ã“ã¨ã§é–¢é€£ä»˜ã‘られãŸã‚¦ã‚§ãƒ–ページやサイトを制御ã—ã€ãれãžã‚Œã®çжæ³ï¼ˆã‚‚ã£ã¨ã‚‚é¡•è‘—ãªä¾‹ã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒåˆ©ç”¨ã§ããªã„ã¨ã)ã«ã‚¢ãƒ—リãŒã©ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã†ã‹ã‚’完全ã«åˆ¶å¾¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
サービスワーカーã¯ãƒ¯ãƒ¼ã‚«ãƒ¼ã®ã‚³ãƒ³ãƒ†ã‚ストã§å®Ÿè¡Œã•れã¾ã™ã€‚従ã£ã¦ã€DOM ã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ããšã€ã‚¢ãƒ—リを実行ã™ã‚‹ä¸»è¦ãª JavaScript ã¨ã¯ç•°ãªã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã§å®Ÿè¡Œã•れるãŸã‚ã€ä»–ã®ã‚¿ã‚¹ã‚¯ã‚’ブãƒãƒƒã‚¯ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。完全ã«éžåŒæœŸã§è¨è¨ˆã•れã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€åŒæœŸåž‹ã® XHR やウェブストレージã®ã‚ˆã†ãª API をサービスワーカーã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
サービスワーカー㮠JavaScript モジュールã¯å‹•çš„ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ããšã€import() ã¯ã‚µãƒ¼ãƒ“スワーカーã®ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã§å‘¼ã³å‡ºã•れるã¨ä¾‹å¤–を発生ã—ã¾ã™ã€‚
import 文を使用ã—ãŸé™çš„インãƒãƒ¼ãƒˆã¯è¨±å¯ã•れã¦ã„ã¾ã™ã€‚
サービスワーカーã¯ã‚»ã‚ュリティ上ã®ç†ç”±ã‹ã‚‰ã€ HTTPS 通信ã§ã®ã¿å‹•作ã—ã¾ã™ã€‚最もé‡è¦ãªã“ã¨ã¯ã€HTTP 接続ã¯ä¸é–“者攻撃ã«ã‚ˆã‚‹æ‚ªæ„ã®ã‚るコード注入ã®å½±éŸ¿ã‚’å—ã‘ã‚„ã™ãã€ã“ã†ã—ãŸå¼·åŠ›ãª API ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã•れるã¨ã€ãã®æ”»æ’ƒã¯ã‚ˆã‚Šæ‚ªã„ã‚‚ã®ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚Firefox ã§ã¯ãƒ—ライベートブラウジングモードã§ã‚µãƒ¼ãƒ“スワーカー API を利用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
メモ: Firefox ã§ã¯ã€ãƒ†ã‚¹ãƒˆã®ãŸã‚ã«ã‚µãƒ¼ãƒ“スワーカーを HTTP (安全ã§ã¯ãªã„) 上ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯ã€ HTTP ã«ã‚ˆã‚‹ã‚µãƒ¼ãƒ“スワーカーを有効化 (ツールボックスを開ã„ãŸã¨ã) オプションを Firefox Devtools è¨å®šãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã ã‘ã§ã™ã€‚
メモ: サービスワーカー㯠AppCache ã®ã‚ˆã†ãªã€ã“ã®åˆ†é‡Žã«ãŠã‘る以å‰ã®è©¦ã¿ã‚ˆã‚Šå‹ã£ã¦ã„ã¾ã™ã€‚以å‰ã®ã‚‚ã®ã¯ã€ã‚ãªãŸãŒã—よã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ãªã‹ã£ãŸã‚Šã€æƒ³å®šãŒæ£ã—ããªã‹ã£ãŸã¨ãã«å£Šã‚ŒãŸã‚Šã—ã¦ã„ãŸã®ã«å¯¾ã—ã¦ã€ã‚µãƒ¼ãƒ“スワーカーã¯ã‚ãªãŸãŒã™ã¹ã¦ã‚’ç´°ã‹ã制御ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ãŸã‚ã§ã™ã€‚
メモ: サービスワーカーã¯ãƒ—ãƒãƒŸã‚¹ã‚’é »ç¹ã«ä½¿ç”¨ã—ã¦ã€ãƒ¬ã‚¹ãƒãƒ³ã‚¹ãŒæ¥ã‚‹ã®ã‚’å¾…ã£ã¦ã‹ã‚‰ã€æˆåŠŸã¾ãŸã¯å¤±æ•—ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§å¿œç”ã—ã¾ã™ã€‚プãƒãƒŸã‚¹ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ã¯ã“ã®é ˜åŸŸã«å¯¾ã—ã¦ç†æƒ³çš„ãªã‚‚ã®ã§ã™ã€‚
登録
ã‚µãƒ¼ãƒ“ã‚¹ãƒ¯ãƒ¼ã‚«ãƒ¼ã¯æœ€åˆã« ServiceWorkerContainer.register() メソッドを使ã£ã¦ç™»éŒ²ã•れã¾ã™ã€‚æˆåŠŸã—ãŸã‚‰ã€ã‚µãƒ¼ãƒ“スワーカーãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•れã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ã‚¯ã‚»ã‚¹ã—㟠URL ã®ã‚ªãƒªã‚¸ãƒ³å†…全体ã€ã¾ãŸã¯æŒ‡å®šã—ãŸãã®ã‚µãƒ–セット内ã«å¯¾ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨æœ‰åŠ¹åŒ–ï¼ˆä¸‹è¨˜å‚照)ãŒè©¦ã¿ã‚‰ã‚Œã¾ã™ã€‚
ダウンãƒãƒ¼ãƒ‰ã¨ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨æœ‰åŠ¹åŒ–
ã“ã®æ®µéšŽã§ã€ã‚µãƒ¼ãƒ“スワーカーã¯ä»¥ä¸‹ã®ãƒ©ã‚¤ãƒ•サイクルã§å®Ÿè¡Œã•れã¾ã™ã€‚
- ダウンãƒãƒ¼ãƒ‰
- インストール
- 有効化
ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæœ€åˆã«ã‚µãƒ¼ãƒ“スワーカーãŒåˆ¶å¾¡ã™ã‚‹ã‚µã‚¤ãƒˆã‚„ページã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒ“スワーカーãŒç›´ã¡ã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•れã¾ã™ã€‚
ãã®å¾Œã€æ¬¡ã®å ´é¢ã§æ›´æ–°ã•れã¾ã™ã€‚
- スコープ内ã®ãƒšãƒ¼ã‚¸ã¸ã®ç§»å‹•ãŒç™ºç”Ÿã—ãŸã¨ã
- サービスワーカーã§ã‚¤ãƒ™ãƒ³ãƒˆãŒç™ºç”Ÿã—ã€ã‹ã¤éŽåŽ» 24 時間以内ã«ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ãŒè¡Œã‚れã¦ã„ãªã„å ´åˆ
ダウンãƒãƒ¼ãƒ‰ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ãŒæ–°ã—ã„ã¨åˆ†ã‹ã£ãŸå ´åˆã€æ—¢å˜ã®ã‚µãƒ¼ãƒ“スワーカーã¨ãƒã‚¤ãƒˆå˜ä½ã«æ¯”較ã—ã¦ç•°ãªã£ã¦ã„ãŸå ´åˆã‚„ã€ãã®ãƒšãƒ¼ã‚¸ã‚„ã‚µã‚¤ãƒˆã§æœ€åˆã®ã‚µãƒ¼ãƒ“スワーカーãŒè¦‹ã¤ã‹ã£ãŸå ´åˆã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒè©¦ã¿ã‚‰ã‚Œã¾ã™ã€‚
サービスワーカーãŒåˆã‚ã¦æœ‰åŠ¹åŒ–ã•れるã¨ãã§ã‚れã°ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒè©¦ã¿ã‚‰ã‚Œã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æˆåŠŸã—ãŸå¾Œã§ã€æœ‰åŠ¹åŒ–ã•れã¾ã™ã€‚
利用ã§ãã‚‹æ—¢å˜ã®ã‚µãƒ¼ãƒ“スワーカーãŒã‚ã£ãŸå ´åˆã¯ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ãŒã€ã¾ã 有効化 (activate) ã•れã¾ã›ã‚“。ã“ã®æ™‚点ã®ã‚‚ã®ã‚’å¾…æ©Ÿä¸ (waiting) ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã¨å‘¼ã³ã¾ã™ã€‚ã¾ã 使用ã—ã¦ã„ã‚‹å¤ã„サービスワーカーãŒèªã¿è¾¼ã‚“ã§ã„るページãŒãªããªã£ãŸæ™‚ã®ã¿ã€æœ‰åŠ¹åŒ–ã•れã¾ã™ã€‚ページãŒèªã¿è¾¼ã¾ã‚Œãªããªã£ãŸã‚‰ã™ãã«ã€æ–°ã—ã„ã‚µãƒ¼ãƒ“ã‚¹ãƒ¯ãƒ¼ã‚«ãƒ¼ãŒæœ‰åŠ¹åŒ–ã•れã¾ã™ï¼ˆã‚¢ã‚¯ãƒ†ã‚£ãƒ–ワーカーã«ãªã‚Šã¾ã™ï¼‰ã€‚ ServiceWorkerGlobalScope.skipWaiting() を使用ã™ã‚‹ã¨ã™ãã«æœ‰åŠ¹åŒ–ã™ã‚‹ã“ã¨ãŒã§ã〠Clients.claim() を使用ã—ã¦ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãƒ¯ãƒ¼ã‚«ãƒ¼ãŒæ—¢å˜ã®ãƒšãƒ¼ã‚¸ã®ç®¡ç†ã‚’å§‹ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
install ã‚’å—ã‘å–ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚イベントãŒç™ºè¡Œã•れãŸã¨ãã®æ¨™æº–çš„ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯ã€ä½¿ç”¨ã™ã‚‹ãŸã‚ã«ã‚µãƒ¼ãƒ“スワーカーを準備ã™ã‚‹ã“ã¨ã€ä¾‹ãˆã°çµ„è¾¼ã¿ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ API を使用ã—ã¦ã‚ャッシュを構築ã—ãŸã‚Šã€ã‚¢ãƒ—リãŒã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã®æ™‚ã«ä½¿ç”¨ã—ãŸã„資産をãã®ä¸ã«é…ç½®ã—ãŸã‚Šã™ã‚‹ã“ã¨ã§ã™ã€‚
activate イベントもã‚りã¾ã™ã€‚ã“ã®ã‚¤ãƒ™ãƒ³ãƒˆãŒç™ºè¡Œã•ã‚ŒãŸæ™‚点ã¯ã€å¤ã„ã‚ャッシュやã€å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚µãƒ¼ãƒ“スワーカーã«é–¢ã™ã‚‹ãã®ä»–ã®ã‚‚ã®ã‚’æ•´ç†ã™ã‚‹ã®ã«ã‚ˆã„タイミングã§ã™ã€‚
サービスワーカー㯠FetchEvent イベントを使用ã—ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç”ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚FetchEvent.respondWith() メソッドを使用ã—ã¦ã€ã“れらã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã™ã‚‹ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’何ã§ã‚‚æ€ã†ã‚ˆã†ã«å¤‰æ›´ã§ãã¾ã™ã€‚
メモ:
install/activate イベントã¯å®Œäº†ã™ã‚‹ã¾ã§ã«æ™‚é–“ãŒã‹ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã‚µãƒ¼ãƒ“スワーカーã®ä»•様書ã§ã¯ waitUntil() メソッドをæä¾›ã—ã¦ã„ã¾ã™ã€‚ install ã¾ãŸã¯ activate イベント内ã§ãƒ—ãƒãƒŸã‚¹ã‚’指定ã—ã¦ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã™ã¨ã€ãƒ—ãƒãƒŸã‚¹ãŒæ£å¸¸ã«è§£æ±ºã•れるã¾ã§ã€ fetch ã‚„ push ãªã©ã®é–¢æ•°ã‚¤ãƒ™ãƒ³ãƒˆã¯ã‚µãƒ¼ãƒ“スワーカーã«é…ä¿¡ã•れã¾ã›ã‚“。
最åˆã®åŸºæœ¬çš„ãªä¾‹ã‚’ã©ã®ã‚ˆã†ã«æ§‹ç¯‰ã™ã‚‹ã‹ã«ã¤ã„ã¦ã®å®Œå…¨ãªãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã€ã‚µãƒ¼ãƒ“スワーカーã®ä½¿ç”¨ã‚’èªã‚“ã§ãã ã•ã„。
é™çš„ルーティングを使用ã—ã¦ã€ãƒªã‚½ãƒ¼ã‚¹ã®å–得方法を制御
サービスワーカーã¯ã€ä¸è¦ãªãƒ‘フォーマンスコストãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã—ã°ã‚‰ãã¶ã‚Šã«ãƒšãƒ¼ã‚¸ãŒåˆã‚ã¦èªã¿è¾¼ã¾ã‚Œã‚‹å ´åˆã€ãƒ–ラウザーã¯ã‚µãƒ¼ãƒ“スワーカーãŒèµ·å‹•ã—ã¦å®Ÿè¡Œã•れるã®ã‚’å¾…ãŸãªã‘れã°ã€ã©ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’èªã¿è¾¼ã‚€ã¹ãã‹ã€ã¾ãŸã€ã‚ャッシュã¾ãŸã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã®ã©ã¡ã‚‰ã‹ã‚‰å–å¾—ã™ã¹ãã‹ã‚’判æ–ã§ãã¾ã›ã‚“。
特定ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã©ã“ã‹ã‚‰å–å¾—ã•れるã¹ãã‹äº‹å‰ã«åˆ†ã‹ã£ã¦ã„ã‚‹å ´åˆã¯ã€ã‚µãƒ¼ãƒ“スワーカーを完全ã«ãƒã‚¤ãƒ‘スã—ã¦ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’å³åº§ã«å–å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚InstallEvent.addRoutes() メソッドã¯ã€ã“ã®ä½¿ç”¨äº‹ä¾‹ã‚„ãã®ä»–ã®å®Ÿè£…ã«ã‚‚使用ã§ãã¾ã™ã€‚
ãã®ä»–ã®ä½¿ç”¨ä¾‹
ã‚µãƒ¼ãƒ“ã‚¹ãƒ¯ãƒ¼ã‚«ãƒ¼ã¯æ¬¡ã®ã‚ˆã†ãªç”¨é€”も想定ã—ã¦ã„ã¾ã™ã€‚
- ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã®ãƒ‡ãƒ¼ã‚¿åŒæœŸã€‚
- ä»–ã®ã‚ªãƒªã‚¸ãƒ³ã‹ã‚‰ã®ãƒªã‚½ãƒ¼ã‚¹ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¯¾ã™ã‚‹å¿œç”。
- ä½ç½®æƒ…å ±ã‚„ã‚¸ãƒ£ã‚¤ãƒã‚¹ã‚³ãƒ¼ãƒ—ã®ã‚ˆã†ãªè¨ˆç®—コストã®é«˜ã„ãƒ‡ãƒ¼ã‚¿ã®æ›´æ–°ã‚’集ä¸çš„ã«å—ä¿¡ã—ã¦ã€è¤‡æ•°ã®ãƒšãƒ¼ã‚¸ãŒãƒ‡ãƒ¼ã‚¿ã®ä¸€éƒ¨ã‚’利用ã§ãるよã†ã«ã™ã‚‹ã“ã¨ã€‚
- CoffeeScript, less, CJS/AMD モジュールãªã©ã®é–‹ç™ºç”¨é€”ã§ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã®ã‚³ãƒ³ãƒ‘イルやä¾å˜æ€§ç®¡ç†ã€‚
- ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚µãƒ¼ãƒ“スã®ãƒ•ック。
- 特定㮠URL パターンã«åŸºã¥ãテンプレートカスタマイズ。
- パフォーマンスã®å‘上ã€ä¾‹ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ¬¡ã«å¿…è¦ã¨ã™ã‚‹å¯èƒ½æ€§ãŒé«˜ã„リソース(例ãˆã°ã€ãƒ•ォトアルãƒãƒ ã®æ¬¡ã®æ•°æžšã®å†™çœŸï¼‰ã‚’事å‰ã«å–å¾—ã™ã‚‹ãªã©ã€‚
- API ã®ãƒ¢ãƒƒã‚¯ã‚¢ãƒƒãƒ—。
è¿‘ã„å°†æ¥ã€ã‚µãƒ¼ãƒ“スワーカーã¯ãƒã‚¤ãƒ†ã‚£ãƒ–アプリã§å®Ÿç¾ã§ãã‚‹ã“ã¨ã«è¿‘ã„ã€ãã®ä»–ã„ãã¤ã‚‚ã®ä¾¿åˆ©ãªã“ã¨ã‚’ã€ã‚¦ã‚§ãƒ–プラットフォーム上ã§ã‚‚実ç¾ã™ã‚‹äº‹ãŒã§ãるよã†ã«ãªã‚‹ã§ã—ょã†ã€‚興味深ã„ã“ã¨ã«ã€æ¬¡ã®ã‚ˆã†ãªä»–ã®ä»•様書ã§ã‚‚ã€ã‚µãƒ¼ãƒ“スワーカーã®ã‚³ãƒ³ãƒ†ã‚ストを利用ã§ãるよã†ã«ãªã£ã¦ãã¦ã„ã¾ã™ã€‚
- ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰åŒæœŸ: ユーザーãŒã‚µã‚¤ãƒˆã«ã„ãªã„ã¨ãã«ã‚‚サービスワーカーを起動ã—ã€ã‚ャッシュを更新ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- プッシュメッセージã¸ã®å¿œç”: æ–°ã—ã„コンテンツãŒåˆ©ç”¨å¯èƒ½ã«ãªã£ãŸæ—¨ã‚’ä¼ãˆã‚‹ãŸã‚ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ãŸã‚ã«ã‚µãƒ¼ãƒ“スワーカーを起動ã—ã¾ã™ã€‚
- ç‰¹å®šã®æ—¥ä»˜ãƒ»æ™‚刻ã«å¯¾ã™ã‚‹å応
- 特定ã®åœ°ç†çš„範囲ã¸å…¥ã£ãŸäº‹ã‚’検知ã™ã‚‹
インターフェイス
Cache-
ServiceWorkerã®ãƒ©ã‚¤ãƒ•ライクルã®ä¸€éƒ¨ã¨ã—ã¦ã‚ャッシュã•れるã€Request/Responseオブジェクトã®ãƒšã‚¢ã®ãŸã‚ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã§ã™ã€‚ CacheStorage-
Cacheオブジェクトã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã§ã™ã€‚ã“れã¯ServiceWorkerãŒã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã™ã¹ã¦ã®åå‰ä»˜ãã‚ャッシュã®ã¸ã®ç›®éŒ²ã‚’æä¾›ã—ã€æ–‡å—列ã®åå‰ã‹ã‚‰å¯¾å¿œã™ã‚‹Cacheã¸ã®ãƒžãƒƒãƒ—ã‚’ä¿æŒã—ã¾ã™ã€‚ Client-
サービスワーカークライアントã®ã‚¹ã‚³ãƒ¼ãƒ—を表ã—ã¾ã™ã€‚サービスワーカークライアントã¯ã€é–²è¦§ã‚³ãƒ³ãƒ†ã‚ã‚¹ãƒˆå†…ã®æ–‡æ›¸ã¾ãŸã¯
SharedWorkerã§ã‚りã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ワーカーã«ã‚ˆã£ã¦åˆ¶å¾¡ã•れã¦ã„ã¾ã™ã€‚ Clients-
Clientオブジェクトã®ãƒªã‚¹ãƒˆã®ãŸã‚ã®ã‚³ãƒ³ãƒ†ãƒŠãƒ¼ã§ã‚りã€ç¾åœ¨ã®ã‚ªãƒªã‚¸ãƒ³ã«ã‚る有効化ã•れãŸã‚µãƒ¼ãƒ“スワーカークライアントã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ä¸»ãªæ–¹æ³•ã§ã™ã€‚ ExtendableEvent-
ServiceWorkerGlobalScopeã§é…ä¿¡ã•れるinstallイベントやactivateイベントã®ãƒ©ã‚¤ãƒ•タイムを延ã°ã—ã¾ã™ã€‚ã“れã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¹ã‚ãƒ¼ãƒžã®æ›´æ–°ã‚„使ã‚れãªããªã£ãŸã‚ャッシュエントリーã®å‰Šé™¤ãªã©ãŒçµ‚ã‚ã‚‹ã¾ã§æ©Ÿèƒ½çš„イベント (Functional events) ãŒServiceWorkerã«é…ä¿¡ã•れãªã„ã“ã¨ã‚’ä¿è¨¼ã—ã¾ã™ã€‚ ExtendableMessageEvent-
サービスワーカーã§ç™ºç”Ÿã™ã‚‹
messageイベントã®ã‚¤ãƒ™ãƒ³ãƒˆã‚ªãƒ–ジェクト(別ã®ã‚³ãƒ³ãƒ†ã‚ストã‹ã‚‰ServiceWorkerGlobalScopeã§ãƒãƒ£ãƒ³ãƒãƒ«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å—ä¿¡ã—ãŸæ™‚ï¼‰ã®æœ‰åŠ¹æœŸé™ã‚’å»¶é•·ã—ã¾ã™ã€‚ FetchEvent-
ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
onfetchã«æ¸¡ã•れる引数ã€FetchEventã¯ServiceWorkerGlobalScopeã§é…ä¿¡ã•れるèªã¿å–りアクションを表ç¾ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨çµæžœã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã«é–¢ã™ã‚‹æƒ…å ±ã‚’å«ã¿ã€FetchEvent.respondWith()メソッドをæä¾›ã—ã¦ã€åˆ¶å¾¡ã•れãŸãƒšãƒ¼ã‚¸ã«ä»»æ„ã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’è¿”ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ InstallEvent-
oninstallãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã«æ¸¡ã•れる引数ã§ã€InstallEventインターフェイスã¯ServiceWorkerã®ServiceWorkerGlobalScopeã«é…ä¿¡ã•れるインストールアクションを表ç¾ã—ã¾ã™ã€‚ExtendableEventã®åã¨ã—ã¦ã€FetchEventã®ã‚ˆã†ãªæ©Ÿèƒ½ã‚¤ãƒ™ãƒ³ãƒˆãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ä¸ã«é…ä¿¡ã•れãªã„ã“ã¨ã‚’ä¿è¨¼ã—ã¦ã„ã¾ã™ã€‚ -
サービスワーカーã«ã‚ˆã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®å…ˆèªã¿ã‚’管ç†ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æä¾›ã—ã¾ã™ã€‚
ServiceWorker-
サービスワーカーを表ã—ã¾ã™ã€‚複数ã®é–²è¦§ã‚³ãƒ³ãƒ†ã‚スト(例:ページã€ãƒ¯ãƒ¼ã‚«ãƒ¼ãªã©ï¼‰ã‚’åŒã˜
ServiceWorkerオブジェクトã«é–¢é€£ä»˜ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ServiceWorkerContainer-
サービスワーカーã®ç™»éŒ²ã€ç™»éŒ²è§£é™¤ã€æ›´æ–°ã€ã‚µãƒ¼ãƒ“スワーカーã¨ãã®ç™»éŒ²ã®çŠ¶æ…‹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãªã©ã®æ©Ÿèƒ½ã‚’å«ã‚€ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ã‚³ã‚·ã‚¹ãƒ†ãƒ ã®å…¨ä½“ユニットã¨ã—ã¦ã®ã‚µãƒ¼ãƒ“スワーカーを表ã™ã‚ªãƒ–ジェクトをæä¾›ã—ã¾ã™ã€‚
ServiceWorkerGlobalScope-
サービスワーカーã®ã‚°ãƒãƒ¼ãƒãƒ«å®Ÿè¡Œã‚³ãƒ³ãƒ†ã‚ストを表ã—ã¾ã™ã€‚
ServiceWorkerRegistration-
サービスワーカーã®ç™»éŒ²ã‚’表ã—ã¾ã™ã€‚
WindowClient-
アクティブãªãƒ¯ãƒ¼ã‚«ãƒ¼ã«ã‚ˆã£ã¦åˆ¶å¾¡ã•れる閲覧コンテã‚ã‚¹ãƒˆå†…ã®æ–‡æ›¸ã§ã‚るサービスワーカークライアントã®ã‚¹ã‚³ãƒ¼ãƒ—を表ã—ã¾ã™ã€‚ã“れã¯ç‰¹åˆ¥ãªç¨®é¡žã®
Clientオブジェクトã§ã€ã„ãã¤ã‹ã®è¿½åŠ ãƒ¡ã‚½ãƒƒãƒ‰ã¨ãƒ—ãƒãƒ‘ティãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚
ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã¸ã®æ‹¡å¼µ
Window.cachesandWorkerGlobalScope.caches-
ç¾åœ¨ã®kンテã‚ストã«é–¢é€£ä»˜ã‘られãŸ
CacheStorageオブジェクトã§ã™ã€‚ -
ServiceWorkerContainerオブジェクトを返ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ–ジェクトã¯ã€é–¢é€£ä»˜ã‘ã‚‰ã‚ŒãŸæ–‡æ›¸ã®ServiceWorkerオブジェクトã®ç™»éŒ²ã€å‰Šé™¤ã€ã‚¢ãƒƒãƒ—グレードã€é€šä¿¡ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’æä¾›ã—ã¾ã™ã€‚
仕様書
| Specification |
|---|
| Service Workers Nightly> |
é–¢é€£æƒ…å ±
- サービスワーカーã®ä½¿ç”¨
- Service Worker Lifecycle (英語)
- Service workers basic code example (英語)
- サービスワーカー APIã«é–¢é€£ã™ã‚‹ Web API: