Pydanticスキーマとは?

—

by

in

Pydanticスキーマとは

PydanticはPythonでデータバリデーションと設定管理を行うためのライブラリです。その核心機能であるスキーマは、データ構造をクラスとして定義し、型チェックや変換、バリデーションを自動で行います。これにより、APIのリクエスト/レスポンスや設定ファイルなど、外部データとのやり取りを安全かつ簡潔に実装できます。

主な特徴

  • Pythonの型ヒントをそのまま利用できる
  • 宣言的にバリデーションロジックを記述可能
  • データの自動変換(例: 文字列 → datetime)
  • エラーメッセージが詳細かつ構造化されている
  • 高速なバリデーション(Cythonベースの実装)

基本的な使い方

まずはPydanticをインストールします。

pip install pydantic

次に、BaseModelを継承したクラスを定義します。

from pydantic import BaseModel, EmailStr
from datetime import datetime

class User(BaseModel):
    id: int
    name: str
    email: EmailStr
    joined_at: datetime = datetime.utcnow()

# バリデーションと変換の例
input_data = {
    "id": "123",
    "name": "Taro Yamada",
    "email": "taro@example.com"
}

user = User(**input_data)
print(user)

上記のように、idは文字列で渡されましたが、intへ自動変換され、joined_atはデフォルトで現在時刻が設定されます。また、EmailStrはメールアドレス形式かどうかをチェックします。

ネストしたスキーマ

複雑なデータ構造も、スキーマを入れ子にすることで簡潔に定義できます。

class Address(BaseModel):
    street: str
    city: str
    zip_code: str

class UserProfile(BaseModel):
    user: User
    address: Address

profile_data = {
    "user": {"id": 1, "name": "Hanako", "email": "hanako@example.com"},
    "address": {"street": "1-2-3 Sakura", "city": "Tokyo", "zip_code": "100-0001"}
}

profile = UserProfile(**profile_data)
print(profile)

このように、Pydanticスキーマは入れ子構造でも同様にバリデーションと変換を行います。

設定管理への応用

環境変数や設定ファイルを読み込む際にも、PydanticのBaseSettingsを活用できます。

from pydantic import BaseSettings

class Settings(BaseSettings):
    debug: bool = False
    database_url: str

    class Config:
        env_file = ".env"

settings = Settings()
print(settings.debug, settings.database_url)

.env ファイルに記述された設定が自動で読み込まれ、型変換とバリデーションが適用されます。

まとめ

  • PydanticスキーマはPythonの型ヒントを活用したデータバリデーションの中心概念です。
  • シンプルな宣言で自動変換・バリデーションが行われ、エラーメッセージも分かりやすいです。
  • ネスト構造や設定管理にも柔軟に対応でき、FastAPIなどのフレームワークと組み合わせて高品質なAPIを構築できます。