Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 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つの主要な変更が行われています。

  1. manifest_versionキーの追加:

    • Manifest Version 2に準拠していることを明示するために、"manifest_version": 2という新しいキーと値のペアが追加されました。これは、Chromeブラウザが拡張機能をロードする際に、どのマニフェストバージョンに従って解析すべきかを識別するための必須の宣言です。
  2. background_pageからbackgroundオブジェクトへの移行:

    • Manifest Version 1でバックグラウンドページを指定するために使用されていた"background_page": "background.html"というキーが削除されました。
    • 代わりに、Manifest Version 2の新しい形式である"background": { "page": "background.html" }という構造が導入されました。この変更により、バックグラウンドスクリプトの定義がより構造化され、将来的な拡張機能の機能追加(例えば、イベントページやサービスワーカーのサポート)に対応しやすくなりました。backgroundオブジェクトは、拡張機能のバックグラウンドで実行されるスクリプトやページを定義するためのコンテナとして機能します。

これらの変更は、単なる構文の変更以上の意味を持ちます。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では非推奨となり、使用できなくなりました。
  • + "background": {

  • + "page": "background.html"

  • + },

    • これらの3行は新しく追加された部分で、Manifest Version 2におけるバックグラウンドページの新しい指定方法です。backgroundというオブジェクトが導入され、その中にpageキーを使ってバックグラウンドHTMLファイル(background.html)のパスを指定します。この構造化された形式は、将来的にイベントページやサービスワーカーなど、より複雑なバックグラウンド処理の定義を可能にするための基盤となります。

これらの変更により、gophertool拡張機能はChromeブラウザの最新の拡張機能プラットフォーム要件に適合し、将来にわたって互換性を維持できるようになりました。

関連リンク

参考にした情報源リンク

  • 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)