manifest.json の役割と記述方法(Manifest V3対応)

Chrome拡張機能の開発において、manifest.json は拡張機能の「設定ファイル」として中心的な役割を果たします。Manifest V3ではセキュリティやパフォーマンスの観点から仕様が大きく見直されており、記述方法にもいくつかの重要な変更点があります。以下に、Manifest V3における manifest.json の役割と記述方法を詳しく説明します。


1. manifest.json の役割

  • 拡張機能のメタデータ(名前、バージョン、アイコンなど)を定義

  • 拡張機能が使用する権限(permissions)を明示

  • 拡張機能の構成ファイル(バックグラウンドスクリプト、アクション、コンテンツスクリプトなど)を宣言

  • ブラウザに対して、拡張機能の動作の概要を伝える

Manifestファイルがないと、Chromeは拡張機能として認識しません。


2. Manifest V3 の基本構成(例)

json
{ "manifest_version": 3, "name": "サンプル拡張機能", "version": "1.0", "description": "これはサンプルのChrome拡張機能です。", "action": { "default_popup": "popup.html", "default_icon": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" } }, "background": { "service_worker": "background.js" }, "permissions": [ "storage", "tabs" ], "host_permissions": [ "https://*.example.com/*" ], "content_scripts": [ { "matches": ["https://*.example.com/*"], "js": ["content.js"] } ], "icons": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" } }

3. 主なプロパティの解説

manifest_version

  • 値は 3 を指定(Manifest V2は2023年以降非推奨)

  • このフィールドによりChromeがManifest V3であることを判断

name, version, description

  • ユーザーやChromeが拡張機能を識別するための基本情報

action

  • ブラウザツールバーの拡張機能アイコンに関連する設定

  • default_popup で表示されるHTMLファイルを指定

  • default_icon に各サイズのアイコンを設定

background

  • service worker を指定(Manifest V3では background.js は長時間の常駐不可)

  • 旧来の persistent: true は使用不可

permissions

  • 拡張機能が必要とするChrome APIへのアクセス権限を記述(例:storage, tabs

host_permissions

  • Webページへのアクセスに関する明示的なホスト指定

  • 以前の permissions に書いていたURLアクセス権限はここへ分離された

content_scripts

  • 対象ページ上で実行するスクリプトの指定

  • matches に対象URLパターン、js に読み込むスクリプトファイル

icons

  • 拡張機能のアイコンとして使用する画像のパスを指定(サイズ別)


4. Manifest V2との主な違い(補足)

機能 Manifest V2 Manifest V3
バックグラウンド background.page background.service_worker
スクリプト動作 常駐型(persistent) 非常駐型(イベントベース)
パーミッション permissions にURL含む URLは host_permissions に分離
実行環境 グローバルなスコープ スコープが制限されたworker

5. 注意点

  • manifest.json は UTF-8 形式で保存

  • 構文エラーがあると拡張機能の読み込みが失敗する

  • service_worker は同期的な処理ができないため、Promiseベースの設計が推奨される


必要に応じて、用途に応じた commands(ショートカットキー)、options_page(設定画面)などのプロパティも追加できます。

生成日:2025/05/18