1.2 アーキテクチャ
Extension Architecture
リンク
拡張機能の構成要素
Chrome拡張機能は、複数のコンポーネントが連携して動作する。各コンポーネントは異なる実行コンテキストを持ち、特定の役割を担う。
| コンポーネント | 役割 | 実行環境 |
|---|---|---|
| manifest.json | 拡張機能の設定・メタデータ | - |
| Service Worker | バックグラウンド処理、イベント処理 | 独立したコンテキスト |
| Content Scripts | Webページとの連携 | Webページのコンテキスト |
| Popup | ツールバーアイコンクリック時のUI | 独立したコンテキスト |
| Options Page | 拡張機能の設定画面 | 独立したコンテキスト |
| Side Panel | サイドパネルUI | 独立したコンテキスト |
実行コンテキストの分離
拡張機能の各コンポーネントは、セキュリティのため異なる実行コンテキストで動作する。これにより、悪意あるWebページから拡張機能を保護している。
Service Worker(バックグラウンド)
- DOMにアクセスできない
- Chrome APIsに完全アクセス可能
- イベント駆動で動作(常駐しない)
- ネットワークリクエストの傍受が可能
Content Scripts
- WebページのDOMにアクセス可能
- Chrome APIsは一部のみ利用可能
- ページのJavaScriptとは分離された環境
- window.postMessage()でページと通信可能
Popup / Options / Side Panel
- 独自のHTMLページとして動作
- Chrome APIsに完全アクセス可能
- 他のWebページとは完全に分離
通信方法
異なるコンテキスト間でデータをやり取りするには、chrome.runtime.sendMessage()やchrome.tabs.sendMessage()を使用したメッセージングを行う。
典型的なファイル構成
拡張機能プロジェクトの一般的なディレクトリ構造を以下に示す。
my-extension/
├── manifest.json # 必須:設定ファイル
├── service-worker.js # バックグラウンド処理
├── content.js # Webページ注入スクリプト
├── content.css # Webページ注入スタイル
├── popup/
│ ├── popup.html # ポップアップUI
│ ├── popup.js # ポップアップロジック
│ └── popup.css # ポップアップスタイル
├── options/
│ ├── options.html # 設定画面UI
│ ├── options.js # 設定画面ロジック
│ └── options.css # 設定画面スタイル
├── icons/
│ ├── icon16.png # 16x16アイコン
│ ├── icon48.png # 48x48アイコン
│ └── icon128.png # 128x128アイコン
└── _locales/ # 国際化対応(オプション)
└── ja/
└── messages.json
ファイル名の制限
manifest.jsonは必ずルートディレクトリに配置し、ファイル名も変更できない。その他のファイルは任意の名前・配置が可能だが、manifest.jsonで正しくパスを指定する必要がある。
コンポーネント間通信
拡張機能の各コンポーネント間でデータをやり取りする主な方法を示す。
| 通信パターン | 使用API | 用途 |
|---|---|---|
| Content → Service Worker | chrome.runtime.sendMessage() | ページ情報の送信 |
| Service Worker → Content | chrome.tabs.sendMessage() | ページ操作の指示 |
| Popup ↔ Service Worker | chrome.runtime.sendMessage() | 設定変更、状態取得 |
| 長期接続 | chrome.runtime.connect() | 継続的なデータストリーム |
| 共有データ | chrome.storage | 設定、状態の永続化 |
参考文献
[1] Chrome Extensions - Architecture Overview
[2] Chrome for Developers - Extension development concepts
[1] Chrome Extensions - Architecture Overview
[2] Chrome for Developers - Extension development concepts