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

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

(2015/07/28 追記) @FalkenMatto さん (原文の投稿者) からコメントをいただき、一部加筆修正しました。ありがとうございます。


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

新機能

  • Request.context がサポートされました (Bug, Spec)。
  • Cache.add() が実装されました (Dashboard, Spec)。

API の変更

  • FetchEventExtendableEvent1 を継承するようになり、コンストラクタが追加されました (Bug, Spec)。
  • セキュリティ上の理由に、client requests2 に対して opaque レスポンスを返すことができなくなりました (Bug, Spec Discussion)。
  • install イベントのインタフェースが InstallEvent から ExtendableEvent に変更され、InstallEvent インタフェースが削除されました (Bug, Spec Discussion)。

改善点

  • ブラウザのコンテンツ設定で Service Worker を許可しているかどうか、”Cookies set by this page” UI3 上で確認できるようになりました (Bug)。
  • Service Worker がスタートアップに失敗するバグが修正されました。また、スタートアップ失敗によってメインリソースリクエストに対する FetchEvent がディスパッチできなかった場合は適切に4ネットワークにフォールバックするように改善されました (Bug)。

DevTools 関係の変更

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

  • --unsafely-treat-insecure-origin-as-secure コマンドラインオプションが追加されました。Service Worker のような Powerful Features は Secure Contexts (例: HTTPS) を必要としますが、このオプションで指定されたオリジンではセキュリティチェックをバイパスします。これによりローカル環境での開発が行いやすくなりました。
$ ./chrome --user-data-dir=/tmp/foo --unsafely-treat-insecure-origin-as-secure=http://your.insecure.site
  • Cache Storage のエントリを個別に消せるようになりました (Bug)。
  • Cache Storage が Service Worker のフレームだけでなく、すべてのフレームから inspect できるようになりました (Bug)。
  • non-incognito ウィンドウ上の Service Worker でコンソール出力した内容が incognito ウィンドウのコンソールに表示されてしまうバグが修正されました (Bug)。
  • waitUntil()respondWith() で発生した例外が Service Worker のコンソールに出力されるようになりました (Bug)。
  • Service Worker を使ったアプリの開発効率向上を目指し、現在 “Service Worker explorer UI” の開発に取り組んでいます。この機能はまだ experimental で、現在 UX の改良が行われています。こちらのスライドを参考に試用していただき、是非フィードバックをお寄せください。

バグフィックス

  • Service Worker が STOPPING 状態でスタックしてしまうバグが修正されました (Bug)。
  • バグフィックスの全リストはこちらで確認できます。

訳者補足

  1. ExtendableEvent はそれの持つ waitUntil() に任意の Promise を渡すことで、その Promise が settled (resolved or rejected) になるまでイベントのライフタイムを延長することができるイベントです。 

  2. client requests とは Request.context が navigation 関係 (form, frame, hyperlink etc) もしくは worker (serviceworker, sharedworker, worker) であるようなものを指します。詳しくは Fetch の仕様を参照してください。 

  3. URL バーの鍵もしくはファイルアイコンをクリックした時に表示される UI です。 

  4. (2015/07/28 追記) メインリソースリクエストがネットワークにフォールバックした場合は、その後のサブリソースリクエストもすべて Service Worker を介さずにネットワークにフォールバックします。サブリソースリクエスト時に FetchEvent がディスパッチできなかった場合はネットワークにフォールバックせず、エラーレスポンス (500 “Service Worker Response Error”) を返します。これにより、同一ドキュメント内で Service Worker にインターセプトされるリクエストとされないリクエストが混在することはありません。