🔍

Pydantic内部 — 型ヒントがランタイム検証になる過程

__annotations__ → Rustコア(pydantic-core)→ 検証実行

クラス定義時点で検証ロジックが作られる。

V2の核心 — pydantic-core

Pydantic v2の検証ロジックはPythonではなくRust(pydantic-core)で実装。v1比5〜50倍速い。

フロー:クラス定義→ModelMetaclass.__new__()__annotations__読み取り→型別にcore_schema生成→SchemaValidator(Rustオブジェクト)生成→クラスに保存→User(...)SchemaValidator.validate_python(data)をRustで実行。

自動変換(coercion)

User(name='Kim', age='25') — ageはstrだがintに自動変換。age='abc'→ValidationError。

FastAPIでの役割

FastAPIはエンドポイント引数型がPydanticモデルならリクエストbodyを自動パース/検証。型ヒント1行が入力検証+ドキュメント化+シリアライズを全て解決。

キーポイント

1

class User(BaseModel):定義時にModelMetaclassが__annotations__を読む

2

各フィールド型に合ったcore_schemaを生成(Rustレベル)

3

User(...)呼び出し時SchemaValidator.validate_python()でRustで検証

4

検証失敗時ValidationError — どのフィールドがなぜ間違ったか詳細情報

ユースケース

APIリクエスト検証 — FastAPI + Pydanticで自動入力検証 設定ファイルパース — BaseSettingsで環境変数/.env自動ロード+型検証