Laravelでは、フォームから送信されたデータに対して簡潔かつ強力なバリデーション機能を利用することができます。この記事では、基本的なバリデーションルールの使い方と、より柔軟なバリデーションを実現するためのカスタムルールの作成方法について解説します。
Laravelのバリデーションの基本
Laravelでは、validateメソッドを使ってリクエストデータを検証することができます。もっとも一般的なのが、コントローラー内で以下のように記述する方法です。
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'age' => 'nullable|integer|min:18',
]);
// バリデーション通過後の処理
}
この例では、name、email、ageの各フィールドに対して、複数のルールをパイプ(|)でつなげて定義しています。バリデーションに失敗した場合、自動的に前のページにリダイレクトされ、エラーメッセージがセッションに格納されます。
よく使われるバリデーションルール一覧
Laravelが提供する主なルールには以下のようなものがあります。
- required: 必須項目
- string: 文字列であること
- integer: 整数であること
- email: メールアドレス形式
- unique: 一意であること(例: unique:users,email)
- min: 最小値または最小文字数
- max: 最大値または最大文字数
- confirmed: 同名フィールドとの一致確認(例: password と password_confirmation)
これらを組み合わせることで、柔軟かつ安全な入力チェックが可能です。
フォームリクエストによるバリデーションの分離
バリデーションロジックをコントローラーから分離したい場合は、Laravelの「フォームリクエスト」を活用します。以下のようにコマンドでリクエストクラスを作成します。
php artisan make:request StoreUserRequest
生成されたクラス内のrulesメソッドでバリデーションを定義し、コントローラーで型を指定するだけで自動的にバリデーションが実行されます。
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
];
}
カスタムバリデーションルールの作り方
Laravelでは、標準のルールでは対応できないケースに対して、独自のバリデーションルールを定義することができます。
まずは artisan コマンドでルールクラスを生成します。
php artisan make:rule AlphaSpace
生成されたapp/Rules/AlphaSpace.phpを編集します。
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class AlphaSpace implements Rule
{
public function passes($attribute, $value)
{
return preg_match('/^[\pL\s]+$/u', $value);
}
public function message()
{
return ':attribute には文字とスペースのみを含めてください。';
}
}
この例では、文字(アルファベット・日本語)とスペースのみを許可するルールです。
コントローラーでの使用方法は以下のとおりです。
use App\Rules\AlphaSpace;
$request->validate([
'name' => ['required', new AlphaSpace],
]);
カスタムエラーメッセージの設定
デフォルトのメッセージでは不十分な場合、エラーメッセージをカスタマイズすることも可能です。
$request->validate([
'email' => 'required|email',
], [
'email.required' => 'メールアドレスは必須です。',
'email.email' => '正しいメールアドレス形式で入力してください。',
]);
複数言語対応が必要な場合は、resources/lang/ja/validation.phpを編集することで、アプリ全体に適用される翻訳ファイルとして活用できます。
まとめ
Laravelのバリデーションは、シンプルながら非常に柔軟な設計となっており、バリデーションルールの基本からフォームリクエスト、さらにはカスタムルールまで対応可能です。バリデーションの設計を丁寧に行うことで、ユーザー体験の向上やセキュリティ対策にもつながります。