本記事は Chrome 45 の Service Worker のリリースノートを日本語に意訳したものです。原文は service-worker-discuss グループで読むことができます。

以前のバージョンのリリースノートはこちら。

今回も草稿を @FalkenMatto さん (原文の投稿者) にレビューしてもらいました。ありがとうございます。


Chrome 45 の Service Worker 関係の変更は次のとおりです。

新機能

  • ServiceWorkerRegistration.update()1 が実装されました (Bug, Spec)。
  • Client.id が実装されました (Bug, Spec)。
  • 呼び出し元のオリジンに属する全ての ServiceWorkerRegistration を返す navigator.serviceWorker.getRegistrations() が実装されました (Bug, Spec)。

API の変更

  • Client.postMessage() で送られたメッセージが Window ではなく navigator.serviceWorker にディスパッチされるようになりました (Feature, Demo)。
  • “failing to activate” の概念が削除され、いったん activate イベントがディスパッチされた Service Worker は必ず active 状態になるようになりました。waitUntil() でアクティベーション処理を遅延させることができますが、これを waitUntil(Promise.reject()) しても waitUntil(Promise.resolve()) した場合と同じ挙動になります2 (Bug, Spec Discussion)。
  • ServiceWorker.terminate() が削除されました (以前は terminate() が呼ばれると InvalidAccessError 例外を投げていました) (Bug)。
  • WindowClient.frameTypeClient.frameType と重複していたため、削除されました (Bug, Spec)。
  • Clients.openWindow() に不正な URL が渡された場合、SyntaxError ではなく TypeError で reject されるようになりました (Bug, Spec)。
  • FetchEvent.cancellable のデフォルト値が修正されました (Bug)。
  • (Push API) PushSubscription.subscriptionid が削除されました。今後は PushSubscription.endpoint を使用してください (Feature, Doc)。
  • (Push API) gcm_user_visible_only が削除されました。今後は userVisibleOnly を使用してください (Feature, Doc)。

改善点

  • Service Worker がナビゲーション時以外にも更新されるようになりました。具体的には Service Worker 起動時に前回の更新確認から 24 時間以上経っている場合に更新確認が行われます。これにより Service Worker を Push Notifications のためだけに使っている場合も適切に更新されるようになります (Bug)。
  • Service Worker のスクリプトを格納しているバックエンドの実装が BlockFile DiskCache から、より安定性の高い SimpleCache に切り替わりました (Bug)。
  • (Chrome 44 以降) Service Worker のイベントが “chrome://net-internals” にロギングされるようになりました (Bug)。
  • Service Worker の更新確認時、スクリプトに変更がなかった場合はディスクに余計な書き込みを行わないようになりました (Bug)。

DevTools 関係の変更

Note: 最新の DevTools を試すために、Dev channel もしくは Canary の使用をおすすめします。

  • DevTools のコンソールのコンテキストの初期値が Service Worker からページに変更されました (Bug)。
  • Service Worker を使ったアプリの開発効率向上を目指し、現在 “Service Worker explorer UI” の開発に取り組んでいます。この機能はまだ experimental で、現在 UX の改良が行われています。こちらのスライドを参考に試用していただき、是非フィードバックをお寄せください。

バグフィックス

  • Service Worker が iframe[sandbox] を尊重するようになりました (Bug)。
  • Service Worker のアイドルタイマーが他のイベントと同じようにメッセージイベントでもリセットされるようになりました (Bug)。
  • バグフィックスの全リストはこちらで確認できます。

訳者補足

  1. update() については「Service Worker の update()」で解説を書きました。 

  2. “failing to activate” の挙動は「Service Worker の Registration」でも紹介しました。