【PHPライブラリ開発】vlucas/valitronをつかった、バリデーション機能つきメールフォーム作ってみる
| 更新: 2025/08/28 | 2907文字
今回はPHPライブラリを使った開発で、webサイト/webアプリケーションにおいて重要な『フォームのバリデーション』を行ってみます。導入するライブラリは『vlucas/valitron』です。わりとシンプル&直感的に使えそうな気がしました。さっそく、概要・インストール・実際のコード・動作例を確認していきましょう。
目次
vlucas/valitronとは?インストール方法は?
vlucas/valitronとは?
リポジトリのドキュメントによると、『シンプルで実用的な検証ライブラリ』『軽量コード』『フレームワークの大規模なコンポーネントに依存し、検証には必要のない大量の追加ファイルを読み込んでしまう他の検証ライブラリへの不満から生まれた』とあります。
『required(必須)』『numeric(数字)』『equals(別のフィールドと一致)』『email(メール形式)』『regex(正規表現)』といった、よくつかわれる検証ルールも組み込まれています(詳しくはリポジトリを見てみてください)。
実際に使ってみたところ、わりと直感的に使える印象で、実質的なライブラリファイルはValidator.php(45Kb)ひとつのシンプル構成でわかりやすいと思います。
vlucas/valitronリポジトリ
https://github.com/vlucas/valitron
vlucas/valitronインストール方法(ローカル・xampp環境)
というわけで、さっそくvalitronをインストールしてみます。管理人のローカル・xampp環境でcomposerコマンドを使います。cd で作業ディレクトリを今回作ったディレクトリ(2025-07-vl)に移動し、composer require。
composer require vlucas/valitron
コマンドプロンプト。こんな感じでインストールされました。
インストールディレクトリにcomposer系のファイルのほか、vendorができていて、この中にvlucas/valitronが入っています。ロードするときは『require 'vendor/autoload.php';』ってやりますけど、1ファイルだけなので直接requireしても使えそう。
このほかフォーム表示するindex.phpと、バリデーションを行うformValidate.phpを作成しました。
vlucas/valitronのバリデーション用コード
フロント部分(フォーム・index.php)
フォームはこんな感じで作成。バリデーションだけなのでメール送信ファンクションは入れませんでした。項目とバリデーション内容は以下の通りです。
| 名前 | 漢字、アルファベット〇、記号など×。 空白×。 |
|---|---|
| ふりがな | ひらがなのみ〇。 そのほか文字は×。 |
| メールアドレス | メルアド形式なら〇。 空白×。 |
| カテゴリ | ラジオボタンの項目のみ〇。 空白×だが初期値が指定されている。 |
| お問い合わせ内容 | 空白×。1024文字以内。 文章に日本語を含めないと×. |
フロント・フォーム部分のコードは以下の通り。サーバーサイドでのバリデーションのみ行いたかったので、フォーム要素に『novalidate(フロントバリデーションしない)』をつけています。
formValidate.phpをrequireして空変数を定義。new formValidate($_POST)でインスタンスに。isSubmitted()で送信判定。validate()でokならバリデーションokメッセ出力で、okでない場合エラー取得。
フォーム内では$form->valueで送信後の値セット。それぞれの項目にエラーがあった場合はメッセージ出力、というような処理になっています。
バリデーション処理部分(formValidate.php)
実際のバリデーション処理とか、バリデーションルールが書いてあるコードです。vendor/autoload.phpでロードしていますが、ライブラリはこれしか使わないみたいなときは、本体をコピーして直接読み込めるかも。前半は変数の定義とかコンストラクタです。
コンストラクタでは言語や初期値設定するほか、バリデーションルールとメッセージを定義しています。『ひらがなだけ』『日本語を含める』みたいなのは、正規表現マッチ(preg_match)を入れると判定できます。メッセージもルールごとに定義でき、矢印でつながっているので直感的にわかりやすい印象。
後半では『送信したか』『バリデーション』『エラー取得』『入力した値の保持と出力』『チェック状態の保持』『ラジオボタン用にカテゴリが入った配列を返す』といったメソッドが組み込まれています。
バリデーションを行ってみた例
それでは、さっそくフォームから送信してみましょう。まずは『全部空の状態』で送信。
ラジオボタンは初期値がセットされるので空にはならないんですけど、他の項目はこんな感じでメッセージがでます。
次のテストです。
『記号が入っている無効な形式の名前』『ひらがな必須の項目にカタカナ』『正しくない形式のメールアドレス』『テキストエリアの文字数オーバー』も判定ok。
そして、海外からのスパム判定に使いそうな『日本語文字を含める。』
パターン『/[\p{Hiragana}\p{Katakana}\p{Han}]/u』がハネてくれました。geminiかgptにきいたらでてきたやつだと思います。昔は『あ』『ん』とか、漢字の最初と最後の文字をハイフンでつなぐようなパターン使ってた気がします。
バリデーション通過した場合は
okメッセージが出力されます。
あとがき・まとめ
- vlucas/valitronはシンプルで直感的に使えるバリデーション用のライブラリである
- バリデーション用クラスを作って、ルールやメッセージ・メソッドを指定していくような流れ
- なんだかんだいってpreg_matchのパターンを使いこなせればより有効
まとめると、こんなところでしょうか。構成もシンプルでファイルサイズもあまり大きくないし、フォームのバリデーションを一からしっかり作るのは大変なので、検討してみてもよさそうです。
【カテゴリ】- PHP
【タグ】- PHPライブラリ, メールフォーム