<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chrome Extension</title>
	<atom:link href="https://techgrowup.net/tag/chrome-extension/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Sat, 01 Jan 2022 17:52:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>Chrome Extension</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>初心者がTypescript×ReactでChrome拡張を作った話</title>
		<link>https://techgrowup.net/chrome-extension-tab-group-manager/</link>
					<comments>https://techgrowup.net/chrome-extension-tab-group-manager/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sat, 01 Jan 2022 17:52:09 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Chrome Extension]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Typescript]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1436</guid>

					<description><![CDATA[作った経緯 　今回作ってみたものは下記「Tab Group Manager」というものになります。このChromeタブをグループにまとめる機能は2021年３月頃に登場していてその辺りから使っていたのですが、下記フラストレ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">作った経緯</h2>



<p class="wp-block-paragraph">　今回作ってみたものは下記「Tab Group Manager」というものになります。このChromeタブをグループにまとめる機能は2021年３月頃に登場していてその辺りから使っていたのですが、下記フラストレーションがありました。</p>



<ul class="wp-block-list"><li><span class="marker-under">タブグループを保存できない</span></li><li><span class="marker-under">Chromeを閉じた時やPCを再起動した時などに復元できない</span></li></ul>





<a rel="noopener" target="_blank" href="https://chrome.google.com/webstore/detail/tab-group-manager/fhknndpocmcojcgplkllonaijipelilj?hl=ja&#038;authuser=0" title="Tab Groups Manager - Chrome ウェブストア" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img fetchpriority="high" decoding="async" src="https://lh3.googleusercontent.com/k0qsBRkmcpMaoAe7gHqkgfaUp_2Ipfi-pnuIJZKqwP_vR9aUY20mjw3s4tkKC6PH7AZVhSTRxmaQ15Jcf5BPiLq3wAI=s128-rj-sc0x00ffffff" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Tab Groups Manager - Chrome ウェブストア</div><div class="blogcard-snippet external-blogcard-snippet">タブグループを保存・管理し、簡単に追加・復元できる拡張機能です。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://chromewebstore.google.com/detail/tab-groups-manager/fhknndpocmcojcgplkllonaijipelilj" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">chromewebstore.google.com</div></div></div></div></a>




<p class="wp-block-paragraph">　そこでReactの勉強も兼ねて無いものは作ってしまおうということで作り始めました。</p>



<h2 class="wp-block-heading">Chrome Extensionの構成</h2>



<p class="wp-block-paragraph">　まず作り始めるにあたって、Chrome Extensionを作る際に必要なものをまとめます。</p>



<ul class="wp-block-list"><li>background scripts</li><li>content scripts</li><li>options page, UI elements</li><li>manifest.json</li></ul>



<p class="wp-block-paragraph">　簡単にそれぞれの役割などをまとめます。</p>



<figure class="wp-block-table aligncenter"><div class="scrollable-table"><table><tbody><tr><td class="has-text-align-center" data-align="center">項目</td><td class="has-text-align-left" data-align="left">説明</td></tr><tr><td class="has-text-align-center" data-align="center"><a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/service_workers/">background scripts<span class="fa fa-external-link external-icon anchor-icon"></span></a></td><td class="has-text-align-left" data-align="left">Chrome ExtensionではバックグラウンドでService Workersというプロセスが常にChromeの状態を監視しており、<br>background scriptsを利用することで、Chromeの状態によってアクションを起こすことが可能になります。<br>例えば、特定のタブが閉じられたら保存しておくなどです。</td></tr><tr><td class="has-text-align-center" data-align="center"><a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/content_scripts/">content scripts<span class="fa fa-external-link external-icon anchor-icon"></span></a></td><td class="has-text-align-left" data-align="left"><meta charset="utf-8">ブラウザ上で表示されているUIに対して、スクリプトを挿入して文字色や背景色を変えたり、<br>ボタンを追加するといった一般的なDOM操作が可能になります。<br>また、Chrome APIを呼び出すことでタブ情報を取得したりといったことも可能になります。</td></tr><tr><td class="has-text-align-center" data-align="center"><a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/options/">options page<span class="fa fa-external-link external-icon anchor-icon"></span></a>, <a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/user_interface/">UI elements<span class="fa fa-external-link external-icon anchor-icon"></span></a></td><td class="has-text-align-left" data-align="left">Chrome Extensionはpopup画面とoption画面で構成されることが多く、<br>popup画面はブックマークバーの上にある拡張アイコンを押すと開かれる画面です。<br>それに対してoption画面は新しいタブとしてフルスクリーンで表示できるUIのことになります。</td></tr><tr><td class="has-text-align-center" data-align="center"><a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/manifest/">manifest.json<span class="fa fa-external-link external-icon anchor-icon"></span></a></td><td class="has-text-align-left" data-align="left">Chrome Extensionの設定ファイル(json形式)のことです。<br>主な要素としてはManifestのバージョン、名前、Service Workers、パーミッション、content scripts、option pageなどです。<br>パーミッションについては例えばタブ情報を利用する場合は、[&#8220;tabs&#8221;]と記載しないとタブ情報にアクセスできなくなりますので、ご注意ください。</td></tr></tbody></table></div></figure>



<p class="wp-block-paragraph">　私が作成したChrome ExtensionのManifest.jsonは以下のような感じになります。</p>



<pre class="wp-block-code"><code>{
  "manifest_version": 3,
  "name": "Tab Group Manager",
  "description": "タブグループを保存し、いつでも開く事ができる拡張です。",
  "version": "1.0.2",
  "options_ui": {
    "page": "options.html",
    "open_in_tab": true
  },
  "background": {
    "service_worker": "js/chrome_tab_background_worker.js"
  },
  "action": {
    "default_popup": "popup.html"
  },
  "icons": { "16": "icon16.png", "48": "icon48.png", "128": "icon128.png" },
  "content_scripts": &#91;
    {
      "all_frames": false,
      "matches": &#91;"&lt;all_urls&gt;"],
      "js": &#91;"js/vendor.js"],
      "run_at": "document_end"
    }
  ],
  "permissions": &#91;"storage", "tabGroups", "tabs"],
  "host_permissions": &#91;"&lt;all_urls&gt;"]
}
</code></pre>



<p class="wp-block-paragraph">　詳しくは下記公式ページを御覧ください。</p>





<a rel="noopener" target="_blank" href="https://developer.chrome.com/docs/extensions/mv3/manifest/" title="Manifest file format  |  Chrome for Developers" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdeveloper.chrome.com%2Fdocs%2Fextensions%2Fmv3%2Fmanifest%2F?w=320&#038;h=180" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Manifest file format  |  Chrome for Developers</div><div class="blogcard-snippet external-blogcard-snippet">An overview of the manifest.json properties of a Chrome Extension.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://developer.chrome.com/docs/extensions/reference/manifest" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">developer.chrome.com</div></div></div></div></a>




<h2 class="wp-block-heading">作り方</h2>



<p class="wp-block-paragraph">　公開されているOSSでTypescriptでChrome Extensionを作れるスタータキットがありましたので、こちらを利用させて頂きました。</p>





<a rel="noopener" target="_blank" href="https://github.com/chibat/chrome-extension-typescript-starter" title="GitHub - chibat/chrome-extension-typescript-starter: Chrome Extension TypeScript Starter" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/a835193bf7196023b2693123646d2b3a428b4b07b47a6e66aa8b3df33b222905/chibat/chrome-extension-typescript-starter" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - chibat/chrome-extension-typescript-starter: Chrome Extension TypeScript Starter</div><div class="blogcard-snippet external-blogcard-snippet">Chrome Extension TypeScript Starter. Contribute to chibat/chrome-extension-typescript-starter development by creating an...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/chibat/chrome-extension-typescript-starter" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>




<p class="wp-block-paragraph">　基本的には、UI画面(option画面とpopup画面)、タブを管理する機能、テスト(Jest)をReactで書きTypescriptをJSにトランスパイルしてWebpackでまとめています。テストが書きやすいようにUI画面とタブ管理、バックグラウンドタスクなどに分けていましたが、途中でテストを書くのが大変でごちゃごちゃしてしまいました&#8230;<br>　この辺は初めから作る機能を大雑把にしか決めておらず追加追加としていったので、収集がつかなくなってしまった感じがあります。コードを公開していますので良かったら見てみて下さい！</p>





<a rel="noopener" target="_blank" href="https://github.com/daichimizuno/tab-group-manager" title="GitHub - daichimizuno/tab-groups-manager: auto-create-tab-group-chrome-extension" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/725649a365c48fd692abe525898ffc1c32f2ae59f50ded3bc8e16537a4a3becd/daichimizuno/tab-groups-manager" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - daichimizuno/tab-groups-manager: auto-create-tab-group-chrome-extension</div><div class="blogcard-snippet external-blogcard-snippet">auto-create-tab-group-chrome-extension. Contribute to daichimizuno/tab-groups-manager development by creating an account...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/daichimizuno/tab-groups-manager" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>




<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/chrome-extension-tab-group-manager/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-07-02 19:22:19 by W3 Total Cache
-->