コンテンツにスキップ

アーキテクチャ

リポジトリ構成

pytilpack/          # メインパッケージ
  cli/              # CLIサブコマンド群
tests/              # テストコード
docs/               # ドキュメント
  api/              # APIリファレンス(モジュールごとの.md)
  guide/            # 利用者向けガイド
  development/      # 開発者向けドキュメント
scripts/            # 開発用スクリプト

モジュール構成方針

pytilpackは主要Pythonライブラリ向けの軽量ユーティリティ集。 モジュール単位の個別importとextras単位の依存管理を採用する。 利用者は必要なモジュールだけを取り込むことができる。

コア依存とextras

コア依存([project.dependencies])は最小限に保つ(現在: beautifulsoup4/httpx/mcp/werkzeug)。 サードパーティライブラリに依存するモジュールはextras([project.optional-dependencies])で管理する。 インポートは原則トップレベルで行う(.pylintrcimport-outside-toplevelは有効)。

モジュール→extrasキーマッピング

モジュール名とextrasキー名が異なるケースを以下に示す。

モジュール名 extrasキー 主な依存パッケージ
pytilpack.pycrypto pycryptodome pycryptodome
pytilpack.yaml pyyaml pyyaml
pytilpack.flask_login flask flask, flask-login(flaskextrasに含まれる)
pytilpack.quart_auth quart quart-auth(quartextrasに含まれる)
pytilpack.i18n babel babel(babelextrasに含まれる)

上記以外は原則としてモジュール名とextrasキー名が一致する。 .claude/agents/extras-consistency-checker.mdはこのマッピングを参照して判定する。

サブパッケージ共通モジュールの依存

pytilpack/_web_asserts.pyのように複数のフレームワーク向けサブパッケージから共通利用される 私的モジュールがある。 これらが特定のサードパーティに依存する場合、当該パッケージは依存元の各フレームワークextras (flaskquartfastapi等)とall extrasの双方に含める。

具体例: pytilpack/_web_asserts.pyassert_xml_coreはXML外部実体攻撃を防ぐため defusedxmlを使用する。 このためflaskquartfastapiall extrasにdefusedxmlを含める。

公開API設計方針

  • 各モジュールは対象ライブラリ(pytilpack.fastapipytilpack.flask等)ごとに独立した名前空間を持つ
  • モジュール間の横断依存は原則持たない(各モジュールを単独で利用可能とするため)
  • pytilpack.cli配下はコマンドラインインターフェースの実装で、パッケージのpublic APIには含めない

テスト配置規約

  • pytilpack/xxx.pytests/xxx_test.py
  • pytilpack/xxx/yyy.pytests/xxx/yyy_test.py
  • xxxがPythonキーワード等と衝突する場合はxxx_.pyとなる。テストはxxx_test.py(末尾アンダースコアは除く)
  • 既存モジュールへ公開関数・公開クラスを追加した場合は、対応するtests/.../xxx_test.pyに単体テストも追加する

テスト用ローカルポートの割り当て

tests/配下でローカルHTTPサーバーを起動するテストは、pytest-xdistの並列実行(-n 4)で ポート衝突によるハング・失敗を避けるため、テストファイル単位で固定のポート番号を割り当てる。

テストファイル ポート
tests/flask/misc_test.py::test_run 5000
tests/httpx_test.py 5001, 5002
tests/http_test.py 5003
tests/quart/misc_test.py::test_run 5004

新規にローカルサーバーを起動するテストを追加する場合は、本表を参照して未使用のポートを割り当てる。

ドキュメント構成

MkDocs + mkdocstrings + mkdocs-llmstxtでAPIリファレンスとllms.txtを自動生成し、GitHub Pagesにデプロイする。

  • docs/api/<name>.md — 各モジュールのAPIリファレンス(mkdocstringsによる自動生成の設定ファイル)
  • docs/guide/index.md — extras一覧・モジュール一覧(APIリファレンスへのリンク集)
  • mkdocs.yml — nav・llmstxt sectionsで全モジュールを列挙

docs/api/<name>.mddocs/guide/index.mdmkdocs.ymlの3箇所はモジュール一覧を同期して保つ必要があり、 scripts/check_docs_api.pyでCI時に整合性を検証する。