背景と目的
PHP開発において、入力データの検証は避けて通れない作業です。必須項目、データ型、最大長、メール形式など、さまざまなバリデーションが必要になる場面は日常的です。既存のフレームワークには検証機能が備わっていますが、軽量なプロジェクトや構造化されたデータを検証したい場面では、柔軟性に欠けると感じることがありました。
そのため、私は以下のような要件を満たす検証ライブラリを作成しました:
- フレームワークに依存しない
- 宣言的なルール記述
- 柔軟な拡張性
- シンプルなコア設計
ライブラリ概要
本ライブラリの特徴は次の通りです:
- ルール駆動型:検証ルールを配列で表現
- プラガブル構造:各検証ルールは独立したクラス
- 依存なし:どのPHPプロジェクトにも導入可能
インストール方法
composer require hejunjie/schema-validator
基本的な使用例
use Hejunjie\SchemaValidator\Validator;
use Hejunjie\SchemaValidator\Exceptions\ValidationException;
$data = [
'name' => '山田太郎',
'age' => 25,
'email' => 'invalid-email',
];
// 日本語チェックルールの追加
Validator::extend('japanese', function ($field, $value) {
return preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $value);
});
try {
Validator::validate($data, [
'name' => ['japanese', 'string', 'minLength:2'],
'age' => ['integer', 'between:18,60'],
'email' => ['required', 'email'],
]);
echo "検証成功 ✅";
} catch (ValidationException $e) {
echo "検証失敗 ❌" . PHP_EOL;
print_r($e->getErrors());
}
組み込み検証ルール
現在サポートされている検証ルールは以下の通りです:
- 型チェック: string, integer, boolean, array, object, float, numeric
- 比較系: min, max, between, length, min_length, max_length, gt, lt, gte, lte
- フォーマット検証: email, mobile, url, ip, json, alpha, alpha_num, alpha_dash
- 論理チェック: required, accepted, declined
- 文字列検証: starts_with, ends_with, contains
カスタムルールの追加方法
use Hejunjie\SchemaValidator\Validator;
// カスタムルールの定義
Validator::extend('japanese', function ($field, $value) {
return preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $value);
});
定義後は以下のように利用できます:
Validator::validate($data, [
'name' => ['japanese'],
]);
プロジェクト情報
GitHub リポジトリ:https://github.com/zxc7563598/php-schema-validator
Star や Issue の報告、Pull Request も歓迎します!
今後の予定
- 多言語エラーメッセージ対応
- Laravel / Webman / Hyperf 向けアダプタ開発
- 追加検証ルール(銀行口座、身分証明書、UUID など)
- YAML / JSON によるスキーマ記述サポート