カテゴリ: Spring 更新日: 2026/09/25

JavaのSpringで使う@Sizeアノテーションを完全ガイド!初心者でもわかるバリデーション入門

Springの@Sizeアノテーション
Springの@Sizeアノテーション

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

生徒

「Springで入力チェックをするときに、文字数の制限って簡単にできますか?」

先生

「はい、できますよ。@Sizeアノテーションを使えば、文字列やリストなどのサイズを簡単に制御できます。」

生徒

「具体的にはどんなときに使うんですか?」

先生

「例えば、ユーザー名は2文字以上20文字以下に制限したい、といった場面で使えますよ。それでは詳しく見ていきましょう。」

1. @Sizeアノテーションとは?

1. @Sizeアノテーションとは?
1. @Sizeアノテーションとは?

@Sizeアノテーションは、Javaの標準的なバリデーション規格である「Jakarta Bean Validation(旧Bean Validation)」で定義されている、最も基本的かつ強力な入力チェック機能の一つです。Spring Bootなどのフレームワークでも標準的に採用されており、システムが予期しない長さのデータを受け取るのを防ぐ重要な役割を担っています。

主に「文字列(String)」の長さを制限したり、「リスト(List)」や「配列」の中身の個数を制限したりするために使用されます。例えば、SNSの投稿フォームで「140文字以内」という制限を設けたり、アンケート回答で「最低3つの項目を選択してほしい」といったルールを、プログラムの深い知識がなくても直感的に設定できるのが大きなメリットです。

初心者向け:イメージで理解しよう

バリデーション(Validation)とは、日本語で「検証」や「妥当性確認」という意味です。@Sizeは、いわば「データのサイズを測る検問所」のようなものです。検問を通過できるデータの範囲(最小値と最大値)を指定することで、不正なデータがデータベースに保存されるのを未然に防ぐことができます。

プログラミング未経験の方でも、以下のサンプルのように対象の項目(フィールド)のすぐ上に記述するだけで、複雑な計算処理を書くことなく入力チェックが実装できることを覚えておきましょう。


public class RegistrationForm {

    // ユーザー名を2文字から15文字の間に制限する設定
    @Size(min = 2, max = 15)
    private String nickname;

}

このように記述するだけで、システムは自動的に「nickname」の中身が1文字だったり、16文字以上だったりする場合に「エラー」として扱ってくれるようになります。

2. 基本的な使い方

2. 基本的な使い方
2. 基本的な使い方

@Sizeアノテーションの使い方は非常にシンプルです。バリデーション(入力チェック)を行いたい項目の直前に記述し、カッコの中に条件を指定するだけです。主に、文字の長さを制限する min(最小値)と max(最大値)という2つの設定値を組み合わせて使用します。

設定のポイント

  • min:最低限必要な文字数や要素数を指定します(省略した場合は0)。
  • max:許容される最大の文字数や要素数を指定します(省略した場合は無限)。

例えば、会員登録画面などで「ユーザー名は短すぎても長すぎても困る」「パスワードはある程度の長さを持たせてセキュリティを高めたい」といった場合に、以下のようなJavaプログラムを作成します。プログラミングが初めての方でも、構造が直感的に理解できるはずです。


import jakarta.validation.constraints.Size;

public class UserForm {

    // ユーザー名を2文字から20文字の範囲に制限します
    @Size(min = 2, max = 20)
    private String username;

    // パスワードを8文字から100文字の範囲に制限します
    @Size(min = 8, max = 100)
    private String password;

    // ※実際の開発では、この下にgetterやsetterと呼ばれるメソッドを記述します
}

この設定を行うだけで、システムは「username」に1文字しか入力されなかった場合や、「password」が7文字以下だった場合に、自動的に「ルール違反」として検知してくれるようになります。開発者が「if文」などを使って複雑な文字数計算のロジックを1から書く必要がないため、ミスの少ない安全なプログラムを効率よく作成できるのが @Size の大きな魅力です。

3. 実行例を確認しよう

3. 実行例を確認しよう
3. 実行例を確認しよう

設定した @Size が実際にどのように動くのか、具体的なケースで確認してみましょう。Spring Bootで作成したWebアプリケーションに、ユーザーが値を入力した場面を想定します。

入力チェックのシミュレーション

例えば、先ほどの「ユーザー名は2文字から20文字」「パスワードは8文字から100文字」という設定(UserForm)に対して、以下のような入力があった場合です。

