ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
Chrome拡張機能は、Google Chromeに機能を追加する小さなアプリで、HTML・CSS・JavaScriptという普段のWeb制作と同じ技術で作れます。特別な言語やコンパイルは不要で、フォルダにファイルを置いてブラウザに読み込ませるだけで動かせるのが魅力です。中心となるのがmanifest.jsonという設定ファイルで、拡張機能の名前・バージョン・権限・どのファイルを使うかをここで宣言します。本記事では現行仕様Manifest V3を前提に、作成の全体像を解説します。
拡張機能の構成要素
Chrome拡張は、役割の異なるいくつかの部品から成り立ちます。
| 部品 | 役割 |
|---|---|
| manifest.json | 拡張機能の設計図。名前・バージョン・権限・各ファイルの参照を宣言する必須ファイル |
| popup(HTML/CSS/JS) | ツールバーのアイコンをクリックしたときに表示される小さなUI |
| content script | 閲覧中のWebページに注入され、ページのDOMを操作するJavaScript |
| background(Service Worker) | イベント待ち受けや通信などの裏方処理。V3ではService Workerで記述する |
| アイコン | 16×16・48×48・128×128の各サイズを用意する |
使い方・手順
1. フォルダとmanifest.jsonを作る
作業用フォルダを作り、中にmanifest.jsonを置きます。最小構成の例は次の通りです(V3)。JSONの文字列はダブルクオートで囲みます。
{
"manifest_version": 3,
"name": "My First Extension",
"version": "1.0",
"description": "最初のChrome拡張機能",
"action": {
"default_popup": "popup.html",
"default_icon": "icon48.png"
},
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
},
"permissions": ["storage"]
}
2. popup用のHTML/JSを作る
アイコンクリックで開くUIを用意します。
<!-- popup.html -->
<!DOCTYPE html>
<html>
<body>
<h1>Hello!</h1>
<button id="btn">クリック</button>
<script src="popup.js"></script>
</body>
</html>
// popup.js
document.getElementById("btn").addEventListener("click", () => {
alert("ボタンが押されました");
});
3. 拡張機能を読み込む(テスト)
1. アドレスバーに chrome://extensions と入力して開く
2. 右上の「デベロッパーモード」をONにする
3. 「パッケージ化されていない拡張機能を読み込む」をクリック
4. 作成したフォルダを選択する
ツールバーにアイコンが追加され、すぐに動作を確認できます。コードを修正したら拡張機能カードの再読み込みボタンを押せば反映されます。
実用例・Tips
content scriptでページを操作:閲覧中のページにJavaScriptを注入したい場合は、manifest.jsonにcontent_scriptsを宣言します。
"content_scripts": [
{
"matches": ["https://*/*"],
"js": ["content.js"]
}
]
- 背景処理はService Workerで:V3では常駐スクリプトの代わりにイベント駆動のService Worker(
background.service_worker)を使う。 - chrome.storageで保存:設定値はlocalStorageでなく
chrome.storageAPIを使うと拡張機能全体で共有・同期できる。 - 公開はChrome Web Store:完成した拡張はZip化してデベロッパー登録後に申請・公開できる。
注意点・落とし穴
- Manifest V2は廃止:新規はV3で作る。古い記事のV2記法(background pages等)はそのままでは動かない。
- 権限の取り過ぎ:
permissionsやmatchesを広く取り過ぎると、審査落ちやユーザーの不信につながる。最小限にする。 - JSONの構文エラー:manifest.jsonは末尾カンマやコメント不可。崩れていると読み込み時にエラーになる。
- アイコンの欠落:指定したアイコンファイルが無いと警告やエラーになる。パスとサイズを揃える。
- Service Workerの寿命:V3のSWは常駐せず随時起動・停止する。グローバル変数に状態を持たず、
chrome.storage等に保存する。
関連リンク
拡張機能の構成ファイルを理解するには、各ファイル形式の基礎が役立ちます。HTML(.html)でUIのマークアップを、CSS(.css)で見た目のスタイルを、設定ファイルであるJSON(.json)でmanifest.jsonの記法を確認してください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Spring Framework 記事一覧31件|DI・設定・例外の対処 2026-09-07 07:45:13
- Laravel 記事一覧55件|環境構築・ルーティング・DB・エラー対処 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Javaの定数 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- hostnameコマンドの使い方|Windows・Linux・macOSでホスト名確認 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Oracle DROP USERでユーザー削除|CASCADE・接続中ユーザーの対処 2026-09-07 07:45:13
- SQLとは|DDL・DMLとリレーショナルデータベース操作の基本 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- NetBeansでTomcatを起動する手順|サーバ登録・ポート・トラブル対処 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?