Railsで使えるクライアントサイドのフォームバリデーションライブラリいろいろ

Railsのクライアントサイドでのフォームバリデーションをやる必要があったので、ライブラリをいろいろと見てみた。結果、parsleyを使うことにした。以下、調べたライブラリをちょっとだけ紹介してみる。

client_side_validations

Railsのサーバサイドのバリデーションを元にしてクライアントサイドでのフォームバリデーションを自動で生成してくれる便利Gem。ただ、もうメンテナンスされてないみたい。内部ではかなり複雑な仕組みを使っているようでカスタマイズも難しそうだった。今回はこいつから他のものに乗り換える。

以下はクライアントサイドJSのみでバリデーションを実現するもの。

validate.js

今回見た中では、これが一番シンプルで使いやすかった。

ラップしたGemを探してみたけど見つからなかったので、jsvendor/assets/javascriptsに置いて、app/assets/javascripts/application.jsなどで//=require validateなどとして使う。

このJSはグローバルにFormValidatorというクラスを定義する。これは、素直なJSのクラスなのでカスタマイズも容易な感じ。CoffeeScriptとの相性も悪くない。ただ、デフォルトだとonsubmitのタイミングでのバリデーションにしか対応していないので、もうちょっと機能の豊富なものを探した。

jquery-validation.js

かなり有名なようだけど、下のparsleyに先に決めてしまったので今回は試していない。railsのプラグインもあるので、インストールは容易なよう。

ここに詳しく解説されている。

parsley

今回使うことにしたのがこれ。railsのプラグインもある。

これはできるだけJSを書かずに、HTMLの属性の設定だけでバリデーションの設定を行う指向のもの。デフォルトでバリデーションのロジックも豊富に用意されているが、カスタムのバリデーションは自前でJSで実装しないといけない。ただ、その方法もそんなに難しくない。機能が豊富な分ちょっとカスタマイズが大変だけど、1ページの公式ドキュメントにほとんど必要事項はカバーされている。

開発も活発なので、しばらくはこいつを使っとけばたいていのフォームバリデーションには対応できるんじゃないだろうか。

[追記]

Parsleyってあいつのことか!

Railsのクライアントサイドでのバリデーションについて思うこと

クライアントサイドでのバリデーションはあくまでもサーバの負荷を減らすためのものと考えて、モデルのバリデーションよりも緩めに設定するのがいいのかな、と思う。