入力項目 入力された値 判定結果
ユーザー名 「あ」 (1文字) エラー
パスワード 「pass123」 (7文字) エラー

バリデーションが実行されると、システムは内部的に以下のようなメッセージを生成し、画面に返します。これらはデフォルト(標準設定)のメッセージです。


// usernameが1文字だった場合のエラー
size must be between 2 and 20

// passwordが7文字だった場合のエラー
size must be between 8 and 100

このように、開発者が「1文字だからダメ」「7文字だから足りない」という判定ロジックを1行ずつ書かなくても、@Size を付けておくだけで、システムが自動的に入力値をスキャンして、ルールに違反しているものを弾いてくれるようになります。

ここがポイント!

プログラミングにおいて、入力データの長さチェックはセキュリティ上も非常に重要です。@Size を使うことで、初心者でも「安全な窓口」を簡単に作成できることを覚えておきましょう。次のセクションでは、この英語のエラーメッセージを分かりやすい日本語に変更する方法を解説します。

4. エラーメッセージをカスタマイズする方法

4. エラーメッセージをカスタマイズする方法
4. エラーメッセージをカスタマイズする方法

@Sizeアノテーションの標準設定では、エラー時に英語のメッセージが表示されます。しかし、日本のユーザー向けのWebサイトでは、当然ながら日本語で「何がダメだったのか」を伝える必要があります。そこで活用するのがmessage属性です。

カスタマイズの書き方

アノテーションのカッコの中に、message = "表示したい文章"という形式で記述します。これにより、バリデーションエラーが発生した際、指定したテキストがシステムから呼び出されるようになります。


public class UserForm {

    // message属性を使って、日本語のガイドを表示するように設定します
    @Size(min = 2, max = 20, message = "ユーザー名は2文字以上20文字以内で入力してください")
    private String username;

    // 最小値だけをチェックする場合のメッセージ例
    @Size(min = 8, message = "パスワードは最低でも8文字以上必要です")
    private String password;

}

プログラミング未経験の方にとって、「エラー」は怖いものに感じられるかもしれません。しかし、このように適切な日本語メッセージを設定しておくことで、ユーザーは「あ、あと1文字足りないんだな」と直感的に理解し、スムーズに入力し直すことができます。

また、このメッセージ機能は、後ほど解説する「Spring Bootの画面表示機能」と組み合わせることで、入力フォームのすぐ下に赤い文字で警告を出すといった、プロのWebサイトのような仕掛けを簡単に実現するための土台となります。ユーザーにとって親切なシステムを作るための第一歩として、必ずマスターしておきましょう。

5. コレクションや配列、Mapの要素数も制限できる

5. コレクションや配列、Mapの要素数も制限できる
5. コレクションや配列、Mapの要素数も制限できる

@Sizeアノテーションの便利な点は、文字列の「文字数」だけでなく、複数のデータをまとめて扱う「リスト(List)」や「配列」、「マップ(Map)」の要素数もチェックできることです。これにより、「最低でも1つは選択してほしい」「多すぎると処理が重くなるから最大10個まで」といったルールを簡単に作れます。

活用シーンの例

  • アンケート回答で「興味のあるジャンルを3つまで選んでください」
  • 商品登録で「画像を最低1枚はアップロードしてください」
  • メール送信で「一度に送れる宛先は50件までです」

プログラミング未経験の方でもイメージしやすいよう、趣味を選択する「タグ登録」を例にコードを見てみましょう。JavaのListという型を使って、複数の文字列(タグ)を管理する場合の設定例です。


import java.util.List;
import jakarta.validation.constraints.Size;

public class TagForm {

    // 選択されたタグの個数が1つ未満、または6つ以上のときにエラーになります
    @Size(min = 1, max = 5, message = "タグは1つ以上、5つ以内で選択してください")
    private List<String> tags;

}

この設定を行うと、画面上のチェックボックスなどで何も選ばずに送信(要素数が0)したり、逆に6つ以上欲張って選んだりした場合に、指定したメッセージでユーザーに注意を促すことができます。文字列の長さチェックと同じ感覚で、データの「個数」をコントロールできるため、非常に汎用性が高いアノテーションです。

また、この仕組みは「配列」に対しても全く同じ書き方で適用可能です。システムが受け取るデータのボリュームを制限することは、サーバーの負荷を抑え、予期せぬエラーを防ぐための「防波堤」のような役割も果たしてくれます。

