サーバとクライアント両方の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のオーナシップを共有できる長期的なメンテナを募集中だ。