SlideShare a Scribd company logo
Chrome拡張機能の
作りかた
あおぞう
どうやってつくるの?
• HTML
• javascript
• CSS
だけで作れちゃいます!
抑えておくべき概念
• Browser Action
• Content Script
• Background Page
• Options
• Manifest
Browser Action
ツールバーのアイコンをクリックした際の動作
• ポップアップ画面を出せる(HTML/CSS/Javascript)
• ポップアップ画面を出さずに処理を開始することもできる
Content Script
下記の特性を持つjavascriptのスコープ
• 開いているページのDOMにアクセスできる
• ページ内で定義されている変数・関数にはアクセスできない
• Chrome APIが一部しか利用できない
• Background Pageとのメッセージ通信ができる
イメージ
DOM
var user_name = ”aozou”;
function logout() {
…
}
var el = document.
getElementById(”container”);
var child = ・・・
el.appendChild(child);
alert(user_name); // undefined
logout(); // logout is not defined
変数・関数
chrome.runtime.sendMessage() ○
chrome.downloads.download() ☓
取得・更新
Content Script Chromeで見てるページ
Background Page
下記の特性を持つjavascriptのスコープ
• DOMにはアクセスできない
• すべてのChromeAPIを利用できる
• ブラウザ内のイベント監視ができる
• アイコンクリック/ブックマーク削除/タブ閉じる/ページ遷移...etc
• Content Script とのメッセージ通信
イメージ
Content ScriptBackground Page
イベント
発火
アイコンクリック
ブックマーク削除
タブ閉じる
ページ遷移
...etc
各EventListenerが叩かれる
DOMが必要な処理の場合、
Content Scriptに相互メッセージ
を行う
DOMくれ
DOM
あげる
Options
• オプション用のページを表示(HTML/CSS/javascript)
• 基本的には設定値を保存するためのページ
• Chrome APIも一部利用できる(もしかしたら制限ないかも?)
• Content Script/Background Pageへのメッセージ送信
• ストレージAPI(chrome.storage.*/localStorage...etc)
イメージ
スコープ間でのメッセージ通信
(※検証不足な点があるので、ご了承ください。。。自分のイメージです)
Content
Script
Background
Page
Options
双方向
単方向
Popup
(Browser Action)
Manifest(manifest.json)
↓の概念に対応する設定を記述するファイル
• Browser Action
• Content Script
• Background Page
• Options
{
"name": "My extension",
...
"browser_action": {
"default_icon": { // optional
"16": "images/icon16.png", // optional
"24": "images/icon24.png", // optional
"32": "images/icon32.png" // optional
},
"default_title": "Google Mail", // optional; shown in tooltip
"default_popup": "popup.html" // optional
},
...
}
{
"name": "My extension",
...
"content_scripts": [
{
“matches”: [“http://*.nytimes.com/*”],
"css": ["myStyles.css"],
"js": ["contentScript.js"]
}
],
...
}
{
"name": " My extension",
...
"background": {
"scripts": ["background.js"],
“persistent”: false // chrome.webRequest使用時はtrue
},
...
}
{
"name": "My extension",
...
"options_ui": {
"page": "options.html",
"open_in_tab": false
},
...
}
open_in_tab: false
open_in_tab: true
イメージ
My_extension/
├── background.js
├── contentScript.js
├── myStyles.css
├── manifest.json
├── options.html
└── popup.html
Background Page
Content Script
Options
Brwoser Action
React/Vue.js/Typescript等も使える
• 最終的にjavascript/HTML/CSSにビルドすれば良いので
• React + Typescript のボイラーテンプレートもあるので参考に
• https://github.com/martellaj/chrome-extension-react-typescript-
boilerplate
微妙なところ
• ユニットテストの書き方が分からない(可能なのか?)
• chrome.apiが基本callbackで、async/awaitに対応していない
• コールバックの戻り値をPromise型で返すとawaitできるようです
• chrome-extension-asyncってゆうmodule入れて対応できる
https://www.npmjs.com/package/chrome-extension-async
• Content Scriptではasync/awaitがうまくできないかも?(自分はでき
なかったです。。。)
まとめ
• 今まで出てきた概念を抑えると簡単に作れるよ
• 細かいことをやりたくなったら
• 公式ドキュメントを見てChromeAPIを使い倒す
• Manifestの設定項目を確認してみる
https://developer.chrome.com/extensions/api_index

More Related Content

What's hot

実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
Yusuke Naka
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
シスコシステムズ合同会社
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
OpenWRTとIPv6で高速インターネット!
OpenWRTとIPv6で高速インターネット!OpenWRTとIPv6で高速インターネット!
OpenWRTとIPv6で高速インターネット!
KageShiron
 
Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~
Hideaki Aoyagi
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
モノビット エンジン
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
Satoshi Shimazaki
 
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
Amazon Web Services Japan
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
Yuta Imai
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
モノビット エンジン
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
VirtualTech Japan Inc.
 
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
Yasunori Goto
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
NTT DATA Technology & Innovation
 
Rac rac one_node説明資料
Rac rac one_node説明資料Rac rac one_node説明資料
Rac rac one_node説明資料
Hiroki Morita
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
NTT DATA Technology & Innovation
 
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
Naoyuki Yamada
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
NTT DATA OSS Professional Services
 

What's hot (20)

実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
OpenWRTとIPv6で高速インターネット!
OpenWRTとIPv6で高速インターネット!OpenWRTとIPv6で高速インターネット!
OpenWRTとIPv6で高速インターネット!
 
Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~Amazon EKS への道 ~ EKS 再入門 ~
Amazon EKS への道 ~ EKS 再入門 ~
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
OSC2011 Tokyo/Spring 自宅SAN友の会(前半)
 
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
20190205 AWS Black Belt Online Seminar 公共機関によるAWSの利活用
 
CloudFront経由でのCORS利用
CloudFront経由でのCORS利用CloudFront経由でのCORS利用
CloudFront経由でのCORS利用
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
Rac rac one_node説明資料
Rac rac one_node説明資料Rac rac one_node説明資料
Rac rac one_node説明資料
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
 
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイントPostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
 

Similar to Chrome拡張機能の作りかた

Web development fundamental
Web development fundamentalWeb development fundamental
Web development fundamental
Takuya Kumagai
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~ngi group.
 
Web development fundamental_v2
Web development fundamental_v2Web development fundamental_v2
Web development fundamental_v2
Takuya Kumagai
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
yoshikawa_t
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
shigeya
 
Chromeデベロッパーツール
ChromeデベロッパーツールChromeデベロッパーツール
Chromeデベロッパーツール
Keiichi Kobayashi
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
yoshikawa_t
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
OCHI Shuji
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
Moto Yan
 
Web Component概要
Web Component概要Web Component概要
Web Component概要
Shumpei Shiraishi
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Shumpei Shiraishi
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
Yasuhito Yabe
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
Sho Ito
 
Firefox DevTools
Firefox DevToolsFirefox DevTools
Firefox DevTools
dynamis
 
Chrome 拡張のご紹介
Chrome 拡張のご紹介Chrome 拡張のご紹介
Chrome 拡張のご紹介
Tetsunosuke Saito
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
Yuki Ishikawa
 
Devtools.next
Devtools.nextDevtools.next
Devtools.next
yoshikawa_t
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実Takumi Ohashi
 

Similar to Chrome拡張機能の作りかた (20)

Web development fundamental
Web development fundamentalWeb development fundamental
Web development fundamental
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Web development fundamental_v2
Web development fundamental_v2Web development fundamental_v2
Web development fundamental_v2
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
 
Chromeデベロッパーツール
ChromeデベロッパーツールChromeデベロッパーツール
Chromeデベロッパーツール
 
20140409勉強会
20140409勉強会20140409勉強会
20140409勉強会
 
jQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & TipsjQuery Mobile 最新情報 & Tips
jQuery Mobile 最新情報 & Tips
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
Web Component概要
Web Component概要Web Component概要
Web Component概要
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5Concentrated HTML5 & Attractive HTML5
Concentrated HTML5 & Attractive HTML5
 
Firefox DevTools
Firefox DevToolsFirefox DevTools
Firefox DevTools
 
Chrome 拡張のご紹介
Chrome 拡張のご紹介Chrome 拡張のご紹介
Chrome 拡張のご紹介
 
JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
 
Devtools.next
Devtools.nextDevtools.next
Devtools.next
 
HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実HTML5でスマートフォン開発の理想と現実
HTML5でスマートフォン開発の理想と現実
 

Chrome拡張機能の作りかた