コンテンツにスキップ
検索語を入力してください

    はじめに

    ソースリポジトリ: kamae-py

    Kamae Python は、サーバーサイド Python 3.12 以降向けの設計スタンスとガイド集である。uv で依存を管理し、Pydantic v2 の判別共用体と凍結状態モデルでドメインを表現し、状態変更を純粋関数で記述する。

    すべてのリファレンスを通読する必要はない。今のタスクに関係するトピックだけを開けばよい。各リファレンス末尾の レビュー観点 には、そのトピックのコードレビューで確認すべき項目がまとめてある。

    Kamae が防ぎたいのは、次のような失敗である。

    • status: str と大量のオプショナルフィールドで表せてしまう無効な状態
    • typing.cast や未検証の dict アクセスによる境界の穴
    • 例外に頼る想定内のビジネス失敗
    • ORM エンティティとドメインモデルの混同
    • ログ・メトリクス・エラーへの PII 漏洩
    • 状態変更とドメインイベントの非アトミックな永続化

    Python では、凍結 Pydantic モデル・kind 判別子・TypeAdapter・純粋な遷移関数を組み合わせ、実用的な範囲でこれらをランタイム検証と型チェックの両面から抑える。

    • 状態はバリアントで分ける — 各ビジネス状態を個別の凍結 Pydantic v2 モデルとし、Annotated[..., Field(discriminator="kind")] で共用体にまとめる。
    • 遷移は純粋関数 — 入力型が許可するソース状態、戻り値型がターゲット状態になる関数として表現する。時刻・ID・乱数は引数で注入する。
    • 境界で一度パースする — API・DB・ファイル・キュー・SDK のデータは TypeAdapter で受け、検証済みモデルからドメインへ変換する。
    • 失敗は明示的に — 想定されるドメイン失敗はユースケース固有の型で表し、例外はフレームワーク境界と想定外のインフラ失敗に留める。
    • PII はデフォルトでマスク — ログ・トレース・エラー・メトリクス・イベントに載せる ID は許可リストで管理する。
    • 永続化はアトミックに — 状態変更とドメインイベントを同じトランザクションで保存し、冪等なリトライ経路を用意する。
    • 品質ゲートを揃える — 触ったコードでは uv run ruff formatuv run ruff checkuv run mypy、焦点を絞った uv run pytest をクリーンに保つ。

    新規プロジェクトの既定は次のとおり。既存コードベースでは、まずリポジトリの慣習を確認する。

    • Python 3.12.x または 3.13.x(requires-python = ">=3.12,<3.14"
    • 依存管理は uvpip / Poetry / Pipenv は導入しない)
    • バリデーションは Pydantic v2(ジェネリックモデルを使う場合は 2.11+ を推奨)
    • 静的解析は Ruffmypyplugins = ["pydantic.mypy"]
    1. ドメインモデリング
    2. 状態遷移
    3. 境界防御エラーハンドリング
    4. 永続化、集約、イベント
    5. タクシー配車の例
    6. 仕上げ前に 品質ゲート

    既存コードベースへ段階的に導入するとき

    Section titled “既存コードベースへ段階的に導入するとき”
    1. 移行戦略
    2. 境界防御
    3. 永続化に ORM を使う場合は ORM アダプター
    4. 移行したワークフローごとに、上記「新規ドメイン」のパスを続ける

    オブザーバビリティと PII だけ見るとき

    Section titled “オブザーバビリティと PII だけ見るとき”
    1. PII と観測経路の保護
    2. ロギングとメトリクス
    3. テストのアサーションは テストデータ
    関心リファレンス
    ユースケース配線、DIアプリケーション配線
    CPU バウンド、GIL、asyncio並行性と非同期
    リトライ、サーキットブレーカーインフラの耐障害性
    ネイティブ、ctypesmodel_constructunsafe 境界
    公開 API の docstring公開 API のドキュメント
    バリデーションコストPydantic のパフォーマンス
    ローカル開発・ブートストラップ開発環境とセットアップ
    CICI セットアップ

    新しいリファレンスに全文スニペットをコピーせず、次の定義へリンクする。

    トピック正規リファレンス
    ハッピーパスのユースケース状態遷移 — ユースケースを薄く保つ
    永続化エラーのマッピングエラーハンドリング — early return
    リポジトリポート(本番)永続化、集約、イベント — 小さなプロトコル
    リポジトリポート(入門)ドメインモデリング — Protocol
    エンドツーエンドコードタクシー配車の例
    Mypy / Pydantic プラグイン設定ドメインモデリング — mypy 設定
    品質ゲートのコマンド品質ゲート — 基本コマンド

    タクシー配車の例 では、Pydantic v2 の判別共用体、凍結状態モデル、純粋遷移、ドメインイベント、境界パースを一通り追える。