chrome-ext について
chrome-ext は、Chrome Developer Relations が管理する Manifest V3 拡張機能の開発ガイドです。拡張機能の開発、移行、最適化を行う開発者向けに、サービスワーカーからストレージやパフォーマンスまでを影響度順の 8 分野に整理しています。
主な機能
- 01優先度別に 8 分野のルールを整理
- 02サービスワーカーのライフサイクルを解説
- 03コンテンツスクリプトと DOM 操作を最適化
- 04メッセージングとストレージ操作を案内
- 05ネットワーク権限とメモリ管理を扱う
- 06UI パフォーマンスと API 利用の指針
活用シーン
- 01Manifest V3 拡張機能の新規開発
- 02Manifest V2 から V3 への移行
- 03サービスワーカーの状態管理を最適化
- 04拡張機能のパフォーマンス問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill chrome-extインストール後、Claude Code で/chrome-extを入力して読み込まれたか確認します。
詳細
Chrome Developer Relations Chrome 拡張機能のベストプラクティス
Chrome Developer Relations がメンテナンスする、Chrome 拡張機能(Manifest V3)の包括的なパフォーマンス最適化ガイドです。自動リファクタリングとコード生成の指針となるよう、影響度の高い順に優先順位を付けた 8 つのカテゴリに、40 以上のルールを掲載しています。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- Chrome 拡張機能のコードを新たに記述するとき
- Manifest V2 から Manifest V3 に移行するとき
- サービスワーカーのライフサイクルと状態管理を最適化するとき
- ページとやり取りするコンテンツスクリプトを実装するとき
- 拡張機能のパフォーマンス問題をデバッグするとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | サービスワーカーのライフサイクル | 重大 | sw- |
| 2 | コンテンツスクリプトの最適化 | 重大 | content- |
| 3 | メッセージパッシングの効率化 | 高 | msg- |
| 4 | ストレージ操作 | 高 | storage- |
| 5 | ネットワークと権限 | 中〜高 | net- |
| 6 | メモリ管理 | 中 | mem- |
| 7 | UI パフォーマンス | 中 | ui- |
| 8 | API の使用パターン | 低〜中 | api- |
クイックリファレンス
1. サービスワーカーのライフサイクル(重大)
sw-persist-state-storage- グローバル変数ではなく chrome.storage を使って状態を永続化しますsw-avoid-keepalive- 人為的なサービスワーカーのキープアライブパターンを避けますsw-use-alarms-api- setTimeout/setInterval ではなく chrome.alarms を使いますsw-return-true-async- 非同期レスポンスを返す場合、メッセージリスナーから true を返しますsw-register-listeners-toplevel- イベントリスナーをトップレベルで登録しますsw-use-offscreen-for-dom- DOM API にはオフスクリーンドキュメントを使います
2. コンテンツスクリプトの最適化(重大)
content-use-specific-matches- 具体的な URL マッチパターンを使いますcontent-use-document-idle- コンテンツスクリプトの挿入には document_idle を使いますcontent-programmatic-injection- マニフェストでの宣言より、プログラムによる挿入を優先しますcontent-minimize-script-size- コンテンツスクリプトのバンドルサイズを最小限に抑えますcontent-batch-dom-operations- リフローを最小限にするため、DOM 操作をまとめて実行しますcontent-use-mutation-observer- ポーリングではなく MutationObserver を使います
3. メッセージパッシングの効率化(高)
msg-use-ports-for-frequent- 頻繁にメッセージをやり取りする場合はポート接続を使いますmsg-minimize-payload-size- メッセージのペイロードサイズを最小限に抑えますmsg-debounce-frequent-events- 高頻度イベントは、メッセージ送信前にデバウンスしますmsg-check-lasterror- 必ず chrome.runtime.lastError を確認しますmsg-avoid-broadcast-to-all-tabs- すべてのタブへのメッセージのブロードキャストを避けます
4. ストレージ操作(高)
storage-batch-operations- ストレージ操作は個別に呼び出すのではなく、まとめて実行しますstorage-choose-correct-type- ユースケースに合ったストレージの種類を選びますstorage-cache-frequently-accessed- 頻繁にアクセスするストレージ値をキャッシュしますstorage-use-session-for-temp- 一時的なランタイムデータには storage.session を使いますstorage-avoid-storing-large-blobs- 大きなバイナリデータの保存を避けます
5. ネットワークと権限(中〜高)
net-use-declarativenetrequest- webRequest の代わりに declarativeNetRequest を使用しますnet-request-minimal-permissions- 必要最小限の権限を要求しますnet-use-activetab- 広範なホスト権限の代わりに activeTab 権限を使用しますnet-limit-csp-modifications- Content Security Policy ヘッダーの変更を避けます
6. メモリ管理(中)
mem-cleanup-event-listeners- コンテンツスクリプトのアンロード時にイベントリスナーをクリーンアップしますmem-avoid-detached-dom- デタッチされた DOM ノードへの参照を保持しないようにしますmem-avoid-closure-leaks- クロージャによる意図しないメモリリークを避けますmem-clear-intervals-timeouts- クリーンアップ時にインターバルとタイムアウトをクリアしますmem-use-weak-collections- DOM 要素への参照には WeakMap と WeakSet を使用します
7. UI パフォーマンス(中)
ui-minimize-popup-bundle- 起動を高速化するため、ポップアップのバンドルサイズを最小限にしますui-render-with-cached-data- まずキャッシュされたデータでポップアップ UI を描画しますui-batch-badge-updates- バッジのちらつきを防ぐため、更新をまとめて処理しますui-use-options-page-lazy- オプションページのセクションを遅延読み込みします
8. API の使用パターン(低〜中)
api-use-promises-over-callbacks- コールバックよりも Promise ベースの API 呼び出しを使用しますapi-query-tabs-efficiently- 特定のフィルターを指定してタブを照会しますapi-avoid-redundant-api-calls- ループ内での冗長な API 呼び出しを避けますapi-use-alarms-minperiod- alarms API の最小間隔を守りますapi-handle-context-invalidated- 拡張機能のコンテキストが無効化されたエラーに対処しますapi-use-declarative-content- ページアクションには declarative content API を使用します
使用方法
詳しい説明とコード例については、個別のリファレンスファイルをお読みください。
完全版ドキュメント
すべてのルールを1つのドキュメントにまとめた完全なガイドについては、AGENTS.md をご覧ください。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| AGENTS.md | すべてのルールをまとめた完全なガイド |
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応