mirror of
https://github.com/SuperClaude-Org/SuperClaude_Framework.git
synced 2025-12-29 16:16:08 +00:00
## Migration Summary
- Moved from flat `superclaude/` to `src/superclaude/` (PEP 517/518)
- Deleted old structure (119 files removed)
- Added new structure with clean architecture layers
## Project Structure Changes
- OLD: `superclaude/{agents,commands,modes,framework}/`
- NEW: `src/superclaude/{cli,execution,pm_agent}/`
## Build System Updates
- Switched: setuptools → hatchling (modern, PEP 517)
- Updated: pyproject.toml with proper entry points
- Added: pytest plugin auto-discovery
- Version: 4.1.6 → 0.4.0 (clean slate)
## Makefile Enhancements
- Removed: `superclaude install` calls (deprecated)
- Added: `make verify` - Phase 1 installation verification
- Added: `make test-plugin` - pytest plugin loading test
- Added: `make doctor` - health check command
## Documentation Added
- docs/architecture/ - 7 architecture docs
- docs/research/python_src_layout_research_20251021.md
- docs/PR_STRATEGY.md
## Migration Phases
- Phase 1: Core installation ✅ (this commit)
- Phase 2: Lazy loading + Skills system (next)
- Phase 3: PM Agent meta-layer (future)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
7.3 KiB
7.3 KiB
Python Src Layout Research - Repository vs Package Naming
Date: 2025-10-21
Question: Should superclaude repository use src/superclaude/ (nested) or simpler structure?
Confidence: High (90%) - Based on official PyPA docs + real-world examples
🎯 Executive Summary
結論: src/superclaude/ の二重ネストは正しいが、必須ではない
あなたの感覚は正しい:
- リポジトリ名 = パッケージ名が一般的
src/layout自体は推奨されているが、パッケージ名の重複は避けられる- しかし、PyPA公式例は
src/package_name/を使用
選択肢:
- 標準的 (PyPA推奨):
src/superclaude/← 今の構造 - シンプル (可能):
src/のみでモジュール直下に配置 - フラット (古い): リポジトリ直下に
superclaude/
📚 調査結果
1. PyPA公式ガイドライン
ソース: https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/
公式例:
project_root/
├── src/
│ └── awesome_package/ # ← パッケージ名で二重ネスト
│ ├── __init__.py
│ └── module.py
├── pyproject.toml
└── README.md
PyPAの推奨:
src/layoutは強く推奨 ("strongly suggested")- 理由:
- ✅ インストール前に誤ったインポートを防ぐ
- ✅ パッケージングエラーを早期発見
- ✅ ユーザーがインストールする形式でテスト
重要: PyPAは src/package_name/ の構造を公式例として使用
2. 実世界のプロジェクト調査
| プロジェクト | リポジトリ名 | 構造 | パッケージ名 | 備考 |
|---|---|---|---|---|
| Click | click |
✅ src/click/ |
click |
PyPA推奨通り |
| FastAPI | fastapi |
❌ フラット fastapi/ |
fastapi |
ルート直下 |
| setuptools | setuptools |
❌ フラット setuptools/ |
setuptools |
ルート直下 |
パターン:
- すべて リポジトリ名 = パッケージ名
- Clickのみ
src/layout採用 - FastAPI/setuptoolsはフラット構造(古いプロジェクト)
3. なぜ二重ネストが標準なのか
PyPA公式の構造例:
# プロジェクト: awesome_package
awesome_package/ # リポジトリ(GitHub名)
├── src/
│ └── awesome_package/ # Pythonパッケージ
│ ├── __init__.py
│ └── module.py
└── pyproject.toml
理由:
- 明確な分離:
src/= インストール対象、その他 = 開発用 - 命名規則: パッケージ名は
import時に使うので、リポジトリ名と一致させる - ツール対応: hatchling/setuptoolsの
packages = ["src/package_name"]設定
4. あなたの感覚との比較
あなたの疑問:
リポジトリ名が
superclaudeなのに、なぜsrc/superclaude/と重複?
答え:
- リポジトリ名 (
superclaude): GitHub上の名前、プロジェクト全体 - パッケージ名 (
src/superclaude/): Pythonでimport superclaudeする際の名前 - 重複は正常: 同じ名前を使うのが標準的なパターン
モノレポとの違い:
- モノレポ: 複数パッケージを含む (
src/package1/,src/package2/) - SuperClaude: 単一パッケージなので、リポジトリ名 = パッケージ名
🔀 代替案の検討
オプション 1: 現在の構造(PyPA推奨)
superclaude/ # リポジトリ
├── src/
│ └── superclaude/ # パッケージ ← 二重ネスト
│ ├── __init__.py
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
メリット:
- ✅ PyPA公式推奨に完全準拠
- ✅ Clickなど最新プロジェクトと同じ構造
- ✅ パッケージングツールが期待する標準形式
デメリット:
- ❌ パス が長い:
src/superclaude/pm_agent/confidence.py - ❌ 一見冗長に見える
オプション 2: フラット src/ 構造(非標準)
superclaude/ # リポジトリ
├── src/
│ ├── __init__.py # ← superclaude パッケージ
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
pyproject.toml変更:
[tool.hatch.build.targets.wheel]
packages = ["src"] # ← src自体をパッケージとして扱う
メリット:
- ✅ パスが短い
- ✅ 重複感がない
デメリット:
- ❌ 非標準: PyPA例と異なる
- ❌ 混乱:
src/がパッケージ名になる(import src?) - ❌ ツール設定が複雑
オプション 3: フラット layout(非推奨)
superclaude/ # リポジトリ
├── superclaude/ # パッケージ ← ルート直下
│ ├── __init__.py
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
メリット:
- ✅ シンプル
- ✅ FastAPI/setuptoolsと同じ
デメリット:
- ❌ PyPA非推奨: 開発時にインストール版と競合リスク
- ❌ 古いパターン(新規プロジェクトは避けるべき)
💡 推奨事項
結論: 現在の構造を維持
理由:
- ✅ PyPA公式推奨に準拠
- ✅ 最新ベストプラクティス(Click参照)
- ✅ パッケージングツールとの相性が良い
- ✅ 将来的にモノレポ化も可能
あなたの疑問への回答:
- 二重ネストは意図的な設計
- リポジトリ名(プロジェクト) ≠ パッケージ名(Python importable)
- 同じ名前を使うのが慣例だが、別々の概念
📊 エビデンス要約
| 項目 | 証拠 | 信頼性 |
|---|---|---|
| PyPA推奨 | 公式ドキュメント | ⭐⭐⭐⭐⭐ |
| 実例(Click) | GitHub: pallets/click | ⭐⭐⭐⭐⭐ |
| 実例(FastAPI) | GitHub: fastapi/fastapi | ⭐⭐⭐⭐ (古い構造) |
| 構造例 | PyPA src-layout.rst | ⭐⭐⭐⭐⭐ |
🎓 学んだこと
- src/ layoutの目的: インストール前のテストを強制し、パッケージングエラーを早期発見
- 二重ネストの理由:
src/= 配布対象の分離、package_name/= import時の名前 - 業界標準: 新しいプロジェクトは
src/package_name/を採用すべき - 例外: FastAPI/setuptoolsはフラット(歴史的理由)
🚀 アクションアイテム
推奨: 現在の構造を維持
もし変更するなら:
pyproject.tomlのpackages設定変更- 全テストのインポートパス修正
- ドキュメント更新
変更しない理由:
- ✅ 現在の構造は正しい
- ✅ PyPA推奨に準拠
- ✅ 変更のメリットが不明確
研究完了: 2025-10-21
信頼度: High (90%)
推奨: 変更不要 - 現在の src/superclaude/ 構造は最新ベストプラクティス