このファイルは、このリポジトリのコードを扱う際にAI Agentに対するガイダンスを提供します。
- チャットの言語: チャットの回答、ソースコード以外のドキュメント内の記述は日本語で行うこと
- コードのスタイル: TypeScriptのコーディング規約に従うこと。特に、変数名、関数名はキャメルケースを使用し、クラス名はパスカルケースを使用する。
- コード内の言語: コード内のコメントは英語で記述すること。
- コードの品質: コードは読みやすく、保守しやすいように書くこと。コメントは必要な箇所へ記載し、複雑なロジックには説明を加える。
- テキストのエンコーディング: UTF-8を使用すること。
このリポジトリはSelection Commandプロジェクトのモノレポで、以下の3つのパッケージで構成されています:
-
packages/extension (
@selection-command/extension)- Chrome拡張機能のメインコード
- Manifest V3対応
- React + TypeScript + Vite
-
packages/hub (
@selection-command/hub)ai-services.jsonの静的ホスティング + Extension の e2e テストページ配信のみを担う縮小版 Next.js アプリ- コマンド共有プラットフォームとしてのフル機能は新リポジトリ(selection-command-hub、selection-command.com)に移行済み
- 詳細は
packages/hub/AGENTS.mdを参照
-
packages/shared (
@selection-command/shared)- 共通ユーティリティと型定義
- extension と hub で共有される基本型
# 拡張機能の開発
yarn dev # extensionの開発モード開始
yarn dev:hub # hub(テストページ/ai-services.json配信用)の開発モード開始
# ビルド
yarn build # 全パッケージのビルド
yarn build:extension # extensionのみビルド
yarn build:hub # hubのみビルド
# 品質チェック
yarn lint # 全パッケージのlint実行
yarn test # 全パッケージのテスト実行
# その他
yarn clean # 全パッケージのクリーンアップ各パッケージディレクトリ内では、以下のコマンドが使用できます:
Extension (packages/extension):
yarn dev # 開発モード
yarn build # ビルド
yarn build:e2e # e2e用にビルド
yarn test # テスト実行
yarn test:ui # テストUIモード
yarn test:coverage # カバレッジ測定
yarn test:e2e # playwright test
yarn lint # ESLint実行
yarn zip # 配布用zip作成Hub (packages/hub):
yarn dev # Next.js開発サーバー(Turbo)
yarn build # プロダクションビルドShared (packages/shared):
yarn build # TypeScriptコンパイル
yarn dev # watch モードSelection Commandは、Webページ上で選択したテキストに対してさまざまなアクションを実行できるChrome拡張機能です。
┌────────────────────────┐ ┌─────────────────────┐
│ Chrome Extension │ │ Hub(静的アセット)│
│ (packages/ext) │◄──►│ (packages/hub) │
│ │ │ │
│ • コンテンツスクリプト │ │ • ai-services.json │
│ • バックグラウンド │ │ 配信 │
│ • オプションページ │ │ • e2eテストページ │
│ • ページアクション │ │ │
└────────────────────────┘ └─────────────────────┘
│
│
┌─────────────────────┐
│ Shared Package │
│ (packages/shared) │
│ │
│ • 共通型定義 │
│ • ユーティリティ │
│ • 型ガード │
└─────────────────────┘
※ コマンド共有・検索・発見のプラットフォーム(旧 Command Hub のフル機能)は
新リポジトリ(selection-command-hub)に移行済み。上記の packages/hub は
その旧実装の残骸ではなく、Extension が依存する静的アセット配信専用に縮小した別物。
- 型システム共有: SharedパッケージでBaseCommandなどの基本型を定義し、ExtensionとHubで拡張
- AIサービス定義:
packages/hub/public/data/ai-services.jsonを Extension がビルド時/実行時の両方で参照 - e2eテスト:
packages/hubがデプロイする/en/testページを Extension の Playwright テストが利用
コア機能:
- ページアクション: ブラウザ自動化シーケンスの記録と再生
- コンテキストメニュー: 選択テキストに対する右クリックアクション
- IPC通信: content script ↔ background script ↔ options page
- 設定管理: Chrome Storage API使用、インポート/エクスポート対応
主要コンポーネント:
src/background_script.ts- サービスワーカー(Manifest V3)src/content_script.tsx- Webページ注入スクリプトsrc/options_page.tsx- 設定UIsrc/services/ipc.ts- プロセス間通信の中核src/services/pageAction/- 自動化シーケンス処理src/lib/robula-plus/- 堅牢なXPathセレクター生成
packages/hub は「ai-services.json の静的ホスティング」と「Extension の
e2eテストページ配信」のみを担う縮小版アプリ。詳細は packages/hub/AGENTS.md
を参照。
Shared Packageでの基本定義:
interface BaseCommand {
id: string
title: string
openMode: OPEN_MODE
// ... 基本プロパティ
}
interface PageActionCommand extends BaseCommand {
pageActionOption: unknown // パッケージごとに具体化
}Extension Packageでの拡張:
interface PageActionOption {
startUrl: string
openMode: PAGE_ACTION_OPEN_MODE
steps: Array<PageActionStep>
}型の取り扱い:
- SharedパッケージのPageActionCommand.pageActionOptionは
unknown型 - Extension内では
(command.pageActionOption as any)等の型アサーションが必要 - 新しい共通型はSharedパッケージで定義し、yarn buildで各パッケージに反映
Chrome拡張機能開発:
- Manifest V3の制約に注意(CSP、service worker等)
- Shadow DOMでスタイル分離
- Chrome Storage APIの制限(QUOTA_BYTES等)
Hub開発:
- Hub は縮小版のため新機能は追加しない。コマンド共有プラットフォームとしての機能拡張は新リポジトリ(selection-command-hub)側で行う
ai-services.jsonとテストページの変更時は Extension 側への影響を確認すること
テスト:
- Extensionでは Chrome API のモック使用
- テストファイルは
src/**/*.{test,spec}.{ts,tsx}パターン - カバレッジ測定は
yarn test:coverage
ビルド・配布:
- Extension:
yarn zipで配布用zipファイル作成 - Hub: GitHub Pages(
.github/workflows/pages.yml)で静的サイト配布 - Shared: TypeScript declarations自動生成