YAML Schemaで正規表現パターンマッチングを使用する
文字列フォーマットを検証するためにYAML Schemaで正規表現パターン制約を適用する方法を学びます。patternキーワード、動的キーのpatternProperties、URL、メール、semverの一般的なパターンを解説します。
Advanced Patterns
詳細な説明
YAML Schemaのパターンマッチング
patternキーワードは文字列値を正規表現に対して検証します。JSONからYAML Schemaへの変換時、インテリジェントなコンバーターは一般的なフォーマットを検出し、適切なパターンを自動的に適用します。
JSON入力の例
{
"serviceName": "my-api-service",
"version": "2.1.0",
"endpoint": "https://api.example.com/v2",
"apiKey": "sk_live_abc123def456",
"cronSchedule": "0 */6 * * *"
}
パターン付きの生成されるYAML Schema
type: object
properties:
serviceName:
type: string
pattern: "^[a-z][a-z0-9-]*[a-z0-9]$"
description: 小文字英数字とハイフン
version:
type: string
pattern: "^\\d+\\.\\d+\\.\\d+$"
description: セマンティックバージョン(major.minor.patch)
endpoint:
type: string
format: uri
pattern: "^https://"
description: HTTPS URLであること
apiKey:
type: string
pattern: "^sk_(live|test)_[a-zA-Z0-9]+$"
description: 環境プレフィックス付きAPIキー
cronSchedule:
type: string
pattern: "^[\\d*,/-]+ [\\d*,/-]+ [\\d*,/-]+ [\\d*,/-]+ [\\d*,/-]+$"
description: 標準5フィールドcron式
一般的なパターンリファレンス
| 用途 | パターン |
|---|---|
| Semver | ^\\d+\\.\\d+\\.\\d+$ |
| スラッグ / kebab-case | ^[a-z0-9]+(-[a-z0-9]+)*$ |
| UUID v4 | ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$ |
| IPv4アドレス | ^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$ |
| ISO日付 | ^\\d{4}-\\d{2}-\\d{2}$ |
| Dockerイメージタグ | ^[a-z0-9][a-z0-9._/-]*:[a-zA-Z0-9._-]+$ |
動的キーのpatternProperties
命名パターンに従う動的キーを持つJSONの場合:
{
"env_DATABASE_URL": "postgres://...",
"env_API_KEY": "sk_live_...",
"env_LOG_LEVEL": "info"
}
type: object
patternProperties:
"^env_[A-Z_]+$":
type: string
additionalProperties: false
これはパターンに一致するすべてのキーが文字列値を持つことを検証し、他のキーは許可されません。
patternとformatの組み合わせ
endpoint:
type: string
format: uri
pattern: "^https://"
format: uriは一般的なURI構文を検証し、patternはHTTPS要件を追加します。2つの制約は独立して適用されます(両方がパスする必要があります)。
パターンの制限
- YAML SchemaはECMA-262正規表現(JavaScript互換)を使用
- 古いバリデーターでは後方参照がサポートされない
- パターンはデフォルトでアンカーされない -- 文字列全体マッチングには
^と$を使用 - 複雑なパターンはスキーマの可読性を低下させる -- 小さな値セットには
enumを検討
ユースケース
Terraform、Pulumi、CloudFormationなどのInfrastructure-as-Codeツールは、特定のフォーマットに従わなければならない設定値を受け付けます -- Dockerイメージタグ、AWS ARN、Kubernetesラベルなど。YAMLスキーマパターンは、遅くてコストの高いクラウドデプロイサイクルの前に、ローカル検証でフォーマット違反を検出します。