0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの「バリデーションは多分大丈夫」って、たぶんそういう意味じゃない

0
Posted at

この記事は 「Pythonって、たぶんそういう意味じゃない」シリーズ の第10弾です。
Python歴5年以上、メインで使い続けてきた変態が書いています。

この記事は 個人の経験に基づくポエムです。
環境・用途・経験によって異なる場合があります。

Discordボットの設定ファイルを辞書で読み込んでいた。

config = json.load(open("config.json"))
level = config["レベル"]  # 多分int

「多分大丈夫でしょ」と思っていた。
バリデーションなんて大げさじゃないか、と。

でもその「多分」が積み重なると、どこかで必ず壊れる。

Pydanticを試した。重かった。

バリデーションをちゃんとやろうと思ったとき、
まずPydanticを試した。

from pydantic import BaseModel

class Config(BaseModel):
    レベル: int
    通知: bool

強力だった。でも、設定ファイルを検証したいだけなのに、クラス定義が必要だった。

日本語のキーを扱おうとすると一手間かかる。
Discordボットの小さな設定ファイルにPydanticはオーバースペックに感じた。

Pydanticが悪いわけじゃない。
「設定ファイルのバリデーションに特化した、もっと軽いものが欲しかった」という話だ。

だから作った

それがValidKitだ。

pip install validkit-py

辞書がそのままスキーマになる。クラス定義は不要。
日本語キーにも完全対応している。

from validkit import v, validate, ValidationError

SCHEMA = {
    "ユーザー名": v.str().regex(r"^\w{3,15}$"),
    "レベル": v.int().range(1, 100),
    "設定": {
        "通知": v.bool(),
        "言語": v.oneof(["日本語", "English"]).optional()
    }
}

data = {
    "ユーザー名": "nana_kit",
    "レベル": 50,
    "設定": {"通知": True}
}

try:
    validated = validate(data, SCHEMA)
except ValidationError as e:
    print(f"エラー: {e.path} - {e.message}")

「辞書の形がそのままスキーマになる」というのが一番伝えたいことだ。

Pydanticとの連携も徹底してある

ValidKitはPydanticを否定していない。
むしろPydanticとの連携も徹底して実装してある。

大きなプロジェクトではPydantic、
設定ファイルや小さな検証にはValidKit——
そういう使い分けができる。

  • Pydantic → API・複雑なデータモデル・型補完を徹底したいとき
  • ValidKit → 設定ファイル・Discordボット・辞書ベースの軽い検証

「多分大丈夫」が壊れる前に

バリデーションなしの辞書アクセスは、
エラーが出たときに「どこが」「何が」おかしいかわからない。

ValidKitはエラーが起きたパスとメッセージを丁寧に返す。

# エラー発生箇所: 設定.通知 - bool型が必要です
print(f"エラー発生箇所: {e.path} - {e.message}")

「多分大丈夫」が壊れる前に、スキーマを一枚挟む。
それだけで、デバッグの時間が大幅に変わる。

  • クラス定義不要 → 辞書スキーマをそのまま使える
  • 日本語キー対応 → 設定ファイルを日本語で書ける
  • Pydantic連携 → 既存プロジェクトとも共存できる
  • エラー箇所の特定 → どこが壊れたかがすぐわかる

「バリデーションは多分大丈夫」は、大丈夫じゃなかったときに気づく。

気づく前に試してほしい。


「Pythonって、たぶんそういう意味じゃない」 シリーズでは、
こういう"なんとなくで語られがちなPython"を言語化していきます。

👉 ストックをフォローしておくと次の記事を見逃しません!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?