カテゴリ: Spring 更新日: 2026/04/04

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

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

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

生徒

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

先生

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

生徒

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

先生

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

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

「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. 実行例を確認しよう

Spring BootアプリケーションでこのUserFormを使い、バリデーションを実行すると、条件を満たさない入力に対してエラーメッセージが返されます。


usernameが1文字のとき:
→ エラー:size must be between 2 and 20

passwordが5文字のとき:
→ エラー:size must be between 8 and 100

このように、ユーザーが入力した値が制約条件を満たさない場合、自動的にエラーが検出されます。

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

「4. エラーメッセージをカスタマイズする方法」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

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

@Sizeアノテーションにはmessage属性を指定できます。これを使えば、より分かりやすいメッセージをユーザーに表示できます。


public class UserForm {

    @Size(min = 2, max = 20, message = "ユーザー名は2文字以上20文字以内で入力してください")
    private String username;

}

これにより、エラーメッセージが日本語で表示され、ユーザーにとって親切なフォームになります。

5. コレクションや配列でも利用可能

5. コレクションや配列でも利用可能
5. コレクションや配列でも利用可能

@Sizeは文字列だけでなく、リストや配列などにも適用できます。例えば、複数のタグを受け取る入力で「最低1個以上、最大5個まで」といった制限が可能です。


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

public class TagForm {

    @Size(min = 1, max = 5, message = "タグは1つ以上5つ以下で入力してください")
    private List<String> tags;

}

このように、配列やリストに対しても簡単にルールを定義できます。

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

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

@Sizeアノテーションは、@NotNullや@NotBlankなどの他のアノテーションと組み合わせるとさらに効果的です。例えば、必須入力チェックと文字数制限を同時に行うことができます。


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

public class CommentForm {

    @NotBlank(message = "コメントは必須です")
    @Size(max = 200, message = "コメントは200文字以内で入力してください")
    private String content;

}

この例では、コメントが未入力の場合は必須エラー、200文字を超えた場合は文字数エラーと、状況に応じて複数のチェックを実行できます。

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

「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も使って、より実践的なバリデーションを試してみたいです!」

カテゴリの一覧へ
新着記事
New1
Spring
Spring Securityの新標準!SecurityFilterChainとHttpSecurity DSLの書き方を初心者向けに解説
更新記事
New2
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
更新記事
New3
Servlet
JavaのGenericServletクラスのgetInitParameterNamesメソッドを徹底解説!初心者でもわかる初期化パラメータの取得方法
更新記事
New4
JSP
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.7
Java&Spring記事人気No7
Spring
Spring BootとVS Codeで開発を始めよう!拡張機能・launch.json・ホットリロードを丁寧に解説
No.8
Java&Spring記事人気No8
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門