# 要件ドキュメント

## 概要

Qt-Theme-Managerプロジェクトを純粋なライブラリとして整理し、GUIツール部分を別リポジトリ（qt-theme-studio）に分離する機能です。この分離により、関心の分離を実現し、ライブラリの保守性・拡張性・構造美を向上させます。既存のAPIの後方互換性を維持しながら、コードサイズの削減と依存関係の最小化を図ります。

## 要件

### 要件 1

**ユーザーストーリー:** ライブラリメンテナーとして、コアライブラリからGUIツールを分離したい。そうすることで、関心の分離が明確な、クリーンなライブラリ構造を維持できる。

#### 受け入れ基準

1. 分離が完了した時、コアライブラリは`qt_theme_manager/`パッケージのみに含まれること
2. 分離が完了した時、すべてのGUI関連ファイルは手動転送用の`migrate/`フォルダに移動されること
3. 分離が完了した時、ライブラリは既存APIとの100%後方互換性を維持すること
4. 分離が完了した時、パッケージ名は`theme_manager/`から`qt_theme_manager/`に変更されること

### 要件 2

**ユーザーストーリー:** ライブラリを使用する開発者として、Qtフレームワークの自動検出が継続して動作することを望む。そうすることで、分離後も既存のコードが壊れない。

#### 受け入れ基準

1. ライブラリがインポートされた時、PySide6 → PyQt6 → PyQt5の順でQtフレームワークを自動検出すること
2. Qtフレームワークが利用できない時、適切なエラーメッセージを提供すること
3. 自動検出が実行された時、分離前と同じ動作を維持すること
4. 依存関係が解決された時、必須パッケージのみに最小化されること

### 要件 3

**ユーザーストーリー:** プロジェクトメンテナーとして、GUI関連ファイルを移行フォルダに移動したい。そうすることで、qt-theme-studioリポジトリに手動転送できる。

#### 受け入れ基準

1. 移行準備が開始された時、以下のファイルが`migrate/`フォルダに移動されること：
   - `launch_theme_editor.py`
   - `launch_zebra_theme_editor.py`
   - `launch_gui_preview.py`
   - `theme_editor_zebra_extension.py`
   - `zebra_pattern_editor.py`
   - `analyze_zebra_colors.py`
   - `improve_zebra_colors.py`
   - `examples/` ディレクトリ
   - `scripts/` ディレクトリ
   - `utils/` ディレクトリ
2. ファイルが移動された時、`migrate/`フォルダ内で元の構造を保持すること
3. 移行が完了した時、`migrate/`フォルダはqt-theme-studioへの手動転送準備が整っていること
4. ファイルが移動された時、自動化プロセスではファイルを削除しないこと

### 要件 4

**ユーザーストーリー:** ライブラリユーザーとして、コアライブラリ構造が保持されることを望む。そうすることで、既存のインポートと使用パターンが継続して動作する。

#### 受け入れ基準

1. ライブラリが再構築された時、`qt_theme_manager/`パッケージがすべてのコア機能を含むこと
2. ライブラリが再構築された時、以下のサブディレクトリを含むこと：
   - `cli/` コマンドラインインターフェース機能用
   - `qt/` Qt統合モジュール用
   - `config/` 設定ファイル処理用
3. ライブラリが再構築された時、すべての既存パブリックAPIがアクセス可能であること
4. ライブラリが再構築された時、パッケージがモジュラーアーキテクチャを維持すること

### 要件 5

**ユーザーストーリー:** 開発者として、分離中にコード品質が向上することを望む。そうすることで、ライブラリが現代的なPython標準に従う。

#### 受け入れ基準

1. コード品質改善が適用された時、すべてのコードがPEP 8標準に準拠すること
2. コード品質改善が適用された時、行長が79文字に制限されること
3. コード品質改善が適用された時、すべての関数とメソッドが型ヒントを持つこと
4. コード品質改善が適用された時、すべてのパブリックAPI要素がdocstringを持つこと
5. コード品質改善が適用された時、print文が適切なログ出力に置き換えられること
6. コード品質改善が適用された時、未使用インポートが削除されること

### 要件 6

**ユーザーストーリー:** プロジェクトメンテナーとして、ライブラリ専用構造のためにドキュメントが更新されることを望む。そうすることで、ユーザーが新しいアーキテクチャと思想を理解できる。

#### 受け入れ基準

1. ドキュメントが更新された時、README.mdにライブラリ分離思想を説明するセクションが含まれること
2. ドキュメントが更新された時、API_REFERENCE.mdがライブラリ機能のみを反映すること
3. ドキュメントが更新された時、INSTALL.mdがライブラリ固有のインストール手順を提供すること
4. ドキュメントが更新された時、GUIツールへの参照がすべて削除または移動済みとマークされること
5. ドキュメントが更新された時、分離の背景と利点が明確に説明されること

### 要件 7

**ユーザーストーリー:** ライブラリメンテナーとして、ライブラリ配布用にパッケージング設定が最適化されることを望む。そうすることで、PyPI経由でパッケージを効率的に配布できる。

#### 受け入れ基準

1. パッケージングが設定された時、pyproject.tomlがライブラリ固有のメタデータを含むこと
2. パッケージングが設定された時、setup.pyがライブラリ配布用に最適化されること
3. パッケージングが設定された時、MANIFEST.inが必要なファイルのみを含むこと
4. パッケージングが設定された時、依存関係が必須パッケージのみに最小化されること
5. パッケージングが設定された時、開発依存関係が[dev]セクションに分離されること

### 要件 8

**ユーザーストーリー:** 品質保証エンジニアとして、分離が機能を壊さないことを保証する包括的なテストを望む。そうすることで、ライブラリが信頼性を維持できる。

#### 受け入れ基準

1. テストが実行された時、少なくとも95%のコードカバレッジを達成すること
2. テストが実行された時、すべての既存機能が変更なしで合格すること
3. テストが実行された時、API互換性が検証されること
4. テストが実行された時、サポートされるすべてのフレームワークでQt自動検出がテストされること
5. テストが実行された時、CLI機能が検証されること
6. テストが実行された時、設定ファイル処理がテストされること
