Search Consoleから送られたSharedArrayBuffer警告

[レベル: 上級]

SharedArrayBuffers の使用に必要な新しい要件」という件名で一部のサイトに Google Search Console から警告が送られています。

SharedArrayBuffers が何のことかわからず困っているサイト管理者もいそうです。
Google は、警告の意味と対処方法を検索セントラルブログで説明しました。

「SharedArrayBuffers の使用に必要な新しい要件」の警告

日本語では次のような警告文になります。

[サイト URL] での SharedArrayBuffers の使用に必要な新しい要件

このたび、Google のシステムにより、[サイト URL] で SharedArrayBuffers(SAB)の使用が検出されましたが COOP または COEP ヘッダーが配信されていないようです。

ウェブの互換性を確保するため、Chrome 91(2021 年 5 月 25 日)以降では、SAB を使用する場合に COOP または CCEP が必要となります。この変更に備えて、サイトに「cross-origin-isolated」の動作を実装してください。

英語では次のような警告文になります。

New requirements for SharedArrayBuffers on [Site URL]

Google systems have recently detected that Shared ArrayBuffers (SABs) are used on [Site URL], but COOP and/or COEP headers are not served.

For Web Compatibility reasons Chrome is planning to require COOPCOEP for the use of SABS from Chrome 91 (2021-05-25) onwards. Please implement cross-origin-isolated behavior on your site.

SharedArrayBuffers とは

SharedArrayBuffers とは JavaScript のオブジェクトです。
サイト内でメモリ空間を共有する機能を持ちます。

「Spectre(スペクター)」と呼ばれる脆弱性が SharedArrayBuffers には発見されています(Spectre の詳細については、web.dev のサイトWikipedia を参照)。

Spectre は、ハードウェアレベルの脆弱性のため、アプリケーションであるブラウザ側では現状では根本的には解決できません。
それでも、SharedArrayBuffers を安全に有効化するための対処策として、cross-origin isolation という仕組みが標準化されました。

5 月後半リリース予定の Chrome 91 からは、cross-origin isolation が構成されているサイトでのみ SharedArrayBuffers を有効にするように仕様が変わります。

つまり、SharedArrayBuffer の警告は、cross-origin isolation をサイトに構成しないと、あなたのサイトは Chrome では正常に機能しなくなるかもしれませんよという注意喚起です。

Google 検索では、Chrome をレンダリングサービスとして利用しています。
ひょっとしたら、検索にも影響が及ぶことも可能性としてはありえます。

なお、cross-origin isolation での SharedArrayBuffer 利用は、Firefox ではバージョン 76 ですでに有効になっています(Firefox の最新バージョンは 86)。

サイト側の対処方法

SharedArrayBuffers 警告の対処方法に関しては、簡単かもしれないし難しいかもしれません。
サイトによって異なりそうです。

基本的な手順は次のようになります。

  1. SharedArrayBuffer が何に使われているかを特定する
  2. SharedArrayBuffer が本当に必要かどうかを検討する
  3. 不要であれば削除する、必要であれば cross-origin isolation を構成する

SharedArrayBuffer が何に使われているかを特定する

SharedArrayBuffer が何に使われているかを特定するには、Chrome のデベロッパーツールを利用できます。

具体的にどのページで SharedArrayBuffer が使われているかは Search Console の警告文は示していません。
自分でだいたいの見当をつけて調べます。

機械的に調査するには Reporting API を使います。
検証を自動化できます。

開発者であれば、特定は造作もないことでしょう。
SharedArrayBuffer を実装した本人であればなおさらです。

しかし、最初のステップの特定でつまづく人がいるかもしれません。
なぜなら、サードパーティ製の要素たとえば広告で SharedArrayBuffer が使われていることもあります。
利用している CMS テンプレートにデフォルトで組み込まれているかもしれません。

知らないところで SharedArrayBuffer が使われていて、しかも技術に強くなかったとしたら何が問題なのかを発見することすら困難でしょう。

なお、今回の SharedArrayBuffer 警告は Google アナリティクス とは関係ありません。

SharedArrayBuffer が本当に必要かどうかを検討する

SharedArrayBuffer がどこでどのように使われているかを特定できたら、本当に必要かどうかを検討します。

不要であれば、削除するのが最も簡単で確実な対処策です。

サイトの運営上 SharedArrayBuffer が必要な要素であれば、cross-origin isolation を構成します。

cross-origin isolation については、こちらの解説記事と、えーじさんの動画を参照してください。

SharedArrayBuffer 警告に対処しないとどうなる?

SharedArrayBuffer の警告に対処せずに(できずに)、放置しておいたらどうなるでしょうか?

SharedArrayBuffer の使われ方に依存します。

特に大切ではない要素に使われていたのであれば、致命的な不具合は生じないでしょう。
広告に使われていたとしたら、ひょっとしたら、広告が表示されなかったり計測できなかったりするかもしれません。
サイトの生成に重要な役割を SharedArrayBuffer が果たしていたら、Chrome での閲覧に支障が出るかもしれないし、ひいては検索にも悪影響が出るかもしれません。

したがって、まずは SharedArrayBuffer が何に使われているかを特定することから始まります。
もっとも、その作業が難しい人にとっては試練ですが。

いずれにしても、大多数のサイトにとっては SharedArrayBuffer 問題は関係ありません。
対象となるのは、限られた数のサイトです。