🕶️
自分用Chromeの新しいタブをVite+React+TypeScriptで作る
はじめに
Google Chromeの新しいタブを自分用にカスタマイズしたいなと思い、どうやってやるのかを調べた際のメモです。
Viteのプロジェクトを作成する
https://vitejs.dev/guide/#scaffolding-your-first-vite-project を参考にViteのプロジェクトを作成します。今回はReact+TypeScriptでプロジェクトを作成します。
$ npm create vite@latest my-newtab
✔ Select a framework: › React
✔ Select a variant: › TypeScript
Scaffolding project in /XXX/XXX/XXX/my-newtab...
Done. Now run:
cd my-newtab
npm install
npm run dev
テンプレートが作成できたら指示に従って npm install
します。
cd my-newtab
npm install
ビルドして新しいタブで表示するページを生成する
一旦Viteプロジェクトの初期状態のページを表示するためにビルドします。
$ npm run build
ビルドが完了すると dist
にhtml,js,cssが生成されます。
manifest.json
を作成する
プロジェクト直下に manifest.json
を作成します
manifest.json
{
"name": "my-newtab",
"manifest_version": 3,
"description": "my-newtabの説明",
"version": "0.0.1",
"permissions": [
"management"
],
"chrome_url_overrides": {
"newtab": "dist/index.html"
}
}
- 新しいタブのページをoverrideするために、
permissions
に"management"
を設定します。
https://developer.chrome.com/docs/extensions/reference/management/
The chrome.management API provides ways to manage the list of extensions/apps that are installed and running. It is particularly useful for extensions that override the built-in New Tab page.
-
chrome_url_overrides
でnewtab
(新しいタブ)をViteで生成したページを表示するようにdist/index.html
を指定します。
作成したプロジェクトを拡張機能としてChromeで読み込む
- chrome://extensions/ にアクセスします。
- ディベロッパーモードをONにします。
- 「パッケージ化されていない拡張機能を読み込む」から先ほど作成したプロジェクトを選択します。
選択すると一覧に自作の拡張機能が表示されます。
- 新しいタブを開くとモダールが表示されるので「そのままにする」を選択します。
これで完了と思いきや、まさかの画面が真っ白です。
コンソールでログを確認してみると、Failed to load resource: net::ERR_FILE_NOT_FOUND
と表示されています。jsやcssが読み込めていないようです。
アセットのパスを相対パスにする
package.jsonのbuildコマンドを修正して、アセットのパスを相対パスにします。
package.json
{
・・・
"scripts": {
"dev": "vite",
// 👇 See: https://vitejs.dev/guide/build.html#public-base-path
"build": "tsc && vite build --base=./",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
・・・
}
これで再度、npm run build
して、Chromeで新しいタブを開くとViteの初期ページが表示されます🎉
あとは
- 表示させたい画面を実装
npm run build
で反映で自分専用の新しいタブを実装できます。
Discussion