docs/research/python_src_layout_research_20251021.md
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
結論: src/superclaude/ の二重ネストは正しいが、必須ではない
あなたの感覚は正しい:
src/ layout自体は推奨されているが、パッケージ名の重複は避けられるsrc/package_name/ を使用選択肢:
src/superclaude/ ← 今の構造src/ のみでモジュール直下に配置superclaude/ソース: 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/ の構造を公式例として使用
| プロジェクト | リポジトリ名 | 構造 | パッケージ名 | 備考 |
|---|---|---|---|---|
| Click | click | ✅ src/click/ | click | PyPA推奨通り |
| FastAPI | fastapi | ❌ フラット fastapi/ | fastapi | ルート直下 |
| setuptools | setuptools | ❌ フラット setuptools/ | setuptools | ルート直下 |
パターン:
src/ layout採用PyPA公式の構造例:
# プロジェクト: awesome_package
awesome_package/ # リポジトリ(GitHub名)
├── src/
│ └── awesome_package/ # Pythonパッケージ
│ ├── __init__.py
│ └── module.py
└── pyproject.toml
理由:
src/ = インストール対象、その他 = 開発用import 時に使うので、リポジトリ名と一致させるpackages = ["src/package_name"] 設定あなたの疑問:
リポジトリ名が
superclaudeなのに、なぜsrc/superclaude/と重複?
答え:
superclaude): GitHub上の名前、プロジェクト全体src/superclaude/): Pythonで import superclaude する際の名前モノレポとの違い:
src/package1/, src/package2/)superclaude/ # リポジトリ
├── src/
│ └── superclaude/ # パッケージ ← 二重ネスト
│ ├── __init__.py
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
メリット:
デメリット:
src/superclaude/pm_agent/confidence.pysuperclaude/ # リポジトリ
├── src/
│ ├── __init__.py # ← superclaude パッケージ
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
pyproject.toml変更:
[tool.hatch.build.targets.wheel]
packages = ["src"] # ← src自体をパッケージとして扱う
メリット:
デメリット:
src/ がパッケージ名になる(import src?)superclaude/ # リポジトリ
├── superclaude/ # パッケージ ← ルート直下
│ ├── __init__.py
│ ├── pm_agent/
│ └── cli/
├── tests/
└── pyproject.toml
メリット:
デメリット:
理由:
あなたの疑問への回答:
| 項目 | 証拠 | 信頼性 |
|---|---|---|
| PyPA推奨 | 公式ドキュメント | ⭐⭐⭐⭐⭐ |
| 実例(Click) | GitHub: pallets/click | ⭐⭐⭐⭐⭐ |
| 実例(FastAPI) | GitHub: fastapi/fastapi | ⭐⭐⭐⭐ (古い構造) |
| 構造例 | PyPA src-layout.rst | ⭐⭐⭐⭐⭐ |
src/ = 配布対象の分離、package_name/ = import時の名前src/package_name/ を採用すべき推奨: 現在の構造を維持
もし変更するなら:
pyproject.toml の packages 設定変更変更しない理由:
研究完了: 2025-10-21
信頼度: High (90%)
推奨: 変更不要 - 現在の src/superclaude/ 構造は最新ベストプラクティス