🔨
Chrome拡張機能ManifestV3へ対応する方法(V2から)
はじめに
最近Chrome拡張機能を作ろうと思っていたら、V3への移行期限が近づいていることを知った。
そもそもV3とは何か、を知るためにもV2のOSSプロジェクトをV3に移行するというissueを解決してみようと思った。
ので、やってみた。
ちなみに、そもそもV2がわからん人はこちらの記事も参照ください
結論
- 2022/1/17前にはマニフェストV3への対応をはじめたほうがよい
- V2→V3への以降は公式のチェックリストがあるので、それを見ながら進めていけば簡単
- Manifest V3 migration checklist - Chrome Developers https://developer.chrome.com/docs/extensions/mv3/mv3-migration-checklist/
- 何から手を付けていいか分からなければ、ひとまず
manifest_version
を3にするところから初めていくとよい
やってみたこと
次の記事を確認してみた
- Google Developers Japan: Chrome 88 ベータ版で Chrome 拡張機能 Manifest V3 が利用可能に https://developers-jp.googleblog.com/2020/12/chrome-88-chrome-manifest-v3.html
- The transition of Chrome extensions to Manifest V3 - Chrome Developers https://developer.chrome.com/blog/mv2-transition/
- Migrating to Manifest V3 - Chrome Developers https://developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/
わかったことを列挙してみた
- 2022/1/17以降、マニフェストV2の拡張機能はWebストアで受付けられなくなる
- 2023/1/01以降、マニフェストV2の拡張機能はChromeで動かなくなる
- タイムラインの詳細はこのページに書いてある
- V3の拡張機能は次の変更が発生する
- バックグラウンドページはService Workerへ置き換え
- Chromeの通信内容を変更するには基本的にdeclarativeNetRequestAPIを使用
- パッケージに含まれるJavaScriptのみを実行可能に
- リモートでホストされていたコードは実行できなくなる
- Promiseのサポートが増えた
- V2の拡張機能をV3に移行するには、manifest.jsonで次の項目を指定している場合、変更の必要あり
- permissions
- content_security_policy
- browser_action
- page_action
- web_accessible_resources
- 何をすればいいか
- チェックリストを見ながら一つ一つ直していく
- permissionsがoptional_permissionsを使っている場合
- ホスト権限についてはhost_permissionsに切り出す
- background pagesを使っている場合
- browser_actionかpage_actionを使っている場合
- chrome.browserActionかchrome.pageActionを使っている場合
- chrome.webRequestを使っている場合
- declarativeNetRequestに置き換える
- permissionsがoptional_permissionsを使っている場合
- チェックリストを見ながら一つ一つ直していく
順番にやってみた
とあるプロジェクトのマイグレーションにトライしてみた。
前提
変更前のmanifest.jsonはこんな感じ
{
"name": "appName",
"short_name": "app",
"version": "0.6.0",
"manifest_version": 2,
"description": "description",
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"options_ui": {
"page": "src/options/options.html",
"open_in_tab": true
},
"browser_action": {
"default_icon": "icons/icon19.png",
"default_title": "title",
"default_popup": "src/browser_action/browser_action.html"
},
"permissions": [
"https://sub.example.com/path/*",
"https://sub2.example.com/*",
"https://slack.com/api/*",
"https://hooks.slack.com/services/*",
"storage"
],
"content_scripts": [
{
"matches": [
"https://sub.example.com/path/*",
"https://sub2.example.com/*"
],
"js": [
"src/inject/inject.js"
],
"all_frames": true
}
],
"background": {
"scripts": ["src/background/background.js"],
"persistent": false
}
}
とりあえずバージョンを上げる
ダメなのは分かってるけどあえてここだけ変更してみる
"manifest_version": 2,
"manifest_version": 3,
service_worker使いなさいということですね。
backgroundの設定を修正していきます。
backgroundの設定(service_worker対応)
persistentがfalseであることもあり、そのままservice_workerとしてセットします
"background": {
"scripts": ["src/background/background.js"],
"persistent": false
}
"background": {
"service_worker": "src/background/background.js"
}
backgroundの設定はOKのようですね。
しかし、今度はbrowser_actiontとpermissionsの設定が正しくないようです。
browser_actionの設定
browser_actionはそのままactionに書き換えます
"browser_action": {
"default_icon": "icons/icon19.png",
"default_title": "title",
"default_popup": "src/browser_action/browser_action.html"
},
"action": {
"default_icon": "icons/icon19.png",
"default_title": "title",
"default_popup": "src/browser_action/browser_action.html"
},
続いて、先程出ていたpermissionの設定も行います
permissionsの設定
permissionsの中で、許可するリクエスト先の設定は分離されたので、host_permissionsへ一部移行します。
"permissions": [
"https://sub.example.com/path/*",
"https://sub2.example.com/*",
"https://slack.com/api/*",
"https://hooks.slack.com/services/*",
"storage"
],
"permissions": [
"storage"
],
"host_permissions": [
"https://sub.example.com/path/*",
"https://sub2.example.com/*",
"https://slack.com/api/*",
"https://hooks.slack.com/services/*",
],
ここまで変更したら再読込してみます。
エラーが出なくなりました。
動作確認
今回対応した拡張機能を実際に動かして動作確認します。
従来どおり動いているようでした。
さいごに
私のようにあまり詳しくない人の参考になれば幸いです
参考
- Migrating to Manifest V3 - Chrome Developers https://developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/
- 網羅的に変更点の概要が分かる
- Manifest V3 migration checklist - Chrome Developers https://developer.chrome.com/docs/extensions/mv3/mv3-migration-checklist/
- 「で、何すればいいの?」が最短で分かる
- Manifest V2 support timeline - Chrome Developers https://developer.chrome.com/docs/extensions/mv3/mv2-sunset/
- いつまでV2で持つのか、ぱっと分かる
Discussion