> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# pydantic でデータを検証する方法

> pydantic を使ったデータの検証方法を学びましょう。

## はじめに

* この記事では、pydantic を使ったデータ検証について解説します。Pydantic は Rust で構築された Python ライブラリです。
* はじめる前に、お使いの環境に Python と Pydantic ライブラリがインストールされていることを確認してください。以下の pydantic のインストールコマンドを確認してください。

```bash theme={null}
pip install pydantic
```

## モデルの作成

* まず、検証を始めるために、`pydantic.BaseModel` をインポートしてクラスに継承させる必要があります。この例では `Person` という名前のクラスを作成し、name、age、e-mail を持たせます。

```python theme={null}
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    email: str
```

* このクラスをインスタンス化すると、pydantic はパラメーター `name` と `email` が文字列であること、`age` が整数であることを検証します。

### モデルの使用

* 作成できたので、クラスをインスタンス化します。データを含む辞書を作成し、それをクラスに展開して渡します。

```python theme={null}
data = {
    "name": "John",
    "age": 19,
    "email": "john@gmail.com"
}
person = Person(**data)
```

* 上記の例では、すべての **パラメーター** が正しい型になっているため、エラーは発生しません。次に、検証が機能するかどうかを確認するために、誤ったデータを作成します。

```python theme={null}
data = {
    "name": "John",
    "age": "19",
    "email": "john@gmail.com"
}
person = Person(**data)
```

* 上記の例では、`age` は **整数** である必要があり **文字列** として指定できないため、`ValidationError` エラーが発生します。

## dataclass の作成

* pydantic を使って **dataclass** を作成することもできます。これは標準の Python の **dataclass** に似ていますが、BaseModel のような検証を備えています。

```python theme={null}
from pydantic import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str
```

* `age` に `string` を渡すと、`int` に変換されます。

<Info>
  Pydantic は再帰的な検証をサポートしています。つまり、ネストされたモデルを検証する際には、内部のモデルも検証します。

  あるクラスが `Person` のリスト `people: list[Person]` を持つ場合、リスト内の各項目をチェックし、それぞれを `Person` に変換します。
</Info>

## その他

* Pydantic には、**e-mail** の検証やフォールバック用の **timezone** パッケージなどの追加機能があります。これらをインストールするには、次のコマンドを実行する必要があります。

```bash theme={null}
pip install pydantic[email]
```

```bash theme={null}
pip install pydantic[timezone]
```

* 次のコマンドを実行すると、両方を一度にインストールできます。

```bash theme={null}
pip install pydantic[email,timezone]
```

* Pydantic\[email] は、メールを処理するためのクラスを提供し、正規化して `user@domain.tld` の形式を検証します。このために、pydantic はこの検証を行う `EmailStr` クラスを提供しています。

```python theme={null}
from pydantic import dataclass, EmailStr

@dataclass
class Person:
    name: str
    age: int
    email: EmailStr
```

## この記事は役に立ちましたか？

* 私たちは可能な限り最良のサポートを提供するため、細心の注意を払ってこのコンテンツを作成しました。
  この記事が少しでもお役に立ったなら、ぜひ私たちの活動を応援してください。レビューを残していただけると、あなたにとって何が最も重要かを理解する助けになります。

<CardGroup cols={2}>
  <Card title="Google レビュー" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Google レビューにあなたのレビューを残してください。
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Trustpilot にあなたのレビューを残してください。
  </Card>
</CardGroup>
