JavaScript 逆引き集 | JSON Schema でバリデーション(AJV 等)

JavaScript JavaScript
スポンサーリンク

JSON Schema でバリデーション(AJV ライブラリ)

Web アプリや API では「受け取ったデータが正しい形かどうか」をチェックする必要があります。
そこで便利なのが JSON SchemaAJV ライブラリです。
初心者は「JSON Schema = データの型やルールを定義する設計図、AJV = その設計図でデータをチェックする先生」と覚えると理解しやすいです。


基本のコード例

import Ajv from "ajv";

const ajv = new Ajv();

// スキーマ(データのルール)
const schema = {
  type: "object",
  properties: {
    id: { type: "number" },
    name: { type: "string" }
  },
  required: ["id", "name"], // 必須項目
  additionalProperties: false // 余計なプロパティ禁止
};

// データ
const data = { id: 1, name: "Aki" };

// バリデーション
const valid = ajv.validate(schema, data);

console.log(valid); // → true
console.log(ajv.errors); // → null
JavaScript
  • schema → データの形を定義する JSON Schema。
  • ajv.validate(schema, data) → データがスキーマに合っているかチェック。
  • 結果true なら OK、false ならエラー。

よく使うテンプレート集

文字列の長さを制限

const schema = {
  type: "string",
  minLength: 3,
  maxLength: 10
};
JavaScript

数値の範囲を制限

const schema = {
  type: "number",
  minimum: 0,
  maximum: 100
};
JavaScript

配列の要素を制限

const schema = {
  type: "array",
  items: { type: "string" },
  minItems: 1,
  uniqueItems: true
};
JavaScript

ネストしたオブジェクト

const schema = {
  type: "object",
  properties: {
    user: {
      type: "object",
      properties: {
        id: { type: "number" },
        name: { type: "string" }
      },
      required: ["id", "name"]
    }
  }
};
JavaScript

例題: ユーザー登録データのチェック

import Ajv from "ajv";

const ajv = new Ajv();

const schema = {
  type: "object",
  properties: {
    username: { type: "string", minLength: 3 },
    age: { type: "number", minimum: 18 }
  },
  required: ["username", "age"]
};

const data = { username: "Mi", age: 16 };

const valid = ajv.validate(schema, data);

if (!valid) {
  console.log("エラー:", ajv.errors);
} else {
  console.log("OK!");
}
JavaScript
  • 効果: ユーザー名が短すぎたり、年齢が 18 未満ならエラーになる。

実務でのコツ

  • API の入力チェックに最適: サーバー側で受け取った JSON を Schema で検証。
  • フロントでも使える: フォーム入力チェックに利用可能。
  • エラー内容をユーザーに返す: ajv.errors を整形して「どこが間違っているか」を表示。
  • additionalProperties: false を活用: 不要なデータを防ぐ。

練習問題(商品データのバリデーション)

const schema = {
  type: "object",
  properties: {
    id: { type: "string" },
    price: { type: "number", minimum: 0 },
    tags: {
      type: "array",
      items: { type: "string" }
    }
  },
  required: ["id", "price"]
};

const data = { id: "p1", price: -100 };

const valid = ajv.validate(schema, data);
console.log(valid); // → false
console.log(ajv.errors); // → エラー内容が表示される
JavaScript

直感的な指針

  • JSON Schema = データの設計図。
  • AJV = 設計図に従ってデータをチェックする先生。
  • ajv.validate(schema, data) で簡単に検証できる。
  • 初心者は「文字列」「数値」「配列」「オブジェクト」から練習すると理解が深まる。

これを覚えれば「受け取ったデータが正しいかどうか」を自動でチェックできるようになり、API やフォームの安全性がぐっと高まります。

タイトルとURLをコピーしました