crxjsを使えばChrome拡張機能のReact開発環境がサクッと用意できる
主張はタイトルで終わっている。crxjs、すごい!ほんとうにすごいんだ!というだけ。
あとは余談。
現代、React
+TypeScript
+Vite
でフロントを書いている人は結構いると思う。
そこにcrxjs
を組み合わせればあっという間に拡張機能も書けるのである。
実装例
githubに上げている。
拡張機能自体はピュアなJavaScriptだけでいい
拡張機能を作るだけなら、所定のファイル群とjsを書くでも全然いい。
例えばchrome公式チュートリアルが参考になる。
適当なディレクトリを作って、manifest.json
とindex.html
を書いてブラウザにインストールすればあっという間に出来上がる。
manifest.json
{
"name": "Hello Extensions",
"description": "Base Level Extension",
"version": "1.0",
"manifest_version": 3,
"action": {
"default_popup": "hello.html",
"default_icon": "hello_extensions.png"
}
}
index.html
<html>
<body>
<h1>Hello Extensions</h1>
</body>
</html>
crxjs
の何がいいか
以下の3点が挙げられる。
1. テンプレからでも後追いでも導入がラク
公式手順の通り進めればあっという間にできる。
ReactだけでなくVue, Solid, Svelteにも対応している。
2. manifest.jsonでロードする各スクリプトをビルド前のパスで書いたうえで、ビルド後の読み替えまで自動でやってくれる
本来manifest.json
では最終的にロードするjsファイルへのパスを指定する必要があるが、プロジェクトでのファイル名とビルド後のファイル名は往々にして一致しない。
単に拡張子が.ts
から.js
に変わるだけならまだいいが、ファイル名自体変わったり、パスも変更になったりする場合もあり、そこまで考慮してjsonを書いておくか、ビルド後のフックなどで置き換える処理が必要になってくる。
そこをcrxjs
が全て解決する。
以下のように、プロジェクトソース基準でのファイルパスを指定しておけば、ビルド後にいい感じに読み替えたmanifest.json
をお出ししてくれる。
import { defineManifest } from "@crxjs/vite-plugin";
export default defineManifest({
...(中略)...
background: {
service_worker: "src/background.ts",
},
...(中略)...
}
3. ホットリロードが効く
当初npm init
からスクラッチで始めたため、ソースを更新→拡張機能の再インポート→ページリロードというのを毎度ポチポチ繰り返すのが地味に苦痛だった。
普段からvite
でWebアプリを作っている身としてはホットリロードはぜひ欲しいところだったが、crxjs
の設定一つでサクッと導入できた。
というわけでみんなも気軽に拡張機能を作ろう。