こんにちは。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 に何らかの形で対応とかするとかっこいいですね。