バリデーション2
Pythonでよく使われるバリデーションライブラリの代表格は、**Pydantic(パイダンティック)**です。現在、FastAPIなどのモダンなフレームワークで標準的に採用されており、デファクトスタンダード(事実上の標準)となっています。
それぞれのライブラリの特徴と、具体的なコード例を紹介します。
1. Pydantic (もっとも推奨)¶
Pythonの「型ヒント」を利用してバリデーションを行います。非常に高速で、データの「型変換(Coercion)」も自動で行ってくれるのが特徴です。
実装例¶
Python
from pydantic import BaseModel, Field, EmailStr, field_validator
from datetime import date
class ItemRequest(BaseModel):
# 型ヒントだけで基本チェックができる
item_id: int
name: str = Field(min_length=2, max_length=50) # 長さ制限
quantity: int = Field(gt=0, le=10) # 0より大きく10以下
contact_email: EmailStr # メールの形式チェック
start_date: date
# カスタムバリデーション(複雑なロジック用)
@field_validator('start_date')
@classmethod
def check_not_past(cls, v):
if v < date.today():
raise ValueError('過去の日付は指定できません')
return v
# 正しいデータ
data = {
"item_id": "123", # 文字列でもintに自動変換してくれる
"name": "Monitor",
"quantity": 5,
"contact_email": "test@example.com",
"start_date": "2025-12-25"
}
item = ItemRequest(**data)
print(item.item_id) # 123 (int型になっている)
2. その他の主要なライブラリ¶
Pydantic以外にも、用途に合わせて以下のライブラリが使われます。
| ライブラリ名 | 特徴 | 向いているケース |
|---|---|---|
| Marshmallow | 昔からの定番。シリアライズ(辞書化)に強い。 | Flaskなどの少し古いフレームワーク |
| Cerberus | スキーマを「辞書形式」で定義する。 | 型ヒントを使いたくない、動的なルール変更が必要な時 |
| Voluptuous | 非常に軽量。設定ファイルのチェックなどに使われる。 | シンプルな辞書構造の検証 |
3. どのライブラリを選ぶべきか?¶
現代のPython開発(特に5,000行規模以上のプロジェクト)であれば、**Pydantic一択**で考えて問題ありません。理由は以下の3点です。
- IDEのサポート: VS Codeなどで「入力補完」が効くため、開発効率が劇的に上がります。
- 型安全:
mypyなどの静的解析ツールと相性が良く、バグを未然に防げます。 - エコシステム: FastAPI, SQLModel, Beanieなど、多くの最新ライブラリがPydanticを基盤にしています。
次のステップへの提案¶
Pydanticを使うと、エラーが発生した際に**「どの項目が、どう間違っているか」をまとめた詳細なエラーメッセージ**を自動生成できます。
もしよろしければ、**「バリデーションエラーをユーザーに分かりやすく返す方法(エラーハンドリング)」**について具体例をお見せしましょうか?