
2026/05/16 3:00
UMatrix を代替する製品の構築
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元のサマリーは有効であり、品質基準を満たしていますが、文末で著者がコミュニティからの支援を依頼している点を明記することで、流れをさらに微調整することができます。以下がやや改善されたバージョンです:
レイモンド・ヒルは、Google Chrome の最新の Manifest V3 制限においても高度なパーミッション制御が可能であることを示すために、新しいプロトタイプ「matrix³」の作成に成功しました。核心的な課題は、MV3 が開発者に動的な JavaScript メソッド(以前 uMatrix で利用可能なもの)ではなく、静的な「宣言的」ブロックルールを使用することを強制している点にあります。これを解決するために、ヒルはこれらの厳格なフィルタリングルールと Content Security Policy 指令によって生成されたレポートを巧妙に組み合わせ、具体的にはセキュリティ違反アラートを監視し、リアルタイムでブロックリストを更新するというアプローチを採用しています。この手法により、MV3 のアーキテクチャ的制限を複雑な回避策なしに効果的に迂回し、ウェブリソースに対して細粒度の制御が必要なユーザーにとって重要なライフラインを提供します。ヒル自身が UX スキルの欠如を認めており、プロトタイプ(最小限のものであり、依存関係が不要で、「Load Unpacked」を介して直接実行可能)の改善のためにコミュニティからのフィードバックを求めているものの、その作業はブラウザポリシーがより厳格化する中でもセキュリティ研究者がウェブトラフィックの詳細な監視を維持することを確実にします。
本文
導入
オプション
declarativeNetRequest
ポリシー(Policies)
概要(Outline)
導入
かつては、レイモンド・ヒル氏(uBlock Origin の開発者)によって作られ、素晴らしい Chrome 拡張機能「uMatrix」というものが存在しました。uMatrix は、サイトの許可とサブリソースのリクエストを直感的に制御するためのツールでした。これまでは、第三者によるサブリソースの提供を制限したり、フレーム・スクリプト・動画・フォントといった機能へのアクセスを管理したりすることができました。ブラウザの設定で手動で行うことは可能ですが、uMatrix ならその作業を迅速かつ容易に行えるようサポートしていました。つまり、もともとWeb ブラウジングにはかなりの手間と細かな調整が必要だったものが、大幅にシンプルになったのです(「シンプル」ではなくても、「よりシンプル」とは言えます)。
とにかく、私はウェブサイトの許可設定を微調整できるさまざまなオプションに大いに喜びました。
uMatrix の機能は、ほぼ uBlock Origin が提供する機能のサブセットでしたので、両方を維持するよりも、ヒル氏は uMatrix を非推奨と発表し、ユーザーには uBO へ移行するよう呼びかけています。
これまでは私にとって問題にならなかったのですが、uBO はいくつか気に入っていた機能(例えば、装飾的フィルタなど)を追加しており、やや複雑なルールを手書きで記述する手間さえ嫌がらなければ、uMatrix でできたことがほぼすべて実現できました。
さて、残念なことに uBO は従来の MV2 アーキテクチャを採用している古い拡張機能であり、その後継である「uBO Lite」はこの機能を削除しました。この機能を手放したくない私は、いかなる解決策があるのでしょうか?
オプション
私の問いは以下の通りです:MV3 の環境下では、uMatrix を実現する可能性がありますか?
declarativeNetRequest
MV2 と MV3 の間の主な違いは、リクエストの処理中にコールバックを実行してブロックを適用することができなくなった点にあります。かつては「ブロッキング」と呼ばれる方式で、各リクエストごとに JavaScript を実行しながらブロックを行いましたが、MV3 ではそのような動的なアプローチは認められず、代わりに事前にアクションを宣言的に指定する必要があります。つまり、すべてのリクエストに対して毎回 JavaScript を実行するのではなく、どの行動をとるかをあらかじめ定義しておくことで対応します。
ここ controversial な部分ですが、おそらく皆さんも耳にしたことがあるでしょう:コールバック方式で行えたことはすべて、宣言的な方式でも再現できないため、能力が制限(「nerfed」と表現される)されています。技術的には事実にあたりますが、実用上は規則が柔軟に設計されており、私が考えるべきあらゆるニーズを満たせるようになっています。
ポリシー(Policies)
Web には既にコンテンツ機能を制御するシステムが存在します。それが「コンテンツセキュリティポリシー(CSP)」です。明らかな設計思想としては、declarativeNetRequest を用いて独自の CSP を追加し、ブラウザ側がすべての作業を代行させることにあります。私たちに必要なのは、それを管理するための使いやすいインターフェースを提供することだけです。
さて、では許可・禁止対象となるサブリソースのリストはどうやって提供すればよいのでしょうか? uMatrix の時代には、サブリソースの種類とオリジンの一覧が表示され、ユーザーが手動で承認または拒否を選択できました。これは uMatrix が特に得意としていた核心的な機能であり、今でも不可欠です。実は、CSP 自体がこの問題に対する解決策をすでに提供しています!
report-to ディレクティブを使って、ブラウザからセキュリティ違反に関するレポートを指定したエンドポイントに送信するように指示を与えるのです。私たちが行うのは、この機能を有効にし、追加の declarativeNetRequest ルールを設定してそれらのレポートを受け取る、そしてブラウザから届いたレポートに基づいてリストを構築するだけ。これもまた、成功裏に他のタスクに委ねられた例です 😂
もちろん、これは一定の plumbing(インフラ整備)が必要になりますが、必要な要素はすべて揃っており、私にとっては完全に実現可能に見えます。
概要(Outline)
これで uMatrix のような仕組みを概略的にどう実現するかというプランはでき上がりました…あとは、実際に概念検証(PoC)を作るだけです。ああ、いいでしょう。私も挑戦してみましょう!こうして試作 version 「matrix³」ができました:
現状ではプロトタイプ段階ですが、基本的には動作しています。このプロジェクトについてブログで公開し、関心を持っていただけるか確認してみようと思います。コードは非常にシンプルで、ビルドや外部依存ライブラリは一切不要です。 simplesmente 、「git clone」して Chrome で「ロードされていないパッケージとして展開(Load Unpacked)」するだけで済みます。
私はウェブ開発者でもなければ、UX に関するスキルもほぼ持ち合わせていません 🦎 もしこれが不適切なアイデアだと考えられる場合や、より優れた解決策をご存知の方、あるいは協力していただけたいという方がいらっしゃれば、ぜひご連絡ください。