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スキーマパターンは、遅くてコストの高いクラウドデプロイサイクルの前に、ローカル検証でフォーマット違反を検出します。

試してみる — JSON to YAML Schema

フルツールを開く