【Python】Pydanticの基本と実践的な使い方

Python
この記事は約6分で読めます。

こんにちは、JS2IIUです。
Pythonのデータバリデーションと型チェックを強化するライブラリ「Pydantic」は、データの整合性を担保し、バグの発生を抑えるのに非常に役立ちます。本記事では、Pydanticの基本的な使い方から、実践的な活用方法までをサンプルコードと共に解説していきます。今回もよろしくお願いします。

Pydanticのメリットと活用しどころ

Pydanticのメリット

  • 型チェックの強化: Pythonの型ヒントを活用し、入力データの型を厳密にチェックできます。
  • 自動型変換: 文字列から数値、数値から文字列など、適切な変換を自動的に行います。
  • データバリデーション: ユーザー定義のバリデーションルールを組み込むことができます。
  • エラーハンドリング: バリデーションエラー時に詳細なエラー情報を提供し、デバッグを容易にします。
  • JSON連携の容易さ: JSONのシリアライズ・デシリアライズが簡単に行えます。

活用しどころ

  • APIのリクエスト・レスポンスのバリデーション: FastAPIなどのフレームワークと組み合わせて活用。
  • データ解析: 外部データを読み込む際の整合性チェック。
  • 設定ファイルの管理: .envやJSONファイルをPydanticモデルで管理。

Pydanticの基本

インストール

Pydanticを使用するには、まずライブラリをインストールします。

Bash
pip install pydantic

基本的な使い方

Pydanticの基本的な機能は、Pythonのdataclassのようなデータモデルの作成ですが、追加で型チェックとバリデーションを行います。

Python
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    age: int

# インスタンス作成
user = User(id=1, name="Alice", age=25)
print(user)

このコードを実行すると、正しいデータ型であればインスタンスが正常に作成されます。

バリデーションの自動適用

Pydanticは、指定された型に自動変換を試みます。

Python
user = User(id="1", name="Alice", age="25")  # 型変換が自動的に行われる
print(user)  # id=1, name='Alice', age=25

しかし、型変換が不可能な場合はエラーが発生します。

Python
user = User(id="abc", name="Alice", age="twenty five")  # エラー発生

Pydanticの実践的な使い方

バリデーションのカスタマイズ

@validatorデコレータを使用して、特定のルールに基づいたバリデーションを追加できます。

Python
from pydantic import BaseModel, validator

class User(BaseModel):
    id: int
    name: str
    age: int

    @validator("age")
    def check_age(cls, value):
        if value < 18:
            raise ValueError("年齢は18歳以上でなければなりません")
        return value

user = User(id=1, name="Alice", age=17)  # 例外発生

ネストされたデータ構造

Pydanticは、ネストされたデータ構造にも対応しています。

Python
from typing import List
from pydantic import BaseModel

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

class User(BaseModel):
    id: int
    name: str
    addresses: List[Address]

user = User(
    id=1,
    name="Alice",
    addresses=[{"city": "Tokyo", "zip_code": "100-0001"}]
)
print(user)

環境変数の読み込み

Pydanticは、環境変数を使用して設定を簡単に管理できます。

Python
from pydantic import BaseSettings

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

    class Config:
        env_file = ".env"

settings = Settings()
print(settings)

FastAPIとの連携

FastAPIはPydanticを活用してリクエストとレスポンスのデータバリデーションを行います。

Python
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/")
async def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price}

まとめ

Pydanticは、データバリデーションや型変換の自動適用を行い、コードの安全性を高める強力なツールです。本記事では基本的な使い方から、カスタムバリデーションやネスト構造の活用方法、環境変数の管理、FastAPIとの連携について紹介しました。

関連リンク

最後に、書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました