はじめに
- この記事では、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 にあなたのレビューを残してください。

