Laravelでフォームリクエストを使ったバリデーション方法
生徒
「前にバリデーションの方法を教わったけど、もっと綺麗に書く方法ってありますか?」
先生
「いい質問ですね。Laravelでは“フォームリクエスト”という専用のクラスを使って、バリデーションを別のファイルに分けて書くことができます。」
生徒
「それって、どんなメリットがあるんですか?」
先生
「コードが見やすくなって、メンテナンスもしやすくなります。では、フォームリクエストの使い方を一緒に見ていきましょう!」
1. フォームリクエストとは?
Laravelのフォームリクエストとは、バリデーションの処理を専用のクラスに分けて記述する仕組みです。これにより、コントローラの中身がすっきりして読みやすくなり、複雑なルールも整理しやすくなります。
例えば、通常のバリデーションでは$request->validate()を使っていましたが、フォームリクエストを使うとrules()メソッドに書くだけで済みます。
2. フォームリクエストの作成方法
フォームリクエストを作るには、Artisanコマンドを使います。コマンドとは、黒い画面(ターミナル)で入力する命令のことです。
php artisan make:request StoreUserRequest
このコマンドを実行すると、app/Http/RequestsディレクトリにStoreUserRequest.phpというファイルが自動で作成されます。
3. フォームリクエストにバリデーションルールを書く
作成されたリクエストファイルの中にあるrulesメソッドに、バリデーションルールを書いていきます。
public function rules()
{
return [
'name' => 'required',
'email' => 'required|email',
'password' => 'required|min:8',
];
}
解説:requiredは必須入力、emailは正しいメール形式、min:8はパスワードが8文字以上であることを意味します。
4. コントローラでフォームリクエストを使う
フォームリクエストを使うには、コントローラの引数に先ほど作成したクラスを指定します。すると、自動的にバリデーションが実行されます。
use App\Http\Requests\StoreUserRequest;
public function store(StoreUserRequest $request)
{
// バリデーションが通ったデータを取得
$data = $request->validated();
// データの保存処理などをここで行う
}
フォームリクエストを使うと、コントローラ内でvalidate()を書く必要がなくなります。
5. エラーメッセージのカスタマイズ方法
エラーメッセージを日本語にしたり、わかりやすくしたいときは、フォームリクエスト内のmessagesメソッドに書きます。
public function messages()
{
return [
'name.required' => '名前は必ず入力してください。',
'email.required' => 'メールアドレスは必須です。',
'email.email' => 'メールアドレスの形式が正しくありません。',
'password.required' => 'パスワードを入力してください。',
'password.min' => 'パスワードは8文字以上で入力してください。',
];
}
こうすることで、画面に表示されるエラー内容を優しく分かりやすくできます。
6. authorize() メソッドとは?
フォームリクエストの中にはauthorize()というメソッドがあります。このメソッドは、現在のユーザーがその操作を実行してよいかを判定するためのものです。
今回は初心者向けに認可処理は扱わないので、常にtrueを返すようにしておけばOKです。
public function authorize()
{
return true;
}
この設定を忘れると、バリデーションが動かず403エラーになることがあるので注意しましょう。
7. Bladeテンプレートでエラーを表示する
バリデーションエラーがある場合、Bladeテンプレートを使ってユーザーにエラー内容を表示できます。
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
これにより、送信に失敗した理由をユーザーに丁寧に伝えることができます。
まとめ
今回の記事では、Laravelでフォームリクエストを使ったバリデーション方法について、初心者向けに基礎から丁寧に解説してきました。 Laravelのバリデーションは、Webアプリケーション開発において欠かせない重要な機能です。 ユーザーから入力されたデータは、そのまま信用して処理してしまうと、不正な値や想定外の形式が混ざり、エラーやセキュリティ問題の原因になります。 そのため、入力内容をチェックする「バリデーション」は、どんなLaravelアプリでも必ず必要になります。
従来の方法では、コントローラ内で $request->validate() を使ってバリデーションを書くことが多くありました。
この方法は手軽で分かりやすい反面、フォームの項目が増えてくると、コントローラが長くなり、処理内容が見えにくくなるという欠点があります。
そこで活躍するのが、Laravelの「フォームリクエスト」です。
フォームリクエストを使うことで、バリデーションルールやエラーメッセージを専用のクラスに分離でき、コントローラの責務をシンプルに保つことができます。
フォームリクエストは、Artisanコマンドを使って簡単に作成でき、作成されたクラスの中に rules() メソッドや messages() メソッドを定義するだけで利用できます。
これにより、「どんな入力ルールがあるのか」「どんなエラーメッセージが表示されるのか」を一か所で管理できるようになります。
特に実務では、同じバリデーションを複数の画面で使い回すことも多く、フォームリクエストによる整理は、保守性の高いLaravel開発に直結します。
また、フォームリクエストには authorize() メソッドが用意されており、入力チェックだけでなく「このユーザーがその操作をして良いかどうか」という認可の判定も同時に行えます。
初心者のうちは常に true を返す設定で問題ありませんが、Laravelに慣れてくると、ログインユーザーや権限に応じた制御も実装できるようになります。
バリデーションと認可を一つのクラスでまとめて管理できる点も、フォームリクエストの大きな魅力です。
Bladeテンプレートと組み合わせることで、エラーメッセージをユーザーに分かりやすく表示できる点も重要です。 バリデーションエラーが発生した場合に、どの項目がどのように間違っているのかを丁寧に伝えることで、ユーザー体験は大きく向上します。 Laravelのフォームリクエストは、単なる入力チェックの仕組みではなく、ユーザーに優しいWebアプリを作るための基盤となる機能だと言えるでしょう。
フォームリクエストを使った基本構成の振り返り
ここで、フォームリクエストを使った基本的な構成を改めて振り返ってみます。 フォームリクエストをコントローラの引数に指定するだけで、自動的にバリデーションが実行される点が最大の特徴です。
use App\Http\Requests\StoreUserRequest;
public function store(StoreUserRequest $request)
{
$data = $request->validated();
// データ保存処理
}
このように書くだけで、入力チェックはフォームリクエスト側に任せることができます。 コントローラは「処理の流れ」だけに集中できるため、コード全体がとても読みやすくなります。 Laravel初心者の方こそ、早い段階でフォームリクエストの使い方に慣れておくことをおすすめします。
生徒
「フォームリクエストを使うと、バリデーションのコードがすごく整理されますね。 コントローラが短くなって、何をしているのか分かりやすくなりました。」
先生
「その通りです。Laravelでは、役割ごとに処理を分けることがとても大切です。 フォームリクエストは、バリデーション専用の場所だと覚えておくと良いですよ。」
生徒
「エラーメッセージもまとめて書けるので、後から修正するときも楽そうですね。」
先生
「はい。実務では仕様変更が頻繁に起きます。 フォームリクエストを使っていれば、変更にも強いコードが書けるようになります。」
生徒
「これからLaravelでフォームを作るときは、必ずフォームリクエストを使うようにします。」
先生
「それはとても良い判断です。 フォームリクエストを使いこなせれば、Laravel開発の基礎力が一段階上がりますよ。」