Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions .clineignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# YWTA Tools - Cline Ignore Rules
# Clineが処理しない/読み込まないファイルとディレクトリを指定

# コンパイル済みファイル
*.mll
*.dll
*.so
*.dylib
*.pyd
*.pyc
*.pyo
__pycache__/
*.py[cod]
*$py.class

# ビルド関連
build/
build.*/
maya/cpp/build.2022/
maya/cpp/build.2024/
maya/plug-ins/2022/
maya/plug-ins/2024/
dist/
target/
*.egg-info/

# サードパーティライブラリ
maya/cpp/third-party/
node_modules/
.eggs/
lib/
lib64/

# IDE/エディタ設定
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store

# ログファイル
*.log
pip-log.txt
pip-delete-this-directory.txt

# テスト関連
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
.pytest_cache/

# 一時ファイル
*.tmp
*.temp
*.bak
*.backup
*.orig

# Maya固有
*.ma~
*.mb~
*.mel~
*.py~

# Blender固有
*.blend1
*.blend2
*.blend~

# バイナリファイル
*.exe
*.bin
*.dat

# 大容量ファイル
*.fbx
*.obj
*.abc
*.usd
*.usda
*.usdc

# アーカイブファイル
*.zip
*.rar
*.7z
*.tar
*.gz

# 画像ファイル(アイコン以外)
*.tga
*.exr
*.hdr
*.tiff
*.tif
*.bmp
*.gif
*.jpg
*.jpeg
# *.png # アイコンファイルがあるためコメントアウト

# 動画ファイル
*.mov
*.mp4
*.avi
*.mkv

# 音声ファイル
*.wav
*.mp3
*.aac

# ドキュメント(大容量)
*.pdf
*.doc
*.docx

# 設定ファイル(機密情報含む可能性)
.env
.env.local
config.ini
secrets.json

# Git関連
.git/
.gitmodules

# パッケージマネージャー
requirements-dev.txt
poetry.lock
Pipfile.lock

# プロファイリング
*.prof
*.profile

# その他の開発ツール
.mypy_cache/
.dmypy.json
dmypy.json
205 changes: 205 additions & 0 deletions .clinerules/current-sprint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
# YWTA Tools - Current Sprint Rules

## 開発中の機能

### 機能名: [プロジェクトの整理]
- **説明**: [プロジェクト内のスクリプトの設計を見直し、整理したい]
- **対象**: Maya

#### 技術仕様
- **実装方法**: Python
- **依存関係**: [必要なライブラリやモジュール]
- **APIバージョン**: Maya API 2.0

#### ファイル構成
```
関連ファイル:
- maya/ywta/[category]/[module_name].py
- maya/icons/[icon_name].png (必要に応じて)
- maya/ywta/test/test_[module_name].py
```

#### 実装チェックリスト
- [ ] コードの整理とリファクタリング
- [ ] ドキュメントの更新

## 考慮事項

### Pyside2とPyside6の併用
ImportErrorを避けるため、Pyside2とPyside6の両方をサポートするコードを記述します。以下のコードスニペットを使用して、適切なモジュールをインポートしてください。

```
try:
from PySide6.QtCore import QObject, Qt
except ImportError:
from PySide2.QtCore import QObject, Qt
```

### ywta.shortcutsの依存をywta.coreに移行
`ywta.shortcuts`はDeprecatedなので、モジュールの依存関係を`ywta.core`に移行し、汎用ユーティリティ関数を提供するようにします。

## 現在の設計の概要

### 1. __モジュール構造__

- __機能別分類__: rig/, deform/, mesh/, anim/, io/, ui/, utility/ など機能ごとに整理
- __階層構造__: 各カテゴリ内でさらに細分化(例:rig/controls/, rig/face/)
- __プラグインシステム__: plugins/ディレクトリでC++プラグインとの連携

### 2. __初期化システム__

- `userSetup.py` → `ywta.initialize()` → `menu.py`の順で初期化
- `reloadmodules.py`でモジュールの動的リロード機能

### 3. __メニューシステム__

- `menu.py`で一元的にMayaメニューを管理
- 機能別にサブメニューを構成(Animation, Mesh, Rigging, Deform, Utility)

## 設計上の課題と改善点

### __課題1: 設定管理の不備__

- `settings.py`が非常にシンプル(DOCUMENTATION_ROOT, ENABLE_PLUGINSのみ)
- ハードコードされた設定が各モジュールに散在

