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を構築できます。