@aramassa/ai-rules 0.1.2 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifact/chatmodes/Bug Reproduce.md +296 -0
- package/artifact/chatmodes/Planning.md +1 -0
- package/artifact/instructions/rules/development/chrome-extension-general.md +121 -0
- package/artifact/instructions/rules/development/chrome-extension-html.md +157 -0
- package/artifact/instructions/rules/development/chrome-extension-javascript.md +190 -0
- package/artifact/instructions/rules/development/chrome-extension-manifest.md +110 -0
- package/artifact/instructions/rules/development/electron.md +258 -0
- package/artifact/prompts/todo_plans.prompt.md +47 -0
- package/dist/cli.d.ts +4 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +56 -12
- package/package.json +5 -3
- package/presets/README.md +26 -0
- package/presets/chatmodes.yaml +8 -0
- package/presets/chrome-extension.yaml +50 -0
- package/presets/electron.yaml +11 -0
- package/presets/prompts/todo-planning.yaml +8 -0
- package/artifact/instructions/skel/common/change_plans/.gitkeep +0 -0
- package/artifact/instructions/skel/common/docs/.gitkeep +0 -0
- package/artifact/instructions/skel/common/docs_ai/.gitkeep +0 -0
- package/artifact/instructions/skel/common/skel/.gitkeep +0 -0
- package/artifact/instructions/skel/common/todo_plans/.gitkeep +0 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Advanced chatmode for GitHub Issue bug reproduction and investigation.\nProvides automated bug reproduction process starting from GitHub Issue URL input.\nAnalyzes issue content, generates investigation plans, executes automated code analysis, and posts results back to the Issue.\n"
|
|
3
|
+
type: chatmode
|
|
4
|
+
chatmode: bug-reproduce
|
|
5
|
+
tools:
|
|
6
|
+
- changes
|
|
7
|
+
- edit
|
|
8
|
+
- runNotebooks
|
|
9
|
+
- search
|
|
10
|
+
- new
|
|
11
|
+
- runCommands
|
|
12
|
+
- runTasks
|
|
13
|
+
- usages
|
|
14
|
+
- vscodeAPI
|
|
15
|
+
- problems
|
|
16
|
+
- testFailure
|
|
17
|
+
- openSimpleBrowser
|
|
18
|
+
- fetch
|
|
19
|
+
- githubRepo
|
|
20
|
+
- extensions
|
|
21
|
+
- todos
|
|
22
|
+
- add_issue_comment
|
|
23
|
+
- create_issue
|
|
24
|
+
- get_commit
|
|
25
|
+
- get_file_contents
|
|
26
|
+
- get_issue
|
|
27
|
+
- get_issue_comments
|
|
28
|
+
- get_pull_request
|
|
29
|
+
- get_pull_request_diff
|
|
30
|
+
- get_pull_request_files
|
|
31
|
+
- list_commits
|
|
32
|
+
- list_pull_requests
|
|
33
|
+
- search_code
|
|
34
|
+
- search_issues
|
|
35
|
+
- search_repositories
|
|
36
|
+
- update_issue
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
# Bug Reproduce Investigation Assistant
|
|
40
|
+
|
|
41
|
+
GitHub Issue のバグ再現・調査から修正提案まで一貫したプロセスを提供します。
|
|
42
|
+
|
|
43
|
+
## 機能概要
|
|
44
|
+
|
|
45
|
+
このチャットモードは、GitHub Issue URL を受け取り、バグの根本原因を特定し、修正提案を作成するための包括的な調査プロセスを自動化します。
|
|
46
|
+
|
|
47
|
+
### 主要機能
|
|
48
|
+
|
|
49
|
+
1. **GitHub Issue URL の自動解析**
|
|
50
|
+
2. **Issue 内容の構造化分析**
|
|
51
|
+
3. **コードベース調査計画の生成**
|
|
52
|
+
4. **AI による自動調査の実行**
|
|
53
|
+
5. **調査結果の Issue への自動投稿**
|
|
54
|
+
6. **修正提案の Issue 本文追記**
|
|
55
|
+
|
|
56
|
+
## 使用方法
|
|
57
|
+
|
|
58
|
+
### ステップ 1: Issue URL の入力
|
|
59
|
+
|
|
60
|
+
GitHub Issue の URL を入力してください:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
https://github.com/owner/repo/issues/123
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
または、Issue 番号のみでも可能です(現在のリポジトリの場合):
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
#123
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### ステップ 2: 自動分析開始
|
|
73
|
+
|
|
74
|
+
Issue URL を受け取ったら、以下の処理を自動実行します:
|
|
75
|
+
|
|
76
|
+
#### 📋 Issue 情報の取得・解析
|
|
77
|
+
|
|
78
|
+
- Issue のタイトル、説明、コメントを取得
|
|
79
|
+
- バグ再現テンプレートからの構造化情報抽出
|
|
80
|
+
- 再現手順、期待される動作、実際の動作の特定
|
|
81
|
+
- 環境情報(OS、ブラウザ、バージョン等)の整理
|
|
82
|
+
|
|
83
|
+
#### 🔍 調査計画の自動生成
|
|
84
|
+
|
|
85
|
+
**AI 実行可能タスク:**
|
|
86
|
+
- 関連するコードファイルの特定
|
|
87
|
+
- エラーメッセージの検索
|
|
88
|
+
- 類似 Issue・PR の検索
|
|
89
|
+
- 最近のコミット履歴の確認
|
|
90
|
+
- 関連する依存関係の調査
|
|
91
|
+
|
|
92
|
+
**人間実行タスク:**
|
|
93
|
+
- ローカル環境での再現確認
|
|
94
|
+
- 特定ブラウザ・OS での動作確認
|
|
95
|
+
- ネットワーク環境固有の問題確認
|
|
96
|
+
- 外部 API との連携テスト
|
|
97
|
+
|
|
98
|
+
#### 📊 自動調査の実行
|
|
99
|
+
|
|
100
|
+
1. **コードベース検索**
|
|
101
|
+
- エラーメッセージのパターンマッチング
|
|
102
|
+
- 関連する関数・メソッドの特定
|
|
103
|
+
- エラーハンドリング箇所の分析
|
|
104
|
+
|
|
105
|
+
2. **履歴調査**
|
|
106
|
+
- 最近の変更コミットの確認
|
|
107
|
+
- 関連する PR の調査
|
|
108
|
+
- 既知の問題との関連性チェック
|
|
109
|
+
|
|
110
|
+
3. **パターン分析**
|
|
111
|
+
- 類似バグの調査
|
|
112
|
+
- 過去の修正方法の参照
|
|
113
|
+
- 回帰の可能性チェック
|
|
114
|
+
|
|
115
|
+
### ステップ 3: 結果の報告
|
|
116
|
+
|
|
117
|
+
#### 🎯 調査結果の構造化
|
|
118
|
+
|
|
119
|
+
**発見事項:**
|
|
120
|
+
- 根本原因の特定
|
|
121
|
+
- 影響範囲の分析
|
|
122
|
+
- 関連するコード箇所の特定
|
|
123
|
+
|
|
124
|
+
**修正提案:**
|
|
125
|
+
- 具体的な修正方法
|
|
126
|
+
- 影響度評価
|
|
127
|
+
- テスト方法の提案
|
|
128
|
+
|
|
129
|
+
**追加推奨事項:**
|
|
130
|
+
- 再発防止策
|
|
131
|
+
- 関連する改善提案
|
|
132
|
+
- ドキュメント更新の必要性
|
|
133
|
+
|
|
134
|
+
#### 📝 Issue への自動投稿
|
|
135
|
+
|
|
136
|
+
※ 元のIssue内容に以下の内容を追記します。
|
|
137
|
+
|
|
138
|
+
**調査結果コメント:**
|
|
139
|
+
```markdown
|
|
140
|
+
|
|
141
|
+
----
|
|
142
|
+
|
|
143
|
+
## 🔍 自動調査結果
|
|
144
|
+
|
|
145
|
+
### 発見事項
|
|
146
|
+
- **根本原因**: [具体的な原因]
|
|
147
|
+
- **影響範囲**: [影響を受けるファイル・機能]
|
|
148
|
+
- **関連コード**: [src/example.ts:45-67]
|
|
149
|
+
|
|
150
|
+
### 修正提案
|
|
151
|
+
1. **即座対応**: [緊急修正案]
|
|
152
|
+
2. **根本解決**: [恒久的な解決策]
|
|
153
|
+
|
|
154
|
+
### 人間による確認が必要な項目
|
|
155
|
+
- [ ] ローカル環境での再現確認
|
|
156
|
+
- [ ] 修正案の動作テスト
|
|
157
|
+
- [ ] エッジケースの検証
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
*この調査結果は AI によって自動生成されました*
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Issue 本文への修正提案追記:**
|
|
164
|
+
```markdown
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 🤖 AI 調査・修正提案
|
|
168
|
+
|
|
169
|
+
### 修正計画
|
|
170
|
+
- **対象ファイル**: [修正対象のファイル一覧]
|
|
171
|
+
- **修正方針**: [具体的な修正アプローチ]
|
|
172
|
+
- **テスト戦略**: [検証方法]
|
|
173
|
+
|
|
174
|
+
### 実装スケジュール
|
|
175
|
+
1. **Phase 1**: 緊急修正(影響最小化)
|
|
176
|
+
2. **Phase 2**: 根本的解決
|
|
177
|
+
3. **Phase 3**: 再発防止策の実装
|
|
178
|
+
|
|
179
|
+
*AI による自動分析結果 - [生成日時]*
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## エラーハンドリング
|
|
183
|
+
|
|
184
|
+
### 無効な Issue URL
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
❌ エラー: 無効な GitHub Issue URL です
|
|
188
|
+
有効な形式: https://github.com/owner/repo/issues/123
|
|
189
|
+
または: #123 (現在のリポジトリの場合)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Issue へのアクセス権限なし
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
❌ エラー: 指定された Issue にアクセスできません
|
|
196
|
+
- Issue が存在しない可能性があります
|
|
197
|
+
- プライベートリポジトリへのアクセス権限がない可能性があります
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### API レート制限
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
⚠️ 警告: GitHub API のレート制限に達しました
|
|
204
|
+
しばらく待ってから再度お試しください
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 調査カバレッジ
|
|
208
|
+
|
|
209
|
+
### 自動調査可能な範囲
|
|
210
|
+
|
|
211
|
+
✅ **完全自動化**
|
|
212
|
+
- コードパターンの検索・分析
|
|
213
|
+
- エラーメッセージの出力箇所特定
|
|
214
|
+
- 関連 Issue・PR の検索
|
|
215
|
+
- コミット履歴の分析
|
|
216
|
+
- 依存関係の確認
|
|
217
|
+
|
|
218
|
+
⚠️ **半自動化(人間確認必要)**
|
|
219
|
+
- 環境固有の問題
|
|
220
|
+
- ブラウザ・OS 依存の動作
|
|
221
|
+
- ネットワーク関連の問題
|
|
222
|
+
- パフォーマンス問題
|
|
223
|
+
|
|
224
|
+
❌ **手動調査必須**
|
|
225
|
+
- 実際の再現確認
|
|
226
|
+
- ユーザビリティの評価
|
|
227
|
+
- セキュリティ面の検証
|
|
228
|
+
- 外部システムとの連携確認
|
|
229
|
+
|
|
230
|
+
## ベストプラクティス
|
|
231
|
+
|
|
232
|
+
### Issue URL 入力時
|
|
233
|
+
|
|
234
|
+
- **完全な URL を推奨**: `https://github.com/owner/repo/issues/123`
|
|
235
|
+
- **Issue 番号のみも可**: `#123` (現在のリポジトリの場合)
|
|
236
|
+
- **複数 Issue 同時調査**: カンマ区切りで複数 URL を指定可能
|
|
237
|
+
|
|
238
|
+
### 調査精度向上のために
|
|
239
|
+
|
|
240
|
+
- **詳細な再現手順**: Issue に具体的な手順が記載されているほど分析精度が向上
|
|
241
|
+
- **エラーメッセージの全文**: 部分的でなく完全なエラーメッセージが重要
|
|
242
|
+
- **環境情報の明記**: OS、ブラウザ、バージョン情報が分析に役立つ
|
|
243
|
+
|
|
244
|
+
### 修正提案の活用
|
|
245
|
+
|
|
246
|
+
- **段階的実装**: 緊急性に応じた優先度付けで実装
|
|
247
|
+
- **テスト実行**: 提案されたテスト方法での検証を推奨
|
|
248
|
+
- **フィードバック**: 調査結果の精度向上のためのコメント歓迎
|
|
249
|
+
|
|
250
|
+
## セキュリティ・プライバシー配慮
|
|
251
|
+
|
|
252
|
+
### アクセス権限
|
|
253
|
+
|
|
254
|
+
- 公開リポジトリの Issue のみ対象
|
|
255
|
+
- プライベートリポジトリは認証情報に基づくアクセス
|
|
256
|
+
- 機密情報の取り扱いに注意
|
|
257
|
+
|
|
258
|
+
### データ処理
|
|
259
|
+
|
|
260
|
+
- Issue の内容は調査目的のみで使用
|
|
261
|
+
- 調査結果は該当 Issue にのみ投稿
|
|
262
|
+
- 個人情報は匿名化して処理
|
|
263
|
+
|
|
264
|
+
## 制限事項
|
|
265
|
+
|
|
266
|
+
### 技術的制限
|
|
267
|
+
|
|
268
|
+
- **GitHub API レート制限**: 大量の Issue 調査時は時間制約あり
|
|
269
|
+
- **コードベース規模**: 非常に大きなリポジトリでは調査時間が長期化
|
|
270
|
+
- **言語サポート**: 主要プログラミング言語に最適化
|
|
271
|
+
|
|
272
|
+
### 調査範囲の制限
|
|
273
|
+
|
|
274
|
+
- **外部依存関係**: サードパーティライブラリの詳細分析は限定的
|
|
275
|
+
- **環境固有問題**: 特定の環境でのみ発生する問題は推測による分析
|
|
276
|
+
- **実時間動作**: アプリケーションの実行時動作は静的分析のみ
|
|
277
|
+
|
|
278
|
+
## 今後の機能拡張
|
|
279
|
+
|
|
280
|
+
### 予定機能
|
|
281
|
+
|
|
282
|
+
- **PR 自動作成**: 修正提案から直接 Pull Request 作成
|
|
283
|
+
- **テンプレート学習**: プロジェクト固有の調査パターン学習
|
|
284
|
+
- **メトリクス収集**: バグ修正効率の測定・改善
|
|
285
|
+
|
|
286
|
+
### 連携機能
|
|
287
|
+
|
|
288
|
+
- **CI/CD 統合**: テスト結果との連携
|
|
289
|
+
- **チーム通知**: Slack・Discord への結果通知
|
|
290
|
+
- **プロジェクト管理**: GitHub Projects との連携
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
**使用準備完了** ✅
|
|
295
|
+
|
|
296
|
+
GitHub Issue URL を入力して、バグ調査を開始してください!
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: development-rules
|
|
3
|
+
category: chrome-extension
|
|
4
|
+
focus: architecture-security
|
|
5
|
+
language: javascript
|
|
6
|
+
applyTo: "**/*"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Chrome Extension Manifest V3 - General Architecture & Security
|
|
10
|
+
|
|
11
|
+
## 概要
|
|
12
|
+
|
|
13
|
+
Chrome 拡張機能開発における Manifest V3 (MV3) の全般的なアーキテクチャ原則とセキュリティ指針を定義します。
|
|
14
|
+
MV3 は単なるバージョンアップではなく、セキュリティ、パフォーマンス、プライバシーを根本的に強化する
|
|
15
|
+
アーキテクチャの転換を意味します。
|
|
16
|
+
|
|
17
|
+
## 1. Manifest V3 アーキテクチャ原則
|
|
18
|
+
|
|
19
|
+
### 1.1 基本設計思想
|
|
20
|
+
|
|
21
|
+
- **イベント駆動型アーキテクチャ**: 永続的なバックグラウンドページから短命な Service Worker への移行
|
|
22
|
+
- **宣言的セキュリティモデル**: 動的なコード実行から事前定義されたルールベースへの移行
|
|
23
|
+
- **最小権限の原則**: 必要最小限の権限のみを要求し、明確に宣言する
|
|
24
|
+
- **関心の分離**: 各コンポーネントが明確な役割を持つ構造化されたアーキテクチャ
|
|
25
|
+
|
|
26
|
+
### 1.2 コアコンポーネント
|
|
27
|
+
|
|
28
|
+
Chrome Extension MV3 アーキテクチャは4つの主要コンポーネントで構成されます:
|
|
29
|
+
|
|
30
|
+
- **Service Worker (Background)**: イベント駆動型のバックグラウンド処理を担当し、永続的な状態を持たない短命な実行環境
|
|
31
|
+
- **Content Scripts**: ウェブページの DOM に直接アクセスし、ページコンテンツとの相互作用を処理
|
|
32
|
+
- **Action Popup**: ユーザーインターフェースレイヤーとして、拡張機能アイコンクリック時の UI を提供
|
|
33
|
+
- **Offscreen Documents**: Service Worker から DOM 操作や特殊 API アクセスが必要な場合のヘルパー環境
|
|
34
|
+
|
|
35
|
+
これらのコンポーネントは明確に分離された実行コンテキストを持ち、メッセージパッシングによって連携します。
|
|
36
|
+
|
|
37
|
+
## 2. セキュリティベストプラクティス
|
|
38
|
+
|
|
39
|
+
### 2.1 Content Security Policy (CSP)
|
|
40
|
+
|
|
41
|
+
Manifest V3 では Content Security Policy の設定が必須であり、拡張機能のセキュリティを大幅に強化します。
|
|
42
|
+
|
|
43
|
+
**extension_pages**: 拡張機能内のページ(popup、options等)に適用される CSP です。script-src 'self' でパッケージ内のスクリプトのみを許可し、object-src 'self' で安全なオブジェクト読み込みを制限し、img-src には 'self' data: https: で画像ソースを限定します。
|
|
44
|
+
|
|
45
|
+
**sandbox**: サンドボックス環境での CSP 設定です。sandbox allow-scripts で基本的なスクリプト実行を許可し、必要に応じて 'unsafe-eval' や 'unsafe-inline' を追加しますが、セキュリティリスクを十分に検討します。
|
|
46
|
+
|
|
47
|
+
manifest.json の content_security_policy セクションで両方の設定を明示的に定義し、拡張機能の実行環境を適切に制限します。
|
|
48
|
+
|
|
49
|
+
### 2.2 セキュリティ原則
|
|
50
|
+
|
|
51
|
+
Manifest V3 では厳格なセキュリティ原則の遵守が必須です。
|
|
52
|
+
|
|
53
|
+
**リモートコードの禁止**: すべての JavaScript コードは拡張機能パッケージに含める必要があり、外部からの動的コード読み込みは許可されません。CDN からのライブラリ読み込みも禁止されているため、必要なライブラリはパッケージにバンドルします。
|
|
54
|
+
|
|
55
|
+
**eval() の回避**: eval()、Function コンストラクタ、setTimeout/setInterval の文字列実行など、動的コード実行は禁止されています。静的な実装で代替手段を検討します。
|
|
56
|
+
|
|
57
|
+
**入力検証**: ユーザー入力とウェブページからのデータは信頼せず、適切に検証・サニタイゼーションを実行します。XSS 攻撃や インジェクション攻撃を防ぐため、HTML エスケープや URL 検証を徹底します。
|
|
58
|
+
|
|
59
|
+
**権限の最小化**: 必要最小限の権限のみを要求し、host_permissions は具体的なドメインに限定します。広範囲な権限(<all_urls> 等)は避け、機能に応じて段階的に権限を要求します。
|
|
60
|
+
|
|
61
|
+
InputValidator クラスでは URL の妥当性検証(プロトコル確認、URL 形式チェック)、HTML のサニタイゼーション(textContent を使用したエスケープ)、メッセージデータの検証(型チェック、必須フィールド確認)を統一的に実装します。
|
|
62
|
+
|
|
63
|
+
## 3. 開発ワークフロー
|
|
64
|
+
|
|
65
|
+
### 3.1 開発環境セットアップ
|
|
66
|
+
|
|
67
|
+
Chrome 拡張機能開発では適切なビルドツールと依存関係の設定が重要です。
|
|
68
|
+
|
|
69
|
+
**プロジェクト初期化**: npm init -y でプロジェクトを初期化し、package.json を作成します。
|
|
70
|
+
|
|
71
|
+
**必須開発依存関係**: webpack と webpack-cli でモジュールバンドリングを設定し、copy-webpack-plugin で静的ファイル(manifest.json、HTML、アイコン等)のコピーを自動化します。eslint でコード品質を管理し、jest でユニットテスト、puppeteer で E2E テストを実行します。
|
|
72
|
+
|
|
73
|
+
**webpack 設定**: entry ポイントで各コンポーネント(background、content、popup、offscreen)を個別に定義し、output で dist ディレクトリに出力します。CopyPlugin で必要な静的ファイルを適切な場所にコピーし、開発用とプロダクション用の設定を分離します。
|
|
74
|
+
|
|
75
|
+
webpack.config.js では mode で開発・本番を切り替え、各 JavaScript ファイルの依存関係を解決してバンドルします。プラグイン設定で manifest.json、HTML ファイル、アイコンディレクトリを適切にコピーします。
|
|
76
|
+
|
|
77
|
+
### 3.2 ビルドスクリプト
|
|
78
|
+
|
|
79
|
+
package.json の scripts セクションで開発・ビルド・テスト・デプロイのワークフローを定義します。
|
|
80
|
+
|
|
81
|
+
**build**: webpack でプロダクションモードのビルドを実行し、最適化されたファイルを dist ディレクトリに出力します。
|
|
82
|
+
|
|
83
|
+
**dev**: webpack の watch モードで開発時の自動リビルドを有効化し、ファイル変更時に即座に再ビルドを実行します。
|
|
84
|
+
|
|
85
|
+
**test**: jest でユニットテストを実行し、コードの品質と動作を確認します。
|
|
86
|
+
|
|
87
|
+
**lint**: eslint で src ディレクトリ下の JavaScript ファイルの静的解析を実行し、コーディング規約の遵守を確認します。
|
|
88
|
+
|
|
89
|
+
**pack**: ビルド後に dist ディレクトリで zip 圧縮を実行し、Chrome Web Store 提出用のパッケージファイル(extension.zip)を作成します。
|
|
90
|
+
|
|
91
|
+
これらのスクリプトにより、開発からデプロイまでの一連の作業を自動化し、効率的な開発ワークフローを確立します。
|
|
92
|
+
|
|
93
|
+
## 4. デバッグとトラブルシューティング
|
|
94
|
+
|
|
95
|
+
### 4.1 一般的な問題と解決策
|
|
96
|
+
|
|
97
|
+
**Service Worker の非アクティブ化**
|
|
98
|
+
- 問題: Service Worker が予期せず終了する
|
|
99
|
+
- 解決: イベントハンドラーの適切な設定、非同期処理の Promise 管理
|
|
100
|
+
|
|
101
|
+
**メッセージパッシングエラー**
|
|
102
|
+
- 問題: `Error: Could not establish connection. Receiving end does not exist.`
|
|
103
|
+
- 解決: 送信先の存在確認、エラーハンドリングの実装
|
|
104
|
+
|
|
105
|
+
**権限エラー**
|
|
106
|
+
- 問題: 必要な権限が不足している
|
|
107
|
+
- 解決: manifest.json の権限設定見直し、動的権限要求の実装
|
|
108
|
+
|
|
109
|
+
## まとめ
|
|
110
|
+
|
|
111
|
+
Manifest V3 への移行は、Chrome 拡張機能開発における重要な転換点です。このガイドで示したパターンとベストプラクティスに従うことで、セキュアで高性能、かつ将来性のある拡張機能を開発できます。
|
|
112
|
+
|
|
113
|
+
### 重要なポイント
|
|
114
|
+
|
|
115
|
+
1. **イベント駆動型設計**: Service Worker の短命な性質を受け入れ、適切なイベントハンドリングを実装する
|
|
116
|
+
2. **宣言的セキュリティ**: declarativeNetRequest API を活用し、セキュアなネットワーク制御を実現する
|
|
117
|
+
3. **適切な分離**: 各コンポーネントの役割を明確にし、メッセージパッシングで連携させる
|
|
118
|
+
4. **最小権限**: 必要最小限の権限のみを要求し、透明性を確保する
|
|
119
|
+
5. **テスト駆動**: 包括的なテスト戦略で品質を保証する
|
|
120
|
+
|
|
121
|
+
これらの原則に従って開発することで、ユーザーに安全で快適な拡張機能体験を提供できます。
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: development-rules
|
|
3
|
+
category: chrome-extension
|
|
4
|
+
focus: html-structure
|
|
5
|
+
language: html
|
|
6
|
+
applyTo: "**/*.html"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Chrome Extension Manifest V3 - HTML Structure Guidelines
|
|
10
|
+
|
|
11
|
+
## Popup HTML 構造
|
|
12
|
+
|
|
13
|
+
### 基本構造
|
|
14
|
+
|
|
15
|
+
Chrome 拡張機能の popup.html は軽量で高速な UI 体験を提供する必要があります。
|
|
16
|
+
|
|
17
|
+
**HTML5 基本構造**:
|
|
18
|
+
```html
|
|
19
|
+
<!DOCTYPE html>
|
|
20
|
+
<html lang="ja">
|
|
21
|
+
<head>
|
|
22
|
+
<meta charset="UTF-8">
|
|
23
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
24
|
+
<title>拡張機能名</title>
|
|
25
|
+
<link rel="stylesheet" href="popup.css">
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<div class="container">
|
|
29
|
+
<!-- UI コンテンツ -->
|
|
30
|
+
</div>
|
|
31
|
+
<script src="popup.js"></script>
|
|
32
|
+
</body>
|
|
33
|
+
</html>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**寸法制限**: ポップアップは最大 800px × 600px のサイズ制限があり、適切なレスポンシブデザインが必要です。
|
|
37
|
+
|
|
38
|
+
**読み込み最適化**: CSS と JavaScript は外部ファイルとして分離し、インライン記述は避けます。CSP の制約により、インラインスクリプトとスタイルは許可されません。
|
|
39
|
+
|
|
40
|
+
### UI/UX 設計原則
|
|
41
|
+
|
|
42
|
+
**シンプルな構造**: 複雑なレイアウトは避け、ユーザーが直感的に操作できるシンプルな構造にします。
|
|
43
|
+
|
|
44
|
+
**高速レンダリング**: 重いアニメーションや大量の DOM 要素は避け、ポップアップの表示速度を優先します。
|
|
45
|
+
|
|
46
|
+
**アクセシビリティ**: 適切な semantic HTML、ARIA 属性、キーボードナビゲーションをサポートします。
|
|
47
|
+
|
|
48
|
+
## Options Page 構造
|
|
49
|
+
|
|
50
|
+
### 設定ページの実装
|
|
51
|
+
|
|
52
|
+
Options Page は拡張機能の詳細設定を提供する専用ページです。
|
|
53
|
+
|
|
54
|
+
**manifest.json 設定**:
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"options_page": "options.html",
|
|
58
|
+
"options_ui": {
|
|
59
|
+
"page": "options.html",
|
|
60
|
+
"open_in_tab": true
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**HTML 構造**:
|
|
66
|
+
```html
|
|
67
|
+
<!DOCTYPE html>
|
|
68
|
+
<html lang="ja">
|
|
69
|
+
<head>
|
|
70
|
+
<meta charset="UTF-8">
|
|
71
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
72
|
+
<title>拡張機能設定</title>
|
|
73
|
+
<link rel="stylesheet" href="options.css">
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<div class="settings-container">
|
|
77
|
+
<h1>設定</h1>
|
|
78
|
+
<form id="settingsForm">
|
|
79
|
+
<!-- 設定項目 -->
|
|
80
|
+
</form>
|
|
81
|
+
</div>
|
|
82
|
+
<script src="options.js"></script>
|
|
83
|
+
</body>
|
|
84
|
+
</html>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**設定の永続化**: フォームデータは chrome.storage.sync を使用してデバイス間で同期し、設定の一貫性を保ちます。
|
|
88
|
+
|
|
89
|
+
## Offscreen Document 構造
|
|
90
|
+
|
|
91
|
+
### HTML 実装
|
|
92
|
+
|
|
93
|
+
Offscreen ドキュメントは通常の HTML ファイルとして実装され、DOM API や特殊ブラウザ API にアクセスします。
|
|
94
|
+
|
|
95
|
+
**HTML 構造**: 基本的な HTML5 ドキュメント構造で、必要な JavaScript ファイルを読み込みます。UI は不要なため、視覚的要素は最小限に抑えます。
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<!DOCTYPE html>
|
|
99
|
+
<html lang="ja">
|
|
100
|
+
<head>
|
|
101
|
+
<meta charset="UTF-8">
|
|
102
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
103
|
+
<title>Offscreen Document</title>
|
|
104
|
+
</head>
|
|
105
|
+
<body>
|
|
106
|
+
<!-- 視覚的要素は最小限 -->
|
|
107
|
+
<div id="workspace" style="display: none;"></div>
|
|
108
|
+
<script src="offscreen.js"></script>
|
|
109
|
+
</body>
|
|
110
|
+
</html>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**メッセージ受信**: chrome.runtime.onMessage.addListener でメッセージを受信し、target フィールドが 'offscreen' の場合のみ処理します。非同期処理では return true を設定して適切なレスポンス管理を行います。
|
|
114
|
+
|
|
115
|
+
**DOM 操作**: DOMParser を使用した HTML パース、Document インターフェースでの要素抽出、各種 DOM API の活用が可能です。Service Worker では実行できない DOM 操作をここで実行します。
|
|
116
|
+
|
|
117
|
+
**特殊 API**: navigator.clipboard でクリップボード操作、Audio API で音声再生、その他ブラウザ固有 API の実行が可能です。
|
|
118
|
+
|
|
119
|
+
**エラーハンドリング**: すべての操作は try-catch でラップし、エラー発生時は適切なエラーレスポンスを Service Worker に返します。
|
|
120
|
+
|
|
121
|
+
OffscreenDocument クラスでは各種操作(HTML パース、クリップボード、音声再生等)を統一的なインターフェースで提供し、Service Worker からの要求に応じて適切な処理を実行します。
|
|
122
|
+
|
|
123
|
+
## HTML セキュリティベストプラクティス
|
|
124
|
+
|
|
125
|
+
### Content Security Policy (CSP) 遵守
|
|
126
|
+
|
|
127
|
+
**インラインスクリプト禁止**: `<script>` タグ内でのインラインコードは CSP により禁止されているため、すべての JavaScript は外部ファイルに記述します。
|
|
128
|
+
|
|
129
|
+
**インラインスタイル禁止**: `style` 属性でのインラインスタイルも禁止されているため、すべての CSS は外部ファイルに記述します。
|
|
130
|
+
|
|
131
|
+
**外部リソース制限**: 外部サイトからの画像、スクリプト、スタイルシートの読み込みは制限されているため、必要なリソースは拡張機能パッケージに含めます。
|
|
132
|
+
|
|
133
|
+
### XSS 対策
|
|
134
|
+
|
|
135
|
+
**動的コンテンツの安全な挿入**: ユーザー入力や外部データを HTML に挿入する際は、textContent や innerText を使用してエスケープし、innerHTML の使用は避けます。
|
|
136
|
+
|
|
137
|
+
**URL 検証**: 外部リンクや画像 URL は適切に検証し、信頼できるドメインのみを許可します。
|
|
138
|
+
|
|
139
|
+
**データ検証**: フォーム入力やメッセージデータは適切に検証・サニタイゼーションを実行します。
|
|
140
|
+
|
|
141
|
+
## パフォーマンス最適化
|
|
142
|
+
|
|
143
|
+
### 軽量化
|
|
144
|
+
|
|
145
|
+
**最小限の DOM**: 不要な HTML 要素は削除し、シンプルな構造を保ちます。
|
|
146
|
+
|
|
147
|
+
**CSS 最適化**: 使用していない CSS ルールを削除し、ファイルサイズを最小化します。
|
|
148
|
+
|
|
149
|
+
**JavaScript 分離**: 機能ごとに JavaScript ファイルを分離し、必要な部分のみを読み込みます。
|
|
150
|
+
|
|
151
|
+
### 読み込み最適化
|
|
152
|
+
|
|
153
|
+
**リソース並列読み込み**: CSS と JavaScript の読み込みを並列化し、ページ表示速度を向上させます。
|
|
154
|
+
|
|
155
|
+
**画像最適化**: アイコンや画像は適切なサイズと形式で最適化し、読み込み時間を短縮します。
|
|
156
|
+
|
|
157
|
+
**キャッシュ活用**: 静的リソースは適切にキャッシュされるよう設定し、再読み込み時間を短縮します。
|