広告ブロックの仕組み: フィルター開発の流れと、Chromeの“Manifest v3”が脅威である理由
広告ブロッカーって、一体どのように機能するか?
広告ブロッカーの中核となるのは、フィルターリスト(単に「フィルター」とも呼ばれる)です。文字通り、特別な構文で記述されたフィルタリングルールのリストです。
(ウェブを広告などの邪魔なものからフィルターするという例えから名付けられています)
広告ブロッカーの仕事を短文に絞ると、「広告ブロッカーはフィルタリングルールを解釈する」になります。
この「フィルタリングルール」という複雑な構文を理解し、特定の要素のブロック、特定の方法でのWebページの変更など、これらのルールの実行内容に基づいてWebトラフィックでアクションを実行します。
フィルターリストは多種あります。何千人ものユーザーたちが継続的にそれらを最新の状態に保ち、フィルターリストがちゃんと広告をブロックし、サイトなどの重要なものを壊さないように取り組んでいます。(例:日本語サイト用 豆腐フィルタ)
Chromeブラウザの今後の変更 (Manifest v3(Google拡張機能の設定ファイルであるmanifest.jasonのバージョン3)とも呼ばれる) について聞いたことがあるかもしれません。
これらの変更は、私たちみんなが知っているフィルターエコシステムを終わらせる恐れがあります。
この記事はGoogle Chrome開発者を対象としています。開発者たちには例のエコシステムを損なうという目標はなく、単に適切な理解を欠けていると信じたいところです。
そのため、フィルタエコシステムの機能とManifest v3(マニフェストv3)の現在の実装の問題点を詳細に説明する必要があります。
もしかすると、読者の皆様でもこれらの仕組みを知りたい方がいるかもしれません。
広告ブロッカーの仕組み
前述したように、広告ブロッカーはフィルタリングルールを解釈する“トランスレーター”です。
- まず、広告ブロッカーはフィルターリストをダウンロード(いろんな場所からダウンロードした異なる任意のフィルターリストを使用加)
- 広告ブロッカーがONになっていると、ダウンロードしたリストに入っているフィルタリングルールに対してWebページのコードのチェックを開始
広告ブロックの仕組み
技術の詳細を少し掘り下げてみましょう。より深いレベルではどのようになっているのか。
フィルタリングには複数の方法があります:
ネットワークフィルタリング
Webページ上の広告は、空中から魔法のように表示されているわけではありません。
広告は何らかの方法で取得される必要があります。例えば、サーバーからダウンロードされるとか。
そのためには、ブラウザがWebリクエストを送信する必要があります。フィルタリングルールは、どのリクエストが、有用なコンテンツではなく広告を取得しようとしているのかを広告ブロッカーに通知し、ブロックする必要があると知らせます。
整形フィルタリング
すべてのWebページにはDOM(document object model〈ドキュメントオブジェクトモデル〉)があります。
それは基本的にページの構造とそのすべての要素を含むHTMLドキュメントです。
もちろん、ページ上の広告も要素であり、DOMに反映されます。広告ブロッカーはDOMの一部を削除できます。フィルタリングルールは、どの部分が広告で削除する必要があり、どの部分は触れる必要がないのかをブロッカーに理解させるのに役立ちます。
もちろん、実際にはさらに複雑ですが、これで大雑把に流れをイメージできたかと思います。
技術面について詳しく知りたい場合は、広告ブロック構文ガイドをご覧ください。
フィルターリスト
AdGuardフィルタ、EasyListなど、数千個ではないにしても数百個のフィルターリストが存在します。
これらのフィルターを常に最新の状態に保つには、数千人のボランティアの方々と専門家の日々の作業が必要です。
フィルターは、単なる広告のブロック以上のことを行うことができ、ユーザーたちは自分の好みに合わせてさまざまなフィルターの組み合わせでフィルタリングを自分にあわせてカスタマイズできます。
以下に、フィルタがどれだけ多様であるかを示すため、人気のあるフィルターリストを紹介します。
- EasyList 多くのユーザー向けの基本フィルターで、広告のブロックのみを目的としている
- EasyPrivacy もう1つの人気のある選択肢で、オンライントラッカー(追跡)をブロックする
- Fanboy's SocialList シェア、いいね!ボタンなどのSNSウィジェットをブロックするフィルター
- AdGuard迷惑要素 あらゆる迷惑要素(Cookie通知、オンラインアシスタントなど)をブロックするAdGuard独自フィルター
- 多数の言語固有フィルターリスト: EasyList Germany、RUAdlist、AdGuard Turkishフィルター、日本語用豆腐フィルタ、その他多数。
巨大なフィルターリストデータベースがあるこのWebサイトをチェックしてください。
そしてこれが問題:導入予定のGoogle Chrome変更は、デフォルトのフィルターリスト(いわゆる「スタティック」ルール)が1つしかないことを想定して開発されています。
そのデフォルトフィルタリストを一連の「ダイナミック」ルールで変更はできますが、それらの数制限はとてつもなく小さく、わずかの最大5,000本です。
上記の多くのフィルターリストは、複数どころか、ほとんどは一つもそういった制限に入りきらないのです。
フィルターリスト開発の流れ
前述のように、フィルターリストは常に更新する必要があります。それには主な理由が2つあります。
1)新しい広告をブロックするため
2)壊れているものを修正するため(フィルター内のルールは多量であり、時々壊れるものがどうしてもはつげんする)。
もちろん、フィルターリストの保持者は何百万ものWebサイトを監視することはできません。ユーザーのフィードバックに大きく依存しています。
具体的な例でいえば:
- AdGuardフィルタリポジトリには、40,000以上の(フィルタ改善・修正の)タスクが現在解決されています。毎週約500本の新タスクが現れ、ほぼ同量が解決されます。
- EasyListとその地域別フィルターサブスクリプションは、ほとんどの場合フォーラムからからフィードバックを受け取り、数万のスレッドがあります。
多くの広告ブロッカーには、ユーザーが直面しているフィルター関連の問題を簡単に報告できるツールを提供しています。
たとえば、AdGuardユーザーは特別なWebレポートツールをご利用できます。
このような苦情に基づいて、フィルター開発者はフィルターリストを修正→広告ブロッカーはフィルターを更新→バン!広告がなくなる。
フィルタは常に更新され続けています
これにより、別の問題が発生します。Chromeにおいてダイナミックルールは、スタティックルールと比較して優先順位が異なります。より多くの混乱をもたらし、フィルターリスト保持者の作業を非常に困難にします。
ユーザーは新しいフィルターリストをどこで入手できる?
現代の広告ブロックの基礎の1つは、ユーザーが(デフォルトリストから選択するのではなく)URLで大きさに関係なく自由にカスタムフィルターリストを追加できることです。
これは、フィルターリストエコシステムの健全性に不可欠です:
- ユーザーたちは、新しいフィルターリストを試したりすることができる
- 開発者は、第三者を通る必要なく自分のフィルタをユーザーと直接共有できる
同じ問題の別の面は、既存のダイナミックルールの制限は、上記のすべてのことを不可能にしてしまうことです。これは、フィルター開発コミュニティが徐々に衰退してしまうことにつながります。
今後はどうなる?
Chromeで計画されているすべての変更が今のまま実現されてしめば、私たち全員にとって広告ブロックの未来は暗くなります。
- フィルターエコシステムは、非常に痛い打撃を受ける
- 使い慣れたフィルターの種類と大規模でアクティブなコミュニティの代わりに、少数の広告ブロッカーの開発者だけが残り、彼らはできる限り少数のフィルターリストを維持する
- ユーザーの観点から、柔軟なアプローチと広告ブロックを好みに合わせてカスタマイズする機能の代わりに、多様性が低い“統合された”フィルターリストを使わないといけないことに
- コミュニティは他の広告ブロック方法に移行し、それらの方法に努力を集中する
当時、私たちはSafariのコンテンツブロッカーについて多くの厳しい言葉を話してきました。少なくとも、無数のトリックと「ダクトテーピング」のおかげで、なんとか満足のいくソリューションに到達することができました。
Google Chromeの場合、正直なところトンネルの先に光は見えません。
解決策は?
実際、これらすべての問題は、GoogleがChromeで取りたいと思っている方向から大きく逸脱することなく、対処および解決できます。そのためにすべきことはこちらだと思います:
- スタティックルールとダイナミックルールの両方に「フィルターリスト」という用語を適用
- ダイナミックルール数の制限を劇的に上げる
- フィルター規則の優先順位を再考する必要があります。ダイナミックルールには、スタティックルールと同じ優先順位が必要です。
開発者の観点から見ると、ダイナミックルールのみを持つ方がはるかに簡単です。開発者コミュニティにとって、ルールをスタティックカテゴリとダイナミックカテゴリに分割することは、必要なくカオスを誘発するものに見えます。
同時に、Google Chrome開発者と対話し、みんなを(特に第一としてChromeユーザーを)満足させる妥協案を見つける準備が私たちにはできています。
P.S.
フィルター保持者になりたい方はいつも大歓迎しております!🙌
このページをご覧になり、AdGuardフィルタの改善にご協力できる方法と、その見返りとして得られるものをご覧ください。