カテゴリ: 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の認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)