pydanticとは
pythonの型ヒントを利用して、データ構造の定義の検証、変換を自動で行うためのライブラリのことです。
主にFastAPIとの相性が良く、FastAPIで使用されることが多いですが、単体でも非常に便利に使えます。
以下のような特徴があります⇓
- Python の型ヒントを使ってデータ構造を定義できる
- 入力データを自動的に検証・変換してくれる
- エラー内容がわかりやすい
- 辞書 ⇔ モデル の相互変換が簡単
例えば、整数を期待しているフィールドであれば、文字列の"1"が入力されたとき、自動で整数型に変換する、といった変換を施してくれます。
これらの特徴から、PydanticはPythonのコードをより安全に、堅牢にするために使用されます。
基本的な使用方法
実際にpythonコード内で使用する際は以下のようにコードを書きます⇓
モデル定義と自動バリデーション
qiita.rb
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
is_active: bool = True
data = {"id": "1", "name": "Taro"}
user = User(**data)
print(user)
# id=1 name='Taro' is_active=True
idに文字列"1"を渡しても、pydanticが自動でintに変換してくれます。
メモ:BaseModelとは
BaseModel(Pydantic)は、型ヒントに基づくデータモデルを宣言し、入力データの検証・変換・シリアライズを自動で行うための基底クラスです。
バリデーションエラーの例
いくら万能とはいえ、アルファベットなどが来た場合は変換の仕様がありません。
そのため、以下のようなバリデーションエラーを出します。
quiita.rb
User(id="abc", name="Taro")
ValidationError: 1 validation error for User
id
Input should be a valid integer (type=int_type)
このようにエラーが読みやすいことも特徴の一つです。
dictやJSONとの相互変換
qiita.rb
user = User(id=1, name="Taro")
print(user.model_dump())
# {'id': 1, 'name': 'Taro', 'is_active': True}
print(user.model_dump_json())
# {"id": 1, "name": "Taro", "is_active": true}
``
前提
- Userはpydanticのモデル
- is_activeはデフォルトTrueが設定されているため、コンストラクタで値を渡さなくても自動的にTrueが入ります。
それぞれの出力の意味
- model_dump()
• Python の辞書(dict) を返します。
• 出力例:{'id': 1, 'name': 'Taro', 'is_active': True}
• 用途:後続の Python 内処理(辞書として扱う、他関数へ渡す、テスト比較 など)。
• 型:bool は Python の True/False。 - model_dump_json()
• JSON 文字列(str) を返します。
• 出力例:'{"id": 1, "name": "Taro", "is_active": true}'
• 用途:HTTP レスポンスやファイル保存、ログ出力など 外部とのやり取り にそのまま使える。
• 型表現:JSON の仕様に従い、真偽値は true/false(小文字)で表現されます。
pydantic の主な用途
- Web API(特に FastAPI)でリクエスト/レスポンスモデル
- 設定ファイルの管理(環境変数も扱える)
- データ読み込み(JSON, APIレスポンス, DBからのデータ)
- 型安全なクラスとしての利用