ShareX Feature Specifications について
XerahS の開発者向け仕様で、アップローダープラグイン、注釈ツール、計画中のキャプチャからアップロードまでの自動化を扱います。機能実装時の指針をまとめています。
主な機能
- 01アップローダープロバイダーとインスタンス管理
- 02プラグインの動的検出と読み込み
- 03注釈モデルと描画要件
- 04計画中のアップロード振り分けと自動化
活用シーン
- 01アップローダープロバイダーの追加や設定
- 02Avalonia での注釈ツール実装
- 03キャプチャからアップロードまでのワークフロー設計
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sharex/ xerahs --skill sharex-feature-specificationsインストール後、Claude Code で/sharex-feature-specificationsを入力して読み込まれたか確認します。
詳細
アップローダープラグインシステムの仕様
アーキテクチャの概要
複数インスタンス対応のプロバイダーカタログ:
IUploaderPluginをIUploaderProviderに変更し、複数カテゴリに対応- プロバイダー(種類)とインスタンス(設定済みの出現)を分離
ProviderCatalog:プロバイダーの種類を登録する静的レジストリInstanceManager:インスタンスのライフサイクル、永続化、デフォルト選択を管理するシングルトン- モデル:JSON シリアル化に対応した
UploaderInstance、InstanceConfiguration - UI:
ProviderCatalogViewModel、CategoryViewModel、UploaderInstanceViewModel - 完全な CRUD 操作:カタログから追加、複製、名前変更、削除、デフォルトに設定
- 複数カテゴリへの対応:同じプロバイダー(例:S3)で画像+テキスト+ファイルを扱えます
プロバイダーの一覧:
ImgurProvider:画像+テキストのカテゴリに対応AmazonS3Provider:画像+テキスト+ファイルのカテゴリに対応
永続化先: %AppData%/XerahS/uploader-instances.json
動的プラグインシステム
アーキテクチャ:
- 完全な動的読み込み:ホストアプリにはコンパイル時のプラグイン参照がありません。
- 分離:各プラグインに
PluginLoadContext(AssemblyLoadContext)を使用します。 - 共有依存関係:フレームワークアセンブリ(Avalonia、Newtonsoft.Json)はホストコンテキストから共有されます。
- 静的なライフサイクル管理:静的な
PluginLoaderにより、コンテキストの早期 GC を防ぎます。 - 動的 UI:プラグインは
IUploaderProvider.GetConfigViewを通じて設定ビューを公開します。
コンポーネント:
PluginDiscovery:Plugins/フォルダーでplugin.jsonマニフェストを検索します。PluginLoader:アセンブリを読み込み、プロバイダーをインスタンス化します。ProviderCatalog:組み込みプロバイダーと動的プロバイダーの両方を登録する中央レジストリです。
プラグインの例:
ShareX.Imgur.Plugin:OAuth2 による画像のアップロード。ShareX.AmazonS3.Plugin:S3 バケットへのアップロード(画像/テキスト/ファイル)。
ファイルタイプのルーティング(予定)
目標:
- ファイル拡張子に基づく決定的なルーティング
- 競合の防止(カテゴリごとにファイルタイプの重複なし)
- 「すべてのファイルタイプ」を排他的なオプションとして設定
- 利用可能/ブロックされているファイルタイプを UI に表示
データモデルへの追加:
FileTypeScopeクラス(AllFileTypes フラグ+FileExtensions リスト)UploaderInstance.FileTypeRoutingプロパティIUploaderProvider.GetSupportedFileTypes()メソッド
ルーティングロジック:
1. Exact extension match (e.g., .png → Imgur)
2. "All File Types" fallback
3. No match → error/notification
UI の機能:
- 競合検出機能付きのファイルタイプセレクター
- すでに割り当てられているタイプのチェックボックスを無効化
- あるタイプをブロックしているインスタンスを表示するツールチップ
- リアルタイム検証
実装フェーズ:
- データモデルの拡張
- ルーティングエンジン+検証
- プロバイダーのメタデータ
- UI(ファイルタイプセレクター、競合の警告)
- アップロードワークフローへの統合
フルオートメーションワークフロー(Path B - 計画中)
目標:ShareX の機能と同等のエンドツーエンドのオートメーションを実現します
必要なコンポーネント:
-
タスクシステム(約600 LOC)
WorkflowTask.cs- ライフサイクル管理を備えた非同期オートメーションエンジンTaskInfo.cs- タスクのメタデータと状態TaskManager.cs- 同時実行制御を備えたキューのオーケストレーションTaskStatus.cs- ステータス列挙型とジョブの種類
-
ワークフロー設定(約200 LOC)
AfterCaptureTasksフラグ:AddImageEffects、AnnotateImage、SaveImageToFile、UploadImageToHost などAfterUploadTasksフラグ:CopyURLToClipboard、OpenURL、ShortenURL、ShowQRCode、ShowNotificationUploadInfoParser- テンプレートベースのクリップボード形式(%url%、%filename%、%time%など)
-
アップロード統合(約150 LOC)
- URL/ThumbnailURL/DeletionURL/ShortenedURL を含む
UploadResultモデル - エラー処理用の
UploaderErrorManager - 進行状況追跡イベント
- セカンダリアップローダーを使用した再試行ロジック
- URL/ThumbnailURL/DeletionURL/ShortenedURL を含む
-
アップロード後のオートメーション(約100 LOC)
- URL 短縮の統合
- カスタム形式でのクリップボードへのコピー
- ブラウザーの起動
- QR コードの生成
- 通知システム
-
UI 統合(約150 LOC)
- アップロード中の進行状況インジケーター
- トースト通知
- アップロード履歴パネル
- タスクリストビュー
実装フェーズ:
- コアタスクシステム(WorkflowTask、TaskManager)
- アップロードワークフローの統合
- アップロード後のオートメーション(クリップボード、通知)
- ホットキーからフルオートメーションへの接続
- 進行状況 UI と履歴
総作業量:約1,200 LOC、8~12時間
阻害要因:
- 注釈エディターはモーダルです。 「クイックキャプチャ+アップロード」と「エディターモード」で別のワークフロー経路が必要です
- 全体を通して async/await パターンが必要です(ShareX はスレッドを使用します)
- アップロードプロバイダーに
UploadAsyncメソッドのシグネチャが必要です
提供済みの Path A(最小構成):
- 基本的な WorkflowTask 構造
- アップロードプロバイダーの接続
- アップロード後に URL をクリップボードへコピーするシンプルな機能
- ホットキー → キャプチャ → アップロード → URL のワークフロー
Path B の追加機能:
- 同時実行数の上限を備えたフルタスクキュー
- 包括的な AfterCapture/AfterUpload パイプライン
- パーセンテージ/速度/ETA による進行状況の追跡
- カスタマイズ可能な形式に対応した通知システム
- フォールバックアップローダーを使用したアップロード再試行ロジック
- タスク履歴の永続化
- タスクの監視と管理用の UI
注釈サブシステム仕様
フェーズ1:コア注釈モデル(完了)
プロジェクト: XerahS.Annotations
作成ファイル: 10ファイル(約800 LOC)
実装済みの注釈タイプ:
EditorTool列挙型:Select、Rectangle、Ellipse、Arrow、Line、Text、Number、Spotlight、Crop、Pen- 描画、ヒットテスト、境界計算に対応した抽象基底クラス
Annotation - 具体的な型:RectangleAnnotation、EllipseAnnotation、LineAnnotation、ArrowAnnotation、TextAnnotation、NumberAnnotation(自動インクリメント)、SpotlightAnnotation(フォーカス効果)、CropAnnotation(サイズ変更ハンドル)
技術的な機能:
- Avalonia
DrawingContextによる描画 - 設定可能なヒットテスト(許容範囲に基づく)
- 色/線幅のサポート
- レイヤー用の Z-index
- 手動での距離計算(Avalonia API との互換性)
- 太字/斜体に対応したテキスト描画用の FormattedText
フェーズ2:キャンバスコントロールと全機能セット
WinForms と System.Drawing を Avalonia と Skia に置き換えて、XerahS 用の注釈サブシステムを実装してください。ShapeType 列挙型に列挙されているすべての機能を利用できるようにしてください。
コア抽象化の設計
- XerahS に BaseShape を定義し、位置、サイズ、色、境界線の太さ、ヒットテストのプロパティを持たせます。
- すべての ShapeType 値(RegionRectangle、RegionEllipse、RegionFreehand、DrawingRectangle、DrawingEllipse、DrawingFreehand、DrawingFreehandArrow、DrawingLine、DrawingArrow、DrawingTextOutline、DrawingTextBackground、DrawingSpeechBalloon、DrawingStep、DrawingMagnify、DrawingImage、DrawingImageScreen、DrawingSticker、DrawingCursor、DrawingSmartEraser、EffectBlur、EffectPixelate、EffectHighlight、ToolSpotlight、ToolCrop、ToolCutOut)に対応する Avalonia 版を作成します。それぞれ BaseShape を継承し、カスタム描画ロジックを実装します。
- 矢印の先端の方向、ぼかしの半径、ピクセルサイズ、ハイライトの色など、図形固有のプロパティを適切なデフォルト値とともに公開します。
描画とエフェクト
- GDI+ による描画を Avalonia の DrawingContext と Skia に置き換えます。図形とテキストのベクター描画を実装します。エフェクト(ぼかし、ピクセル化、ハイライト)には、Skia の画像フィルターまたはカスタムピクセルシェーダーを使用し、図形の境界内だけにエフェクトを適用します。
- スポットライトツールを実装し、選択した長方形の外側のキャンバスを暗くします。必要に応じて、ぼかしや楕円形のエフェクトも適用します。
- 拡大描画では、円形または長方形の図形内に、元のビットマップの一部を拡大して描画します。
操作
- マウスやタッチのイベントを処理し、図形のサイズ変更や移動用のハンドルを描画し、複数の図形の編集に対応する RegionCaptureView コントロールを作成します。
- ツールの切り替え(例:矢印ツール、テキストツール、エフェクトツール)や、操作のキャンセル、確定を行うキーボードショートカットを実装します。
- 描画、エフェクト、ツールの種類を選択するための図形ツールバー(XAML)を用意します。色、太さ、フォント、エフェクトのパラメーターを変更するコントロールも含めます。
図形の管理
- 図形のコレクション、順序、選択、削除を管理する ShapeManager を移植します。元に戻す/やり直し機能と、図形のコピー/貼り付けに対応します。
- 色、サイズ、矢印の先端の方向、ぼかしの半径、ピクセルサイズなどのユーザー設定を AnnotationOptions に相当するものに保存し、アプリケーションの起動時に読み込み、保存します。
画像の挿入とステッカーのサポート
- 外部画像を挿入するためのファイルピッカー連携を実装します(DrawingImage と DrawingImageScreen)。
- ステッカーパレットとカーソルスタンプに対応し、ユーザーがカスタムステッカーをインポートできるようにします。
スマート消しゴム
- SmartEraserDrawingShape を分析し、消しゴムの軌跡の下にあるスクリーンショットの元のピクセルを復元する、マスクベースの消しゴムを実装します。
切り抜きツールと切り取りツール
- キャンバスのビットマップを変更し、既存の図形をそれに応じて調整する切り抜きツールと切り取りツールを実装します。
- 切り抜き範囲を元に戻したり調整したりできるようにし、非破壊編集を実現します。
領域キャプチャの統合
- RegionCaptureForm を Avalonia で構築した新しい RegionCaptureWindow に置き換えます。RegionCaptureMode と RegionCaptureAction で定義されたモニターの選択、最後に使用した領域の再呼び出し、画面のカラーピッカー、ルーラー、その他のキャプチャモードを処理します。
- 既存のタスクランナーと統合し、キャプチャから注釈、アップロードまでシームレスなワークフローを実現します。
クロスプラットフォームに関する考慮事項
- System.Drawing または WinForms を一切参照せず、描画には Avalonia と Skia のみを使用します。
- AGENTS.md で定義されたコアプラットフォームレイヤーを介して、クリップボードやファイルダイアログなどのプラットフォーム抽象化サービスを使用します。
- Windows、macOS、Linux で同等の動作を保証します。OS 固有の機能をサポートできない場合は、スタブまたはフォールバックを実装します。
テスト
- 各図形タイプとエフェクトについて、描画、ヒットテスト、設定の永続化、元に戻す/やり直し操作時の動作を検証する単体テストと UI テストを作成します。
- 対応プラットフォームで注釈ワークフローを検証するための手動テスト手順を用意します。
コメント
Markdown 対応