2023 年 11 月に Chrome の Manifest V2 拡張機能の段階的廃止についてスケジュールをお知らせしました。コミュニティの進捗状況とフィードバックに基づき、この変更を予定どおりにロールアウトいたします。
Manifest V3 の目標は常に明確で、既存の機能を保護することと、拡張機能エコシステム全体のセキュリティ、プライバシー、パフォーマンス、信頼性を向上させることです。コミュニティの皆さんの協力とフィードバックに感謝いたします。おかげさまで、拡張機能プラットフォームを改善し続けることができています。
コミュニティからのフィードバックへの対応
このような規模の移行には困難が伴う場合があることは理解しています。そのため、デベロッパーからのフィードバックに耳を傾け、何年にもわたって Manifest V3 を改善して、拡張機能コミュニティ全体で起こっているイノベーションをサポートできるようにしてきました。たとえば、ユーザー スクリプトのサポートを追加し、オフスクリーン ドキュメントを導入して拡張機能がバックグラウンド コンテキストから DOM API を使えるようにしました。拡張機能コミュニティからのフィードバックに基づき、declarativeNetRequest のルールセット数も増やしました。これにより、最大 330,000 個の静的ルールを拡張機能にバンドルし、さらに 30,000 個を動的に追加できるようになっています。
今月には、安全なルール更新の審査スキップが始まり、declarativeNetRequest を使う拡張機能の移行がさらに簡単になっています。拡張機能の declarativeNetRequest の静的ルールリストを安全に変更する場合に限り、アップデートは数分で承認されます。先月のバージョン ロールバック機能のリリースと同じく、デベロッパーがアップデートの展開方法を細かく制御できるようになります。
エコシステムの進捗状況
私たちは昨年、移行を妨げる主な問題と不足していた機能に対処しました。その後、Manifest V3 への移行を終える拡張機能の数が増加しています。この 1 年間では、Adblock Plus のメーカーである Eyeo や、Matt Frisbie 氏のような GDE メンバーなど、一部のデベロッパーをお招きし、その経験や知見をゲスト投稿や YouTube 動画を通じてコミュニティと共有することもできました。
現在、Chrome ウェブストアで活発にメンテナンスが行われている拡張機能の 85% 以上が Manifest V3 で動作しています。上位にランキングしているコンテンツ フィルタリング拡張機能にはすべて Manifest V3 バージョンがあり、AdBlock、Adblock Plus、uBlock Origin、AdGuard のユーザーに選択肢を提供しています。
今後に向けて
6 月 3 日以降、Chrome ベータ版、Dev 版、Canary 版チャンネルでは、拡張機能管理ページ(chrome://extensions)にアクセスしたタイミングで、Manifest V2 拡張機能をインストールしたままのユーザーに警告バナーが表示され始めます。これにより、インストールしている拡張機能に、まもなくサポートが終了するもの(Manifest V2)があることをお知らせします。また、おすすめバッジの付いた拡張機能のうち、Manifest V2 を引き続き使っているものはバッジを失います。
その後数か月以内に、これらの拡張機能は徐々に無効になる予定です。ユーザーは Chrome ウェブストアに誘導され、無効になった拡張機能の代替となる Manifest V3 の拡張機能がユーザーに推奨されます。しばらくの間は、Manifest V2 拡張機能が無効になっても、オンに戻すことができますが、将来的にこの切り替え機能も削除されます。
ほかの大規模リリースと同じく、こういった変更はすべて、Chrome 安定版よりも先行するチャンネルのビルド(Chrome ベータ版、Dev 版、Canary 版)で始められます。この変更は、今後数か月をかけて Chrome Stable にロールアウトされます。移行は、来年初めまでに終えることを目指しています。ExtensionManifestV2Availability ポリシーを使っている企業は、ブラウザの変更期限を 2025 年 6 月まで延長できます。
このプロセスの詳細は、先日開催された Chrome 拡張機能に関する Google I/O のトークでご案内しています。ほかに不明な点がございましたら、Chromium 拡張機能のメーリング リストからお気軽にお問い合わせください。
{ "name": "Kinlan's Amazing Application ++", "short_name": "Kinlan's Amaze App", "icons": [ { "src": "launcher-icon-3x.png", "sizes": "144x144", "type": "image/png" } ], "start_url": "index.html", "display": "standalone" }
<link rel="manifest" href="/https/developers-jp.googleblog.com/manifest.json">
link[rel="manifest"]
name
short_name
icons
start_url
display
standalone
meta[name="theme-color"]
content
<meta name="theme-color" content="#db5945">
fetch
navigator.serviceWorker.register('/sw.js') .then(function(registration) { // Success! }).catch(function(error) { // Error... });
self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request).then(function(response) { return response || fetch(event.request); }) ); });
navigator.serviceWorker.ready().then(function(sw) { sw.pushManager.subscribe().then(function(sub) { // After permission is granted sub.subscriptionId; // registration Id sub.endpoint; // GCM URL }); });
self.addEventListener('push', function(event) { event.waitUntil( self.registration.showNotification(title, { body: body, icon: icon, tag: tag } }); });