変更履歴
このファイルは git tag・コミット履歴・バージョン更新コミットをもとに再構成した変更履歴です。
v1.0.0〜v1.2.0はリポジトリ内のタグを基準に整理しています。1.2.1はsrc/validkit/__init__.pyの__version__ = "1.2.1"と 2026-03-07 の関連コミットを基準に整理しています(現時点で対応タグは未確認)。- 変更点は読みやすさのために
Added/Changed/Fixedに要約しています。
[1.3.3dev1] - 2026-07-05
Changed
- クラス記法スキーマの変換結果をキャッシュし、同じクラススキーマを繰り返し検証する通常パスのオーバーヘッドを削減しました。
- コンパイル済みスキーマのPython経路では、戻り値と入力値の aliasing を避ける互換性テストを追加しました。
- Pydantic との比較ベンチマークを踏まえ、ホットパス最適化と将来的なネイティブ実装検討に向けた計画を整理しました。
- 実験的な Rust/PyO3 ネイティブ検証コア
validkit-py-coreを追加し、対応可能な pure dict/list/str/int/float/bool スキーマではcompile(...).validate(...)が起動時判定済みのネイティブ経路を使えるようにしました。 - ネイティブ経路は性能を優先し、出力形状の変換が不要な成功ケースでは検証済みの入力オブジェクトをそのまま返すゼロコピー寄りの動作にしました。
- ネイティブ拡張が無い環境、
VALIDKIT_DISABLE_NATIVE=1、未対応機能、partial/base/migrateでは従来のPython経路へ自動フォールバックするようにしました。 - ネイティブコアで排他的な数値境界とリスト長制約を検証できるようにしました。
- ベンチマークに
--native-mode auto|python|native|bothを追加し、ネイティブ有無にかかわらずPython経路とネイティブ経路を比較できるようにしました。 ValidationResultにhas_errorsとerror_countを追加し、collect_errors=Trueの詳細なErrorDetailはerrorsアクセス時に遅延生成するようにしました。
Fixed
- Rustブリッジで未対応の排他的数値境界とリスト長制約を誤ってネイティブ処理せず、Python互換の検証へ戻すようにしました。
[1.3.2] - 2026-07-04
Changed
- コンパイル済みスキーマの通常検証パスを高速化し、不要なエラーリスト生成とキーワード引数呼び出しを避けるようにしました。
- コンパイル時にクラススキーマの復元方法を判定し、dataclass /
NamedTuple変換時の実行時判定を削減しました。 - dict スキーマの生成コードを最適化し、成功パスでの余分なフラグ分岐、辞書参照、トップレベル path 計算を減らしました。
baseが無い通常ケースで、欠損補完用の空 dict 生成を避けるようにしました。- コンパイル済みスキーマで通常検証用と
collect_errors=True用の生成関数を分け、実行モードごとの分岐を減らしました。 - コンパイル済みスキーマの非収集パスで、内部呼び出しを位置引数ベースにして呼び出しオーバーヘッドを削減しました。
Fixed
- コンパイル済みの入れ子 dict スキーマで
baseの子要素が再帰先に渡らず、partial=Trueや.when(...)のスキップ時に既存値を補完できない問題を修正しました。
[1.3.1] - 2026-07-03
Added
v.list(...)に.min(length)/.max(length)/.length(length)を追加し、要素数を検証できるようにしました。- 数値バリデータの
.min()/.max()にexclusive=True、.range()にexclusive_min=True/exclusive_max=Trueを追加しました。 - dataclass と
NamedTupleをクラススキーマとして渡した場合、検証済みのインスタンスを返すようにしました。 benchmarks/benchmark_validation.pyを追加し、通常のvalidate()とcompile(...).validate()の速度を依存なしで比較できるようにしました。- ValidKit 用の VitePress ドキュメント生成スクリプトと日英ドキュメントを整備しました。
Changed
Schema.generate_sample()がリストの最小要素数と数値の排他的境界を考慮して、有効なサンプルを生成するようになりました。- dataclass の
default_factoryを欠損値の補完に使用し、init=Falseフィールドは入力スキーマから除外するようにしました。 - dataclass /
NamedTupleの partial 検証は、必須コンストラクタ引数が不足し得るため従来どおり辞書を返します。 - GitHub Actions の CI / Security / docs preview / deploy ワークフローを ValidKit 用に整理し、GitHub Pages の
validkit.disnana.com配置に合わせました。
Fixed
- 排他的な上下限が同値で、有効値が存在しない数値範囲を定義時に拒否するようにしました。
- 新規コードに含まれていた末尾空白とスタイル上の問題を修正しました。
- コンパイル済みスキーマで入れ子の
v.list(...)/v.dict(...)を検証したとき、一時変数の衝突により結果が壊れる問題を修正しました。 env(..., decryptor=...)を含むコンパイル済みスキーマが、復号失敗をcollect_errors=Trueで扱うと生成コードの構文エラーになる問題を修正しました。- フォールバック検証される特殊バリデータで
.custom(...)が二重実行される問題を修正しました。
[1.3.0dev2] - 2026-03-31
Changed
- .env(key, decryptor=None) 入力データが欠損している場合に、指定した環境変数から値を自動補完します。必要に応じて
decryptor引数に関数を渡すことで、取得した値を復号(または加工)してから検証できます。 - decryptor 引数の詳細
decryptorに渡す関数は(value: str) -> Anyのシグネチャを持つ必要があります。これにより、環境変数から取得した文字列を検証前に任意の型へ変換・復号することが可能です。
[1.3.0dev1] - 2026-03-31
Added
- すべてのバリデータで利用可能なセキュリティ・開発体験向上メソッドを追加しました。
.secret(): バリデーションエラー時に元の入力値を例外メッセージからマスク (***) する機能を追加しました。.env(key): 入力データが欠損している場合に、指定した環境変数(例:os.environ[key])から値を自動補完する機能を追加しました。.error_msg(msg): 検証エラー時のメッセージを、開発者が指定した独自のメッセージに上書きできる機能を追加しました。
- 新しいバリデータクラスを追加しました。
v.url(): URL フォーマットを検証します。チェインメソッドで特定のスキーム (.schemes())、ドメイン (.domains())、サブドメイン (.subdomains())、パス (.paths())、必須クエリパラメータ (.query_keys()) に制限可能です。v.enum(enum_cls): Python 標準のenum.Enumとのシームレスな統合。.coerce()で文字列から自動的に Enum インスタンスへ変換します。
[1.3.0dev0] - 2026-03-31
Added
- ライセンス認証システム向けの高度なバリデータ群を追加しました。
v.datetime(): 日時 (datetime.datetime/datetime.date) の検証、および.after_now()/.before_now()による期限チェックに対応しました。v.uuid(): UUID 形式の検証、および.version(n)によるバージョン制限をサポートしました。v.mac(): MAC アドレス形式 (00:11:22...) の検証に対応しました。v.sid(): Windows Security Identifier (SID) 形式 (S-1-5-21-...) の検証に対応しました。v.hwid(): 汎用ハードウェア ID を検証するバリデータを追加しました。.length(n)や.hex()で制限可能です。v.ip(): IP アドレス (IPv4/IPv6) の検証、および.v4_only()/.v6_only()によるプロトコル特定に対応しました。v.snowflake(): Discord Snowflake ID の検証に対応しました。.coerce()で文字列から整数への自動変換をサポートします。v.version(): Semantic Versioning (SemVer) 形式を検証するバリデータを追加しました。
Fixed
v.datetime()において、タイムゾーンを持つ日時(aware)と持たない日時(naive)を比較した際にTypeErrorが発生する問題を修正しました。入力データのタイムゾーンに合わせて現在時刻を取得および補間するように改善しました。v.ip()において、無効な入力があった場合のエラーメッセージに元の値を表示するように改善しました。
[1.2.3] - 2026-03-15
Added
v.str()で文字列の長さを検証するmin(),max(),range()メソッドを追加しました。- クラス記法スキーマ (
class Config: ...) を追加し、型アノテーションとValidatorクラス属性を既存の dict スキーマ検証経路へ変換できるようになりました。 v.instance(type_cls)/InstanceValidatorを追加し、任意クラスに対するisinstanceベースの検証と.coerce()をサポートしました。
Changed
Schema(...)は実行時に dict スキーマだけでなく class 記法スキーマも直接ラップできるようになりました。- README /
docs/index.md/ 回帰テストをクラス記法スキーマと Python 3.9+ 型ヒント対応に合わせて更新しました。
Fixed
- クラス記法スキーマで
Optional[T]/Union[T, None]が必須扱いになっていた問題を修正しました。 typing.Union/ PEP 604 (T | None) のうち、None以外の複数メンバーを持つ型がサイレントにパススルーされる問題を修正し、明示的にTypeErrorを送出するようにしました。- Python 3.9 で
types.UnionTypeや_UnionType: type | Noneに起因する import / 実行時エラーが発生しないよう互換性を改善しました。 InstanceValidator.coerce()が元例外を失っていた問題を修正し、例外チェーンを保持するようにしました。
[1.2.1] - 2026-03-07
Added
v.auto_infer(data, type_map=None, schema_overrides=None)を追加し、既存データから ValidKit スキーマを逆生成できるようになりました。type_mapによるカスタム型対応を追加しました。callable がValidatorを返す場合はそのまま使い、プリミティブ値を返す場合は変換後の値で再推論できます。schema_overridesにより、トップレベルの dict フィールドを明示的なバリデータで上書きできるようになりました。
Changed
v.auto_infer()の型ヒントと回帰テストを拡充し、mypy / IDE で扱いやすい API に整理しました。- ドキュメントとサンプルを
auto_infer()・schema_overrides・generate_sample()の現在仕様に合わせて更新しました。
Fixed
schema_overridesがネストした dict やリスト要素に漏れて適用される問題を修正しました。type_mapの callable による再推論時にschema_overridesが意図せず伝播する問題を修正しました。NumberValidator.range()でmin > maxの不正な境界を定義時にValueErrorとして拒否し、.min()/.max()との組み合わせでも矛盾を防ぐようにしました。Schema.generate_sample()が生成候補を各バリデータで再検証するようになり、regex()やcustom()を満たせない不正なサンプルを返さずValueErrorを送出するようになりました。
[1.2.0] - 2026-02-27
Added
- すべてのバリデータに
.default(value)を追加しました。欠損キーを自動補完し、設定したフィールドは自動的に optional として扱われます。 - すべてのバリデータに
.examples(list)を追加しました。サンプル生成やドキュメント補助に使える例を保持できます。 - すべてのバリデータに
.description(text)を追加しました。フィールドの説明文を保持できます。 Schema.generate_sample()を追加しました。スキーマからサンプルデータを再帰的に生成でき、優先順位は.default()→.examples()[0]→ 型ごとの代表値です。
Changed
example.pyとドキュメントを更新し、新しい補完・サンプル生成 API を反映しました。- 型チェック関連の修正を行い、公開 API の利用時に静的解析しやすくしました。
[1.1.3] - 2026-02-27
Added
- 各型バリデータの coercion(自動型変換)を実装しました。
- 型変換の挙動を検証する専用テストを追加しました。
validkitパッケージ初期化を整備し、主要な関数・クラスをトップレベルから import できるようにしました。
[1.1.2] - 2026-02-27
Added
- 宣言的なスキーマ定義によるバリデーションライブラリ本体を実装しました。
- カスタムルールを含む基本的な検証機能を追加しました。
[1.1.1] - 2026-02-27
Changed
example.pyを更新し、利用例を見直しました。
Fixed
- 軽微な不具合を修正しました。
[1.1.0] - 2026-02-27
Added
Schema[T]ジェネリックラッパーを追加し、validate()の戻り値を IDE / 型チェッカーがより正確に推論できるようにしました。validate()に型補完向けのオーバーロードを追加し、TypedDict と組み合わせた補完体験を改善しました。
Changed
- 実行時に不要なオーバーロード定義を
TYPE_CHECKING配下へ移し、静的解析向けの実装に整理しました。 1.1.0へバージョンを更新し、Schema[T]を公開 API として位置づけました。
[1.0.2] - 2026-01-24
Added
SECURITY.mdを追加し、セキュリティポリシーを整備しました。
Changed
SECURITY.mdの日英構成と書式を整理しました。- ライセンス表記まわりの説明を見直しました。
[1.0.1] - 2026-01-24
Added
- MIT ライセンスを追加しました。
Changed
README.mdに追加情報とバッジを反映しました。
[1.0.0] - 2026-01-24
Added
- CI ワークフローと自動チェック基盤を追加しました。
- パッケージ設定を整備し、最初の公開リリースを作成しました。