[インデックス 13395] ファイルの概要
このコミットは、Go言語プロジェクトのmisc/chrome/gophertool
ディレクトリにあるChrome拡張機能のmanifest.json
ファイルを更新し、Chrome拡張機能のManifest Version 1のサポート終了に対応するためのものです。具体的には、Manifest Version 2への移行を行い、非推奨となったbackground_page
キーをbackground
オブジェクト内のpage
キーに置き換えています。
コミット
commit 4c98584ecd83fa39a4a1ef5bcb0a06c5b555dd92
Author: Amir Mohammad Saied <amir@gluegadget.com>
Date: Mon Jun 25 17:19:08 2012 -0400
misc/chrome/gophertool: Support for manifest version 1 is being phased out.
Manifest version 1 was deprecated in Chrome 18, and support will be phased
out according to the schedule available at:
http://code.google.com/chrome/extensions/manifestVersion.html
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6332053
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/4c98584ecd83fa39a4a1ef5bcb0a06c5b555dd92
元コミット内容
misc/chrome/gophertool: Support for manifest version 1 is being phased out.
Manifest version 1 was deprecated in Chrome 18, and support will be phased
out according to the schedule available at:
http://code.google.com/chrome/extensions/manifestVersion.html
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/6332053
変更の背景
この変更は、Google Chromeブラウザの拡張機能プラットフォームにおける重要な変更に対応するために行われました。Chrome 18でManifest Version 1が非推奨となり、将来的にはサポートが完全に終了する予定であったため、既存の拡張機能をManifest Version 2に移行する必要がありました。Manifest Version 1はセキュリティやパフォーマンスの面で課題があり、Googleはより安全で効率的な拡張機能の実現を目指してManifest Version 2への移行を推進していました。このコミットは、gophertool
というChrome拡張機能が将来も正常に動作し続けるようにするための、必要なアップデートでした。
前提知識の解説
Chrome拡張機能
Chrome拡張機能は、Google Chromeブラウザの機能を拡張するための小さなソフトウェアプログラムです。これらはHTML、CSS、JavaScriptなどのWeb標準技術を使用して開発され、ブラウザのUIを変更したり、新しい機能を追加したり、Webページと連携したりすることができます。
Manifestファイル
すべてのChrome拡張機能は、その拡張機能に関する重要なメタデータと設定を定義するmanifest.json
というファイルを持っています。このファイルは、拡張機能の名前、バージョン、説明、必要な権限、バックグラウンドスクリプト、UI要素などをブラウザに伝えます。
Manifest Version 1 (MV1)
Manifest Version 1は、Chrome拡張機能の初期のバージョンで採用されていたマニフェスト形式です。このバージョンでは、バックグラウンドページを直接指定するためにbackground_page
というキーが使用されていました。しかし、MV1にはいくつかのセキュリティ上の懸念や、パフォーマンスに関する最適化の余地がありました。例えば、インラインJavaScriptの使用が許可されていたため、クロスサイトスクリプティング(XSS)攻撃のリスクが高まる可能性がありました。
Manifest Version 2 (MV2)
Manifest Version 2は、MV1の課題を解決するために導入された新しいマニフェスト形式です。MV2では、セキュリティが大幅に強化され、より厳格なコンテンツセキュリティポリシー(CSP)が適用されました。これにより、インラインJavaScriptやリモートでホストされたコードの実行が制限され、拡張機能の安全性が向上しました。また、バックグラウンドスクリプトの指定方法も変更され、background_page
の代わりにbackground
オブジェクトを使用するようになりました。この変更は、拡張機能のライフサイクル管理を改善し、より効率的なリソース利用を可能にすることを目的としていました。
技術的詳細
このコミットの技術的な核心は、Chrome拡張機能のmanifest.json
ファイルをManifest Version 1からManifest Version 2の仕様に準拠させることです。
具体的には、以下の2つの主要な変更が行われています。
-
manifest_version
キーの追加:- Manifest Version 2に準拠していることを明示するために、
"manifest_version": 2
という新しいキーと値のペアが追加されました。これは、Chromeブラウザが拡張機能をロードする際に、どのマニフェストバージョンに従って解析すべきかを識別するための必須の宣言です。
- Manifest Version 2に準拠していることを明示するために、
-
background_page
からbackground
オブジェクトへの移行:- Manifest Version 1でバックグラウンドページを指定するために使用されていた
"background_page": "background.html"
というキーが削除されました。 - 代わりに、Manifest Version 2の新しい形式である
"background": { "page": "background.html" }
という構造が導入されました。この変更により、バックグラウンドスクリプトの定義がより構造化され、将来的な拡張機能の機能追加(例えば、イベントページやサービスワーカーのサポート)に対応しやすくなりました。background
オブジェクトは、拡張機能のバックグラウンドで実行されるスクリプトやページを定義するためのコンテナとして機能します。
- Manifest Version 1でバックグラウンドページを指定するために使用されていた
これらの変更は、単なる構文の変更以上の意味を持ちます。Manifest Version 2への移行は、拡張機能のセキュリティモデルを強化し、開発者がより安全なコードを書くことを強制するものでした。例えば、MV2ではデフォルトで厳格なコンテンツセキュリティポリシーが適用され、インラインJavaScriptやeval()
のような危険な関数の使用が制限されます。これにより、悪意のあるコードの注入や実行を防ぎ、ユーザーのセキュリティを保護します。
コアとなるコードの変更箇所
--- a/misc/chrome/gophertool/manifest.json
+++ b/misc/chrome/gophertool/manifest.json
@@ -1,8 +1,11 @@
{
"name": "Hacking Gopher",
"version": "1.0",
+ "manifest_version": 2,
"description": "Go Hacking utility",
- "background_page": "background.html",
+ "background": {
+ "page": "background.html"
+ },
"browser_action": {
"default_icon": "gopher.png",
"popup": "popup.html"
コアとなるコードの解説
上記の差分は、misc/chrome/gophertool/manifest.json
ファイルに対する変更を示しています。
-
- "version": "1.0",
- これは変更前の
version
キーの行です。この行自体は変更されていませんが、その直後に新しい行が追加されています。
- これは変更前の
-
+ "manifest_version": 2,
- この行が新しく追加された部分です。これは、このChrome拡張機能がManifest Version 2の仕様に準拠していることを宣言しています。Chromeブラウザは、このキーを見て、拡張機能の動作を適切に処理します。
-
- "background_page": "background.html",
- この行は削除された部分です。Manifest Version 1で使用されていた
background_page
キーは、Manifest Version 2では非推奨となり、使用できなくなりました。
- この行は削除された部分です。Manifest Version 1で使用されていた
-
+ "background": {
-
+ "page": "background.html"
-
+ },
- これらの3行は新しく追加された部分で、Manifest Version 2におけるバックグラウンドページの新しい指定方法です。
background
というオブジェクトが導入され、その中にpage
キーを使ってバックグラウンドHTMLファイル(background.html
)のパスを指定します。この構造化された形式は、将来的にイベントページやサービスワーカーなど、より複雑なバックグラウンド処理の定義を可能にするための基盤となります。
- これらの3行は新しく追加された部分で、Manifest Version 2におけるバックグラウンドページの新しい指定方法です。
これらの変更により、gophertool
拡張機能はChromeブラウザの最新の拡張機能プラットフォーム要件に適合し、将来にわたって互換性を維持できるようになりました。
関連リンク
- Manifest Version Update - Google Chrome Extensions (コミットメッセージに記載されていたリンク)
- Manifest file format - Chrome Developers (Manifest V3に関する最新情報ですが、MV2からの進化を理解する上で参考になります)
- Migrate to Manifest V3 - Chrome Developers (Manifest V2からV3への移行ガイドですが、MV2の概念を理解するのに役立ちます)
参考にした情報源リンク
- Google Chrome Extensions Manifest Version documentation (コミットメッセージに記載されていたリンク)
- Chrome Developers 公式ドキュメント (Manifest V2およびV3に関する情報)
- 一般的なChrome拡張機能開発に関する知識
参考にした情報源リンク
- Google Chrome Extensions Manifest Version documentation (コミットメッセージに記載されていたリンク)
- Chrome Developers 公式ドキュメント (Manifest V2およびV3に関する情報)
- 一般的なChrome拡張機能開発に関する知識
- Web search results for "Chrome Extensions Manifest V1 vs V2" (Google Search)