PHP のための柔軟なスキーマ検証ライブラリ構築

背景と目的

PHP開発において、入力データの検証は避けて通れない作業です。必須項目、データ型、最大長、メール形式など、さまざまなバリデーションが必要になる場面は日常的です。既存のフレームワークには検証機能が備わっていますが、軽量なプロジェクトや構造化されたデータを検証したい場面では、柔軟性に欠けると感じることがありました。

そのため、私は以下のような要件を満たす検証ライブラリを作成しました:

  • フレームワークに依存しない
  • 宣言的なルール記述
  • 柔軟な拡張性
  • シンプルなコア設計

ライブラリ概要

本ライブラリの特徴は次の通りです:

  1. ルール駆動型:検証ルールを配列で表現
  2. プラガブル構造:各検証ルールは独立したクラス
  3. 依存なし:どの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 によるスキーマ記述サポート

タグ: PHP バリデーション ライブラリ設計 拡張性 カスタムルール

7月10日 19:38 投稿