ひらっちです。
Webプログラミングではどのようなデータが送られてきても正常に動作するよう、入力データの検証が欠かせません。一方で、ユーザがフォームに入力したデータを、JavaScriptを使ってその場で検証して表示できれば、ユーザビリティの向上につながります。
この二つの機能は、データの検証についてはほんんど同じ機能です。しかし、多くの場合、サーバサイドではJavaScriptとは違う言語でプログラミングされているので、共通のコードにすることはできませんでした。
今回私が作成したものは、プログラミング言語に依存しないかたちで検証方法を書くためのライブラリです。まだ機能が絞り込まれていなかったり、足りなかったりしますが、一応動く形になりましたので公開します。
この機能を実現するため、最初はJSONを使っていました。しかし、JSONはある程度を超えた複雑な表現をしようとすると、見た目に煩雑になってしまいます。そこで、この機能を実現するために、まだ仕様が固まっていませんが、JAXON(Javascript Appliable Crosslanguage Object Notation)というデータ記述言語を考えてみました。
JSONが連想配列と配列でデータ構造をあらわすのに対して、JAXONでは関数呼び出しの形でデータ構造をあらわします。今回作成したデータ検証を例にとると:
Validate(input1(IsNumber('must be number')));
このような形です。
input1は、フォームのINPUT要素をあらわすオブジェクトです。 つまり、これは「input1が数値であることを検証する」と読めます(文字列はエラー時のメッセージです)。
また、Validate,input1はそれぞれ、可変長の引数をとります。複数の要素が指定された場合は、すべての要素の検証を行います。
JAXONによるデータ検証の記述は、大まかに次のようになります。
// 入力の記述 Input(入力名1); Input(入力名2); …… // 検証の記述 Validate( // 入力に対して、その引数の検証を行う 入力名(動作(エラーメッセージ, 引数 ...)), // 第一引数の検証が真の場合、第二引数以降の検証を行う when( 入力名(動作(...)), 入力名(動作(...))), ...);
JavaScript版のデモと、PHP版のデモが動くようにしておきました。ダウンロードはこちらです。ライセンスはMIT/Xスタイルです。
今回できなかった機能は、
- 複数の入力の間の関係の検証
- 配列型の入力の検証
- JAXONの拡張のための簡単なインターフェイス
などです。
とくに、JAXONの拡張が容易になれば、Webアプリの多くの部分が親言語に依存しない形で書けるようになるんじゃないでしょうか。