6. 他のバリデーションアノテーションとの併用

6. 他のバリデーションアノテーションとの併用
6. 他のバリデーションアノテーションとの併用

@Sizeアノテーションは、単体で使うよりも他のバリデーション(入力チェック)機能と組み合わせることで、その真価を発揮します。実務で最も頻繁に組み合わされるのが、必須入力をチェックする@NotBlankや@NotNullです。

なぜ組み合わせが必要なのでしょうか?実は、@Sizeは「値が入力されていること」を強制するものではありません。そのため、「必ず入力してほしい、かつ200文字以内」というルールを作りたい場合は、以下のように複数のアノテーションを並べて記述します。


import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

public class CommentForm {

    // 「空文字(スペースのみ)」も禁止し、さらに文字数も制限する設定
    @NotBlank(message = "コメントは必須入力です")
    @Size(max = 200, message = "コメントは200文字以内で入力してください")
    private String content;

}

ここが重要!使い分けのコツ

  • 未入力の場合: @NotBlankが反応して「必須入力です」と表示されます。
  • 201文字以上の場合: @Sizeが反応して「200文字以内で入力してください」と表示されます。

このように役割を分担させることで、ユーザーは何が原因でエラーになったのかを一目で理解できるようになります。プログラミング未経験の方でも、この「アノテーションを重ねて書く」という手法を覚えるだけで、プロのエンジニアが作るような、精度の高い入力フォームを簡単に設計することが可能です。まずは「必須チェック + サイズチェック」のセットを基本形として覚えておきましょう。

7. Spring Bootでの実践的な使い方

7. Spring Bootでの実践的な使い方
7. Spring Bootでの実践的な使い方

Spring Bootでは、コントローラで@Validや@Validatedアノテーションを使うことで、自動的に@Sizeを含むバリデーションが実行されます。初心者でも簡単に入力チェックを導入できるのが大きな特徴です。


import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import jakarta.validation.Valid;

@Controller
public class UserController {

    @PostMapping("/register")
    public String register(@Valid UserForm form, BindingResult result) {
        if (result.hasErrors()) {
            return "registerForm";
        }
        return "success";
    }
}

このコードでは、フォーム送信時に自動的に@Sizeを含むチェックが走り、不正な値があればエラー画面に戻ります。

8. よくある注意点

8. よくある注意点
8. よくある注意点

@Sizeを使うときの注意点として、null値には反応しない点があります。nullを禁止したい場合は必ず@NotNullや@NotBlankを併用してください。また、データベース側の制約(VARCHARの長さ制限など)と整合性を取ることも大切です。

さらに、入力フォームのUI側でも文字数制限を設けておくと、ユーザーが入力時点で気づけるので、より親切なアプリケーションになります。

9. @Sizeと正規表現の使い分け

9. @Sizeと正規表現の使い分け
9. @Sizeと正規表現の使い分け

文字数制限は@Sizeで簡単に実装できますが、例えば「半角英数字のみ」といった条件を追加したい場合は@Patternアノテーションを組み合わせます。これにより、形式チェックと文字数制御を両立させることができます。

実際の現場では、ユーザー名やパスワードのように複数の条件が組み合わさるケースが多いため、@Sizeをベースにしつつ必要に応じて他の制約も加えるのが一般的です。

まとめ

まとめ
まとめ

JavaのSpringで利用される@Sizeアノテーションは、入力値の文字数やコレクションの要素数を柔軟に制御できる、とても実用的なバリデーション機能です。とくにフォーム入力の管理やAPIのリクエスト制御では、ユーザーが自由に入力する値に対して安全で正確なチェックを行うことが求められるため、@Sizeのような入力制約はアプリケーション品質を支える重要な要素となります。@Sizeアノテーションでは、最小文字数と最大文字数をシンプルに指定でき、メッセージのカスタマイズも容易で、ユーザーに対して分かりやすいフィードバックを返せる点が大きな利点です。また、文字列だけでなく、リストや配列などのコレクション型にも適用できるため、複数要素を持つ入力項目にも自然に使える汎用性があります。 さらに、@NotNull、@NotBlank、@Patternなどの他のバリデーションアノテーションと組み合わせることで、より高度な入力チェックを実現できるため、実務の多種多様な入力要件に柔軟に対応できます。たとえば、ユーザー名には「空は不可」「2〜20文字以内」「半角英数字のみ」といった複数の条件を付与することが一般的であり、これらを@Sizeと他のアノテーションで組み合わせることで、簡潔かつ明瞭なコードで強固なバリデーションを実装できます。また、Spring Bootのコントローラで@Validを使うだけで自動的に検証が働くため、開発者が複雑なチェック処理を自前で書く負担も大幅に軽減されます。 バリデーションエラー時にはBindingResultでエラー内容を取得し、フォーム画面に戻してユーザーに分かりやすいメッセージを表示することも容易です。この入力チェックの仕組みは、ユーザビリティ向上とアプリケーションの安全性を保つうえで欠かせない技術です。また、画面側での文字数カウンターやmaxlength属性などを併用することで、入力ミスを事前に防ぐUIを実装でき、サーバー側だけでなく、フロント側でも正しい制限を提供することができます。 以下では、@Sizeアノテーションの応用例として、複数の条件を組み合わせた実践的なフォームクラスを紹介します。

