Skip to main content

はじめに

  • この記事では、pydantic を使ったデータ検証について解説します。pydantic は、検証のコア (pydantic-core) が Rust で書かれた Python ライブラリです。例では pydantic v2 を使用します。
  • はじめる前に、お使いの環境に Python と pydantic ライブラリがインストールされていることを確認してください。pydantic のインストールコマンドは以下のとおりです。

モデルの作成

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

モデルの使用

  • 作成できたので、クラスをインスタンス化します。データを含む辞書を作成し、それをクラスに展開して渡します。
  • 上記の例では、すべての フィールド が正しい型になっているため、エラーは発生しません。pydantic はデフォルトで互換性のある値も変換します。age が文字列 "19" の場合は、整数 19 になります。次に、検証が機能することを確認するために、誤ったデータを渡します。
  • 上記の例では、age は 整数 である必要があり、"nineteen" は整数に変換できないため、ValidationError が発生します。
  • エラーでプログラムを止めずに処理するには、try/except で捕捉します。errors() メソッドで、無効なフィールドを 1 つずつ確認できます。

strict モード

  • "19" のような文字列も拒否したい場合は、モデルで strict モードを有効にします。すると age は本物の int しか受け付けなくなり、Person(name="John", age="19", email="john@example.com") は ValidationError を発生させます。

dataclass の作成

  • pydantic を使って dataclass を作成することもできます。これは標準の Python の dataclass に似ていますが、BaseModel と同じようにフィールドを検証します。
  • age に文字列 "19" を渡すと、int の 19 に変換されます。
Pydantic は再帰的な検証をサポートしています。つまり、ネストされたモデルを検証する際には、内部のモデルも検証します。あるクラスが Person のリスト people: list[Person] を持つ場合、pydantic はリスト内の各項目をチェックし、それぞれを Person に変換します。

その他

  • Pydantic には、e-mail の検証やフォールバック用の timezone パッケージなどの追加機能があります。これらをインストールするには、次のコマンドを実行します。
  • 次のコマンドを実行すると、両方を一度にインストールできます。
  • pydantic[email] は EmailStr 型を追加します。この型は user@domain.tld の形式を検証し、アドレスを正規化します。

起動時に環境変数を検証する

  • ボットや API は、トークンや設定を環境変数から読み込みます。pydantic-settings を使うと、変数がない、または無効な場合に、リクエストの処理中に後から失敗するのではなく、起動時にわかりやすいエラーでアプリケーションを停止できます。
  • アプリケーションが必要とする変数を、BaseSettings を継承したクラスで宣言します。各フィールドは、大文字と小文字を区別せずに同じ名前の環境変数を読み込みます。discord_token は DISCORD_TOKEN を読み込みます。
settings.py
  • DISCORD_TOKEN が設定されていない場合、Settings() は discord_token について Field required というメッセージの ValidationError を発生させます。port は整数でなければならないため、PORT=abc のような値も同じように失敗します。
  • SecretStr は、設定を print したりログに出力したりするときにトークンを隠します。実際の値は settings.discord_token.get_secret_value() で読み込みます。
  • Square Cloud では、ダッシュボードまたは squarecloud app env set で変数を設定し、requirements.txt に pydantic-settings を記載してください。環境変数を参照してください。

次のステップ

環境変数

設定クラスが読み込む変数を設定します。

FastAPI

pydantic でリクエストを検証する API をデプロイします。

Discord ボット

環境変数からトークンを読み込むボットをホストします。

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

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

Google レビュー

Google レビューにあなたのレビューを残してください。

Trustpilot

Trustpilot にあなたのレビューを残してください。