カテゴリ: Laravel 更新日: 2025/12/15

Laravelでフォームリクエストを使ったバリデーション方法

Laravelでフォームリクエストを使ったバリデーション方法
Laravelでフォームリクエストを使ったバリデーション方法

先生と生徒の会話形式で理解しよう

生徒

「前にバリデーションの方法を教わったけど、もっと綺麗に書く方法ってありますか?」

先生

「いい質問ですね。Laravelでは“フォームリクエスト”という専用のクラスを使って、バリデーションを別のファイルに分けて書くことができます。」

生徒

「それって、どんなメリットがあるんですか?」

先生

「コードが見やすくなって、メンテナンスもしやすくなります。では、フォームリクエストの使い方を一緒に見ていきましょう!」

1. フォームリクエストとは?

1. フォームリクエストとは?
1. フォームリクエストとは?

Laravelのフォームリクエストとは、バリデーションの処理を専用のクラスに分けて記述する仕組みです。これにより、コントローラの中身がすっきりして読みやすくなり、複雑なルールも整理しやすくなります。

例えば、通常のバリデーションでは$request->validate()を使っていましたが、フォームリクエストを使うとrules()メソッドに書くだけで済みます。

2. フォームリクエストの作成方法

2. フォームリクエストの作成方法
2. フォームリクエストの作成方法

フォームリクエストを作るには、Artisanコマンドを使います。コマンドとは、黒い画面(ターミナル)で入力する命令のことです。


php artisan make:request StoreUserRequest

このコマンドを実行すると、app/Http/RequestsディレクトリにStoreUserRequest.phpというファイルが自動で作成されます。

3. フォームリクエストにバリデーションルールを書く

3. フォームリクエストにバリデーションルールを書く
3. フォームリクエストにバリデーションルールを書く

作成されたリクエストファイルの中にあるrulesメソッドに、バリデーションルールを書いていきます。


public function rules()
{
    return [
        'name' => 'required',
        'email' => 'required|email',
        'password' => 'required|min:8',
    ];
}

解説:requiredは必須入力、emailは正しいメール形式、min:8はパスワードが8文字以上であることを意味します。

4. コントローラでフォームリクエストを使う

4. コントローラでフォームリクエストを使う
4. コントローラでフォームリクエストを使う

フォームリクエストを使うには、コントローラの引数に先ほど作成したクラスを指定します。すると、自動的にバリデーションが実行されます。


use App\Http\Requests\StoreUserRequest;

public function store(StoreUserRequest $request)
{
    // バリデーションが通ったデータを取得
    $data = $request->validated();

    // データの保存処理などをここで行う
}

フォームリクエストを使うと、コントローラ内でvalidate()を書く必要がなくなります。

5. エラーメッセージのカスタマイズ方法

5. エラーメッセージのカスタマイズ方法
5. エラーメッセージのカスタマイズ方法

エラーメッセージを日本語にしたり、わかりやすくしたいときは、フォームリクエスト内のmessagesメソッドに書きます。


public function messages()
{
    return [
        'name.required' => '名前は必ず入力してください。',
        'email.required' => 'メールアドレスは必須です。',
        'email.email' => 'メールアドレスの形式が正しくありません。',
        'password.required' => 'パスワードを入力してください。',
        'password.min' => 'パスワードは8文字以上で入力してください。',
    ];
}

こうすることで、画面に表示されるエラー内容を優しく分かりやすくできます。

6. authorize() メソッドとは?

6. authorize() メソッドとは?
6. authorize() メソッドとは?

フォームリクエストの中にはauthorize()というメソッドがあります。このメソッドは、現在のユーザーがその操作を実行してよいかを判定するためのものです。

今回は初心者向けに認可処理は扱わないので、常にtrueを返すようにしておけばOKです。


public function authorize()
{
    return true;
}

この設定を忘れると、バリデーションが動かず403エラーになることがあるので注意しましょう。

7. Bladeテンプレートでエラーを表示する

7. Bladeテンプレートでエラーを表示する
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開発の基礎力が一段階上がりますよ。」

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルーティングでサブドメインを使う方法!初心者向けにやさしく解説
New2
Laravel
Laravelでマルチ言語ルートを設定する方法!ロケールごとのprefixで簡単管理
New4
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
人気記事
No.1
Java&Spring記事人気No1
Symfony
SymfonyのRemember Me機能を完全解説!初心者でもわかるログイン保持の仕組み
No.2
Java&Spring記事人気No2
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.3
Java&Spring記事人気No3
Laravel
LaravelのFeatureテストとUnitテストの違いを理解しよう
No.4
Java&Spring記事人気No4
Laravel
Laravelでルートに中間処理を追加する方法!ミドルウェア活用ガイド
No.5
Java&Spring記事人気No5
CodeIgniter
CodeIgniterで多言語対応(Language)を徹底解説!言語切り替え機能を実装
No.6
Java&Spring記事人気No6
Laravel
Laravelでドメインルートを使う方法!マルチドメイン対応を初心者向けに解説
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルーティングでサブドメインを使う方法!初心者向けにやさしく解説