### __課題2: 依存関係の複雑化__

- モジュール間の依存関係が不明確
- `shortcuts.py`が汎用ユーティリティとして多くのモジュールから参照される可能性

### __課題3: エラーハンドリングの一貫性不足__

- ログシステムは存在するが、統一的なエラーハンドリング戦略が不明確

### __課題4: テスト体系の不完全性__

- `test/`ディレクトリは存在するが、各機能モジュールとの対応が不明確

### __課題5: プラグイン管理の複雑性__

- PythonプラグインとC++プラグインの管理が分離されている

## 改善提案

## 課題1: 設定管理システムの強化

### __タスク1-1: 設定クラスの設計__[done]

- `ywta/config/` ディレクトリの作成
- `BaseConfig` クラスの実装(型ヒント付き)
- 環境変数、設定ファイル、デフォルト値の優先順位システム
- 設定値の検証機能

### __タスク1-2: 設定ファイルの構造化__[done]

- `config.yaml` または `config.json` の作成
- 機能別設定セクション(rig, deform, ui, plugins等)
- ユーザー設定とシステム設定の分離

### __タスク1-3: 設定管理APIの実装__[done]

- `get_config()`, `set_config()`, `reset_config()` 関数
- 設定変更時のコールバック機能
- 設定の永続化機能

## 課題2: 依存関係の明確化

### __タスク2-1: 依存関係マップの作成__[done]

- 各モジュールの `__init__.py` に依存関係を明記
- 依存関係グラフの可視化スクリプト作成
- 循環依存の検出ツール

### __タスク2-2: インターフェース定義__[skipped]

- `ywta/interfaces/` ディレクトリの作成
- 抽象基底クラス(ABC)の定義
- プロトコル(typing.Protocol)の活用

### __タスク2-3: モジュール分離の改善__

- `shortcuts.py` の機能分割(maya_utils.py, geometry_utils.py等)
- 共通ユーティリティの `ywta/core/` への移動
- レイヤードアーキテクチャの導入

## 課題3: エラーハンドリングの統一

### __タスク3-1: 例外クラス階層の設計__

- `ywta/exceptions.py` の作成
- `YWTAError`, `RigError`, `DeformError` 等の例外クラス
- エラーコードシステムの導入

### __タスク3-2: ログシステムの強化__

- 統一ログ設定(`ywta/logging_config.py`)
- 機能別ロガーの作成
- ログレベルの動的変更機能

### __タスク3-3: ユーザーフレンドリーなエラー表示__

- Maya UI用エラーダイアログクラス
- エラーメッセージの多言語対応
- エラー解決のヒント機能

## 課題4: プラグインアーキテクチャの改善

### __タスク4-1: プラグイン登録システム__

- `ywta/plugin_manager.py` の作成
- プラグインメタデータ(version, dependencies等)
- プラグイン検索・発見機能

### __タスク4-2: 動的ロード機能__

- プラグインの有効/無効切り替え
- 依存関係を考慮したロード順序
- プラグインアンロード時のクリーンアップ

### __タスク4-3: プラグイン間通信__

- イベントシステムの実装
- プラグイン間のメッセージパッシング
- 共有データストレージ

## 課題5: テスト体系の整備

### __タスク5-1: テスト構造の再編__

- 各機能モジュールに対応するテストファイル作成
- `test_rig/`, `test_deform/` 等のディレクトリ構造
- テストユーティリティクラスの作成

### __タスク5-2: テストカバレッジの向上__

- 単体テスト(unittest)の充実
- 統合テスト(Maya環境での実行)
- パフォーマンステストの追加

### __タスク5-3: テスト自動化__

- `pytest` への移行検討
- テストレポート生成機能
- 継続的テスト実行環境

## 実装優先順位の提案

### __フェーズ1(基盤整備)__

1. タスク1-1, 1-2: 設定システムの基盤
2. タスク3-1, 3-2: エラーハンドリングの基盤
3. タスク2-1: 依存関係の可視化

### __フェーズ2(アーキテクチャ改善)__

1. タスク2-2, 2-3: モジュール構造の改善
2. タスク4-1, 4-2: プラグインシステムの改善
3. タスク5-1: テスト構造の整備

### __フェーズ3(機能拡張)__

1. タスク1-3: 設定管理APIの完成
2. タスク3-3: ユーザーエクスペリエンスの向上
3. タスク4-3, 5-2, 5-3: 高度な機能の実装

Loading