カテゴリ: Symfony 更新日: 2026/03/01

Symfonyでバリデーションメッセージをカスタマイズする方法!初心者向けに丁寧に解説

Symfonyでバリデーションメッセージをカスタマイズする方法
Symfonyでバリデーションメッセージをカスタマイズする方法

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

生徒

「Symfonyでフォームの入力チェックをしたら、英語のエラーが表示されました。日本語に変えたり、もっと分かりやすくできますか?」

先生

「はい、バリデーションのエラーメッセージは自由にカスタマイズできますよ。日本語にもできますし、自分の言葉で分かりやすく書き換えることもできます。」

生徒

「それならユーザーにも親切ですね!どうやって書き換えるんですか?」

先生

「では、実際にSymfonyでバリデーションメッセージをカスタマイズする方法を一緒に見ていきましょう。」

1. バリデーションメッセージとは?

1. バリデーションメッセージとは?
1. バリデーションメッセージとは?

バリデーションメッセージとは、Webサイトのフォームなどでユーザーが入力した内容に不備があった際、システムから通知される「エラー案内」のことです。

例えば、会員登録画面で名前の欄を空のまま送信ボタンを押したとき、入力欄のすぐ下に「この項目は必須です」「名前を入力してください」といった赤い文字が表示されることがありますよね。これがバリデーションメッセージです。

なぜカスタマイズが必要なの?

Symfonyのような海外発のフレームワークでは、標準のメッセージが英語(This value should not be blank)だったり、直訳に近い不自然な日本語だったりすることがあります。そのままではユーザーが「何を直せばいいのか」分からず、サイトを離脱してしまう原因になります。

初心者の方向けに、具体的な表示例を見てみましょう。例えば「年齢」の入力欄に数字以外を入れた場合、以下のようなメッセージが表示されます。


(標準のメッセージ例)
This value is not valid.

(カスタマイズ後のメッセージ例)
年齢は半角数字で入力してください。

このように、システム側の都合ではなく「ユーザーが次に何をすべきか」を日本語で分かりやすく伝えるために、メッセージのカスタマイズは非常に重要な作業なのです。

2. アノテーションでメッセージを変更する

2. アノテーションでメッセージを変更する
2. アノテーションでメッセージを変更する

Symfonyのバリデーションは、エンティティクラスのプロパティにアノテーションを付けて設定します。

メッセージを変更したい場合は、messageオプションを追加すればOKです。


use Symfony\Component\Validator\Constraints as Assert;

class User
{
    #[Assert\NotBlank(message: '名前を入力してください')]
    private string $name;

    #[Assert\Email(message: '有効なメールアドレスを入力してください')]
    private string $email;
}

ポイント:

  • messageの中に好きな日本語を入れればOK
  • ユーザーにとって親切な表現にするとよい

3. メッセージに変数を埋め込む

3. メッセージに変数を埋め込む
3. メッセージに変数を埋め込む

一部のバリデーションでは、エラーメッセージの中に変数(プレースホルダー)を使うことができます。

たとえば、最大文字数を指定したときに「〇文字以内にしてください」と表示したい場合です。


#[Assert\Length(
    max: 20,
    maxMessage: '名前は{{ limit }}文字以内で入力してください'
)]
private string $name;

このように {{ limit }} を使えば、自動的に設定した数値(ここでは20)が表示されます。

4. 複数のバリデーションでもメッセージを個別に設定できる

4. 複数のバリデーションでもメッセージを個別に設定できる
4. 複数のバリデーションでもメッセージを個別に設定できる

同じプロパティに複数のバリデーションルールを設定している場合でも、それぞれに別のメッセージを設定できます。


#[Assert\NotBlank(message: 'メールアドレスは必須です')]
#[Assert\Email(message: '正しいメールアドレス形式で入力してください')]
private string $email;

このようにすることで、「空欄かどうか」と「形式が正しいか」を別々にチェックし、それぞれに応じたメッセージを出せます。

5. 翻訳ファイルで一括管理もできる

5. 翻訳ファイルで一括管理もできる
5. 翻訳ファイルで一括管理もできる

メッセージを大量に使う場合や、多言語対応したい場合は、翻訳ファイルを使って一括でメッセージを管理する方法もあります。

たとえば、Symfonyでは translations/validators.ja.yaml というファイルを作って、日本語でメッセージを定義できます。


# translations/validators.ja.yaml
Symfony:
  This value should not be blank: 'この項目は必須です'
  This value is not a valid email address: '正しいメールアドレスを入力してください'

これにより、エンティティ側ではmessageを書かなくても、自動的に翻訳が適用されます。

6. 自分で作ったメッセージキーを使うこともできる

6. 自分で作ったメッセージキーを使うこともできる
6. 自分で作ったメッセージキーを使うこともできる

さらに、独自のメッセージキーを作って、翻訳ファイルと連携することもできます。


#[Assert\NotBlank(message: 'user.name.required')]
private string $name;

# translations/validators.ja.yaml
user:
  name:
    required: '名前を入力してください'

このように階層構造で管理すると、メッセージが整理されて分かりやすくなります。

7. 実行結果でエラーメッセージを確認しよう

7. 実行結果でエラーメッセージを確認しよう
7. 実行結果でエラーメッセージを確認しよう

バリデーションを実行して、エラーメッセージが表示されるか確認してみましょう。


$errors = $validator->validate($user);

foreach ($errors as $error) {
    echo $error->getMessage();
}

名前を入力してください
正しいメールアドレスを入力してください

このようにカスタマイズした日本語のメッセージが表示されれば成功です。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティングの基本を完全ガイド!YAML・PHP・アノテーションの違いもわかりやすく解説
New2
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New3
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New4
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.6
Java&Spring記事人気No6
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.7
Java&Spring記事人気No7
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでファクトリを使ってテストデータを作成する方法を完全解説!初心者向けLaravelテスト入門