排他的境界値 — exclusiveMinimum/exclusiveMaximumの使い方

JSON Schemaの exclusiveMinimum と exclusiveMaximum を使用して、境界値を含まない範囲制約を定義する方法を解説します。

Number Constraints

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "temperature": {
      "type": "number",
      "exclusiveMinimum": -273.15,
      "description": "Temperature in Celsius (above absolute zero)"
    },
    "opacity": {
      "type": "number",
      "exclusiveMinimum": 0,
      "exclusiveMaximum": 1,
      "description": "Opacity value, strictly between 0 and 1"
    },
    "age": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 150
    }
  },
  "required": ["temperature"]
}

Test Data

{
  "temperature": 22.5,
  "opacity": 0.75,
  "age": 30
}

詳細な説明

JSON Schemaでは exclusiveMinimumexclusiveMaximum を使用して、境界値自体を除外した範囲制約を定義できます。これは数学における開区間に相当します。

minimum/maximum との違い:

  • minimum: 0 — 0以上(0を含む)
  • exclusiveMinimum: 0 — 0より大きい(0を含まない)
  • maximum: 100 — 100以下(100を含む)
  • exclusiveMaximum: 100 — 100未満(100を含まない)

Draft 4と Draft 6以降の違い:

JSON Schema Draft 4では exclusiveMinimum はboolean値(true/false)でしたが、Draft 6以降では数値を直接指定する形式に変更されました。現在の推奨はDraft 6以降の形式です。

例えば、確率値のバリデーションでは exclusiveMinimum: 0, exclusiveMaximum: 1 とすることで、0より大きく1未満の値のみを許可できます。

ユースケース

確率値、除算の分母(0を除外)、温度の物理的限界値など、境界値自体を除外する必要がある数値制約で使用します。

試してみる — JSON Schema Validator

フルツールを開く