JSON Schemaの文字列制約 — minLength、maxLength、pattern
生成されたJSON Schemaに minLength、maxLength、pattern などの文字列制約を追加する方法を学びます。基本的な型チェックを超えた検証を実現します。
Basic Types
詳細な説明
生成されたスキーマへの文字列制約の追加
基本的なジェネレーターは文字列値から "type": "string" を推論しますが、実際のバリデーションではより厳密な制約が必要です。初期スキーマを生成した後、いくつかのキーワードで文字列プロパティを強化できます。
利用可能な文字列キーワード
| キーワード | 目的 | 例 |
|---|---|---|
minLength |
最小文字数 | "minLength": 1 |
maxLength |
最大文字数 | "maxLength": 255 |
pattern |
値が一致すべき正規表現 | "pattern": "^[a-z]+$" |
format |
セマンティックフォーマットのヒント | "format": "email" |
例: ユーザー名フィールドの強化
生成されたプロパティから:
{ "username": { "type": "string" } }
次のように改善できます:
{
"username": {
"type": "string",
"minLength": 3,
"maxLength": 30,
"pattern": "^[a-zA-Z0-9_]+$"
}
}
これにより、ユーザー名が3〜30文字で、英数字またはアンダースコアのみを含むことが保証されます。
format キーワード
format キーワードはアノテーションであり、設定に応じてバリデーターが強制する場合もあります。一般的な値には "email"、"uri"、"date-time"、"uuid"、"ipv4" があります。pattern とは異なり、format はカスタム正規表現を使用せず、バリデーターが認識された各フォーマットに対する組み込みロジックを持っています。
各キーワードの使い分け
- データベースのカラム制限やUIフィールドサイズには
minLength/maxLengthを使用します。 - 値が特定の構文に従う必要がある場合(スラッグ、コード、電話番号など)には
patternを使用します。 - バリデーターが既に理解している既知の型には
formatを使用し、誤った正規表現のリスクを減らします。
これらのキーワードを組み合わせることで、緩い生成スキーマを本番対応のコントラクトに変換し、アプリケーションロジックに到達する前に無効なデータをキャッチできます。
ユースケース
ユーザー登録フォーム、コンテンツ管理API、または自由テキスト入力が特定の長さやフォーマットルールに準拠する必要があるエンドポイントのスキーマを構築する際に文字列制約を適用します。