Skip to content
閲覧中:
バリデーション2

バリデーション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点です。

  1. IDEのサポート: VS Codeなどで「入力補完」が効くため、開発効率が劇的に上がります。
  2. 型安全: mypy などの静的解析ツールと相性が良く、バグを未然に防げます。
  3. エコシステム: FastAPI, SQLModel, Beanieなど、多くの最新ライブラリがPydanticを基盤にしています。

次のステップへの提案

Pydanticを使うと、エラーが発生した際に**「どの項目が、どう間違っているか」をまとめた詳細なエラーメッセージ**を自動生成できます。

もしよろしければ、**「バリデーションエラーをユーザーに分かりやすく返す方法(エラーハンドリング)」**について具体例をお見せしましょうか?