BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AjvがOpenJS Foundationに参加

AjvがOpenJS Foundationに参加

原文(投稿日:2020/08/17)へのリンク

サーバとクライアント両方のJavaScriptアプリケーションで利用可能なJSONスキーマバリデータのAvjが、OpenJS Foundationに参加することになった。先頃MozillaのOpen Source Support (MOSS)プログラムから助成金を受けたAjvは、これによってOpenJSのインフラストラクチャおよび組織による支援も受けて、コントリビュータ数の拡大、より迅速かつ広範な企業への採用というメリットを享受しつつ、新たなJSON Type Definition(JTD)プロポーザルをサポートする開発を行うことができるようになる。

AjvのプロジェクトリーダEvegeny Poberezkin氏は、外部からのサポートを求めた理由を次のように説明する。

現行バージョンのJSON Schema (バージョン8 — draft 2019-09) では、2つのバリデーションパラダイムが大きく変更されています。機能の追加により、実装は非常に複雑になっています — Ajvでこれらの機能を今後も実装するためには、大幅な書き直しが必要なのです。さらに、JSONバリデーションの新たな標準として有望なJSON Tpe Definition(JTD)も登場しています。
Ajvユーザは最新のJSONバージョンのサポートに関心を持っていますが、自分の空き時間を使って実装を続けるのには限界があります — 特に、既存ユーザに迷惑を掛けないマイグレーションの重要性を考えれば、作業量は膨大なものになります。[…]
Ajvは数百万というWebアプリケーションで採用されているので、[OpenJS Foundationの]サポートを受けられるというのは、すべてのユーザに対してAjvの製品寿命と安定性を保証することになります。

Ajvには100人近いコントリビュータが集まっているが、Ajvの開発のほとんどは一人の開発者がサポートしている。

ContraのCTOであるGajus Kuizinas氏は、OpenJSの新メンバについて肯定的にコメントしている。

Ajvは私のオープンソースプロジェクトやビジネスにおいて、データバリデーションロジックすべての中心的存在になっています。仕様に準拠しており、拡張性があり、高速に動作し、素晴らしいサポートがあるからです。AjvがOpenJS Foundationに参加することは、JavaScriptエコシステム全体にとって大きなメリットがあると思います。

"Another JSON Schema Validator"の意味を持つAjvは、5年以上前に開発が開始され、当初はJSON Schema標準バージョン4をサポートしていた。現在はJSON標準のバージョン7をサポートする。カスタムキーワードやプラグインによる拡張も可能で、いくつかのベンチマーク結果では、最も高速なJSON Schemaバリデータのひとつになっている。

JSON (JavaScript Object Notation) は、人が読み書きするのも、マシンが解析および生成するのも容易なことを目標とした、ライトウェイトなデータ交換フォーマットである。目的は、階層データ構造を簡潔に記述できることだ。

JSON Schemaは、JSONドキュメントのアノテーションとバリデーションを行うために使用されるボキャブラリである。その主要な用途は、JSONドキュメントの構造と検証制約を記述することにある。データバリデーションは自動化テストや、クライアントが送信したデータの品質を保証する手段として有効である。

JSON Schemaは現在ドラフトステージにある — 最新バージョンであるdraft-08は、2019年9月に公開されている。JSON Shcemaプロジェクトでは、4つのドラフトシリーズすべてをRFCステータスとした上で、公式標準となる」ことを目標としている。

スキーマの例は次のようなものだ。

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A representation of a person, company, organization, or place",
  "type": "object",
  "properties": {
    "fruits": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

このスキーマを満足するデータの例は次のとおりである。

{
  "fruits": [ "apple", "orange", "pear" ],
  "vegetables": [
    {
      "veggieName": "potato",
      "veggieLike": true
    },
    {
      "veggieName": "broccoli",
      "veggieLike": false
    }
  ]
}

AjvはMITオープンソースライセンスで公開されていて、コントリビュータを歓迎している。Ajvのコアコントリビュータは現在、Ajvのオーナシップを共有できる長期的なメンテナを募集中だ。

この記事に星をつける

おすすめ度
スタイル

BT