FormValidator::Simple::Plugin::V8 - バリデーションルールをサーバー/クライアントで共有するためのモジュール

cho45
2011-12-17

前置き

こんにちは。cho45 です。もう本当に年末ですね。みなさん、意識は高まっていますか? 僕は年末に向けて下がりつつあります。それはともかく、今回は FormValidator::Simple::Plugin::V8 というモジュールを紹介させて頂きます。

ウェブアプリケーションを開発するとき、だいたいの場合、サーバーサイドで入力にバリデーションをかけますよね。そんなとき便利な FormValidator::Simple というモジュールがあり、こちらはみなさんご存知かと思います。さらに近年ではフォームを submit する前にクライアントサイド JavaScript でリアルタイムでエラーがわかって欲しいとう欲求もときどきあるというのも、ご存知の通りだと思います。

サーバーサイドを Perl、クライアントサイドを JavaScript で実装する場合、バリデーションルールをそれぞれの言語で実装する必要があります。正直だるいですよね? 面倒ですよね? というか両方テスト書くとかダルいよ。

そんなとき活躍するかもしれないのがこのモジュールです。

使いかた

定義

FormValidator::Simple::Plugin::V8 は単体では何もできません。このモジュールを継承して FormValidator::Simple::Plugin を作るところからはじまります。

package FormValidator::Simple::Plugin::MyRules;
use FormValidator::Simple::Plugin::V8 'rules.js';

プラグインモジュール自体は以上のような簡素なものです。特になんもしてません。rules.js に実際のバリデーションルールを JavaScript で記述していきます。

// This is rules.js
rule("NUMBER", function (str) {
	str = String(str);
	return (/^\d+$/).test(str);
});

以上のように rule() 関数を使ってバリデーションルールを定義していきます。第一引数がバリデーションルール名、第二引数はバリデーションする関数で、引数にバリデートする値を受け、true (バリデーションOK) または false (バリデーションNG) を返します。

使用

あとは、普通の FormValidator::Simple::Plugin と同じように使うだけです。

use FormValidator::Simple qw/MyRules/;

my $result = FormValidator::Simple->check( ... );

簡単でしょ?

インストール

JavaScript::V8 を使っていますので、うまいことそのモジュールを先にインストールする必要があります。幸い JavaScript::V8 の POD は親切なので、読んだ通りやればうまくいきそうです。とはいえ、永遠にうまくいくとは限らないので、やはりこのへんがこのモジュールを使う際のネックになりそうです。

まとめ

今回は FormValidator::Simple::Plugin::V8 というバリデーションルールをサーバー/クライアントで共有するためのモジュールを紹介しました。現時点で筆者はプロダクション投入したことはありませんが、許される機会があれば使ってみたい気がします。また、HTML5 的な Constraint Validation API に何らかの形で対応とかするとかっこいいですね。