フォームリクエストクラスの利用

Laravelの「バリデーションとリクエスト処理」における「フォームリクエストクラスの利用」は、コントローラの中でバリデーションロジックを整理・再利用するための強力な方法です。以下に詳しく説明します。


フォームリクエストクラスとは

フォームリクエストクラス(Form Request Class) とは、Laravelが提供するリクエストバリデーション専用のクラスです。リクエストデータのバリデーションルールと認可ロジックをひとつのクラスにまとめることで、コントローラを簡潔に保ち、ロジックの再利用やテストがしやすくなるという利点があります。


作成方法

artisan コマンドでフォームリクエストクラスを作成します。

bash
php artisan make:request StoreUserRequest

上記のコマンドで app/Http/Requests/StoreUserRequest.php が生成されます。


フォームリクエストクラスの構造

生成されたクラスの主なメソッドは以下の2つです。

1. authorize メソッド

php
public function authorize() { return true; }

このメソッドでリクエストを許可するかどうかを判定します。認可機能を使わない場合は常に true を返します。

2. rules メソッド

php
public function rules() { return [ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users,email', 'password' => 'required|min:8|confirmed', ]; }

ここに入力値のバリデーションルールを定義します。通常の $request->validate() と同じルールが使えます。


コントローラでの利用方法

作成したフォームリクエストクラスを、コントローラのメソッド引数に型指定で受け取ります。

php
use App\Http\Requests\StoreUserRequest; public function store(StoreUserRequest $request) { // バリデーション済みのデータを取得 $validated = $request->validated(); // データの保存などの処理 User::create($validated); }

validated() メソッドで、バリデーション済みのデータのみを取得できます。


メリット

  • コントローラが簡潔になる:バリデーションロジックが外部化されるため、コントローラがスッキリする。

  • 再利用性が高い:同じバリデーションルールを他の場所でも使い回しやすい。

  • テストが容易:バリデーションロジック単体をユニットテスト可能。

  • 認可とバリデーションを分離して管理できる。


カスタムメッセージや属性名の定義

フォームリクエストクラス内で以下のように追加可能です。

php
public function messages() { return [ 'email.required' => 'メールアドレスは必須です。', ]; } public function attributes() { return [ 'email' => 'メールアドレス', ]; }

補足:リクエストライフサイクルとの関係

フォームリクエストクラスは、コントローラの処理に到達する前に自動でバリデーションと認可を実行します。失敗した場合は自動的にリダイレクトされ、エラーメッセージがセッションに保存されます。


まとめ

フォームリクエストクラスは、Laravelにおいて保守性・再利用性・テスト性を高めるための重要なバリデーション手法です。中〜大規模のプロジェクトでは積極的に活用することが推奨されます。

ChatGPT4o 生成日:2025/06/23