Laravelのバリデーション完全ガイド|指定方法・ルール一覧・エラーメッセージの書き方
Laravelのフォームバリデーションの書き方・よく使うバリデーションルール・バリデーションメッセージの表示&カスタマイズ方法をまとめました。 コピペでそのまま使えるサンプル付きなので、自分のプロジェクトにすぐ導入できます。
1. Laravelのバリデーションの基本
Laravelでは、ユーザー入力をチェックするためのバリデーション機能が標準で用意されています。 主な書き方は以下の2つです。
- コントローラで
validate()ヘルパを使う方法 - FormRequest クラス(フォームリクエスト)を使う方法
1-1. コントローラでのシンプルなバリデーション
一番シンプルな書き方は、コントローラ内で $request->validate() を使う方法です。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
// ★ バリデーション
$validated = $request->validate([
'name' => ['required', 'string', 'max:50'],
'email' => ['required', 'email', 'max:255'],
'age' => ['nullable', 'integer', 'min:0'],
]);
// バリデーションOKの場合のみここに来る
// $validated に検証済みデータが入っている
// User::create($validated); など
}
}
バリデーションに失敗すると、自動的に前のページにリダイレクトされ、
$errors 変数にエラーが入ります。
1-2. FormRequestクラスを使ったバリデーション
バリデーションルールが増えてきたら、FormRequestに切り出すとスッキリします。
# フォームリクエストの作成
php artisan make:request StoreUserRequest
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function authorize(): bool
{
// 認可が不要なら true 固定でOK
return true;
}
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:50'],
'email' => ['required', 'email', 'max:255', 'unique:users,email'],
'age' => ['nullable', 'integer', 'min:0'],
];
}
}
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreUserRequest;
class UserController extends Controller
{
public function store(StoreUserRequest $request)
{
// ここに来る時点でバリデーション済み
$validated = $request->validated();
// User::create($validated); など
}
}
2. よく使うバリデーションルール一覧
Laravelには多くのバリデーションルールがありますが、よく使うものを厳選して紹介します。
2-1. 文字列・必須・長さ系
required:必須nullable:null を許可string:文字列max:50:最大50文字min:3:最小3文字
'name' => ['required', 'string', 'min:3', 'max:50'],
2-2. 数値・メールアドレス
integer:整数numeric:数値(小数含む)email:メールアドレス形式between:1,100:1〜100 の範囲
'age' => ['nullable', 'integer', 'between:0,150'],
'email' => ['required', 'email'],
2-3. ユニーク・確認用(password確認など)
unique:users,email:usersテーブルのemail列と重複NGconfirmed:passwordとpassword_confirmationが一致するか
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
フォームが増えてきたら、よく使うルールだけでも「自分用テンプレ」としてどこかにまとめておくと便利です。
3. バリデーションメッセージはどこに書く?
バリデーションメッセージは、主に次の3つの場所に書けます。
- Blade(ビュー)側で
@errorを使って表示 - FormRequest の
messages()/attributes()に書く - 言語ファイル(
resources/lang/ja/validation.php)で一括管理
3-1. Bladeでエラーメッセージを表示する
まずは、よくある「フォームの下にエラーメッセージを出す」パターンです。
<form method="POST" action="{{ route('users.store') }}">
@csrf
<div>
<label for="name">名前</label>
<input id="name" type="text" name="name" value="{{ old('name') }}">
@error('name')
<div style="color: #ef4444; margin-top: 4px; font-size: 13px;">
{{ $message }}
</div>
@enderror
</div>
<div>
<label for="email">メールアドレス</label>
<input id="email" type="email" name="email" value="{{ old('email') }}">
@error('email')
<div style="color: #ef4444; margin-top: 4px; font-size: 13px;">
{{ $message }}
</div>
@enderror
</div>
<button type="submit">送信</button>
</form>
old('name') としておくと、バリデーションエラーで戻ってきたときに入力値を保持できます。
3-2. FormRequest内にバリデーションメッセージを書く
エラーメッセージをコントローラではなく、FormRequest内にカスタム定義することもできます。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:50'],
'email' => ['required', 'email', 'max:255', 'unique:users,email'],
];
}
/**
* カスタムバリデーションメッセージ
*/
public function messages(): array
{
return [
'name.required' => '名前は必須項目です。',
'name.max' => '名前は:max文字以内で入力してください。',
'email.required' => 'メールアドレスは必須項目です。',
'email.email' => '正しいメールアドレス形式で入力してください。',
'email.unique' => 'このメールアドレスはすでに登録されています。',
];
}
/**
* 属性名を日本語にしたい場合
*/
public function attributes(): array
{
return [
'name' => '名前',
'email' => 'メールアドレス',
];
}
}
attributes() を使うと、:attribute となっている部分が自動的に日本語ラベルに置き換わります。
3-3. 言語ファイル(validation.php)で一括管理する
プロジェクト全体で共通のエラーメッセージを使いたい場合は、
resources/lang/ja/validation.php に書くのがおすすめです。
<?php
return [
'required' => ':attribute は必須項目です。',
'email' => ':attribute は有効なメールアドレス形式で入力してください。',
'max' => [
'string' => ':attribute は :max 文字以内で入力してください。',
],
// ...
'attributes' => [
'name' => '名前',
'email' => 'メールアドレス',
'age' => '年齢',
],
];
ここで 'attributes' を設定しておくと、エラーメッセージ内の :attribute が自動的に日本語に置き換わります。
4. まとめ|Laravelのバリデーションをサクッと導入しよう
- 簡単なフォーム:コントローラの
$request->validate()でOK - 複雑なフォーム / 画面が増えてきたら:FormRequestに切り出す
- バリデーションメッセージ:FormRequestの
messages()/attributes()またはvalidation.phpにまとめる - ビュー側:
@error('フィールド名')でエラーを表示
上のサンプルコードはすべてコピペで使える形になっているので、 まずは1画面だけでも「バリデーション+エラーメッセージ表示」を実装してみてください。


コメント