@Sizeアノテーションと他の制約を併用したサンプルコード


import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

public class AccountForm {

    @NotBlank(message = "ユーザー名は必須です")
    @Size(min = 2, max = 20, message = "ユーザー名は2文字以上20文字以内で入力してください")
    @Pattern(regexp = "^[a-zA-Z0-9]+$", message = "ユーザー名は半角英数字のみ利用できます")
    private String username;

    @NotBlank(message = "パスワードは必須です")
    @Size(min = 8, max = 100, message = "パスワードは8文字以上100文字以内で入力してください")
    private String password;

}

このように@Sizeは、入力値の基本的な長さ制限を定義する中心的な役割を果たします。さらに、実務ではエラーメッセージの表示方法や、入力フォームへ戻す処理などとの連携も重要になります。Spring Bootの@Validアノテーションを使うだけで、フォーム送信のタイミングで自動的にチェックが走るため、開発者はコントローラに必要最低限のロジックを書くことで堅牢な入力管理を実現できます。 また、入力値の制限とデータベース側の制約(VARCHARの長さなど)は整合性を保つことが大切であり、データ保存時のエラーを防ぐうえでも非常に重要です。サーバー側とDB側の制約がずれていると、ユーザーが正常に入力したとしてもエラーが発生し、利用者に不親切な挙動となってしまいます。こうした点を意識しながら、アプリケーション全体で統一されたバリデーション設計を行うことが品質の安定へとつながります。 さらに、タグ入力など複数要素を扱う場面では、コレクションに対する@Sizeの適用が役立ちます。最低個数と最大個数を指定するだけで広い用途に対応できるため、入力内容を自然に制御しながら柔軟なフォーム設計が可能です。入力チェックの考え方を体系的に理解しておくことで、より実践的で安定したSpringアプリケーション開発が行えるようになります。

先生と生徒の振り返り会話

生徒

「@Sizeって文字数を制限するだけの簡単な仕組みだと思っていましたが、ほかのアノテーションと組み合わせることで、とても強力な入力チェックになるんですね。」

先生

「その通りです。単体でも便利ですが、@NotBlankや@Patternと併用すると、実務で必要な複雑な制限にも対応できます。入力チェックはアプリケーションの信頼性に直結する大事な仕組みなんですよ。」

生徒

「確かに、ユーザーが入力した値を安全に扱うためにも、@Sizeは欠かせないんだと実感しました。設定も分かりやすいので、すぐ使えそうです。」

先生

「その気づきはとても大切です。入力チェックを正しく扱えるようになると、Springでの開発がぐっと楽になりますよ。これからも少しずつ実践しながら理解を深めていきましょう。」

生徒

「はい!次は@Patternや@NotBlankも使って、より実践的なバリデーションを試してみたいです!」

生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Java
JavaのassertFalseとは?JUnit5のAssertionsクラスを初心者向けにわかりやすく解説
新規投稿
New2
Thymeleaf
ThymeleafでDBから取得したデータを編集フォームの初期値にセットする方法!Entity連携を初心者向けに解説
新規投稿
New3
Spring
JavaのSpringで使う@FutureOrPresentアノテーションを完全ガイド!初心者でもわかる日付バリデーション
新規投稿
New4
Java
JavaのLocalDateクラスのgetMonthValueメソッド完全ガイド!初心者でもわかる数値で月を取得する方法
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.3
Java&Spring記事人気No3
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.4
Java&Spring記事人気No4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.8
Java&Spring記事人気No8
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