MicronautのバリデーションをDIと組み合わせて使う方法を解説
生徒
「Micronautで入力チェックをしたいのですが、毎回自分でif文を書く必要があるんですか?」
先生
「Micronautにはバリデーション機能が用意されていて、アノテーションを付けるだけで入力チェックができます。」
生徒
「DIと一緒に使うこともできるんでしょうか?」
先生
「もちろん可能です。DIと組み合わせることで、保守性の高いコードが書けます。順番に解説します。」
1. Micronautにおけるバリデーションの基本
バリデーションとは、入力された値が正しいかどうかを検証する仕組みです。 Micronautでは、Java標準のバリデーション仕様をベースにした機能が提供されています。 これにより、数値の範囲チェックや文字列の長さ確認などを、アノテーションで簡潔に記述できます。
初心者の方が最初につまずきやすいのは、どこで入力チェックを行うべきかという点です。 Micronautでは、DIコンテナと連携してバリデーションが実行されるため、 明確な責務分離を意識した設計が可能になります。
2. バリデーションとDIを組み合わせるメリット
DIとバリデーションを組み合わせる最大のメリットは、コードの見通しが良くなる点です。 各クラスの役割が明確になり、入力チェックのロジックを個別に書く必要がなくなります。
MicronautのDIでは、@Singletonなどのアノテーションを付けたクラスが管理対象になります。 バリデーションもこの管理下で実行されるため、フレームワークに処理を任せる設計が実現します。
3. バリデーション用アノテーションの基本例
Micronautでよく使われるバリデーションアノテーションには、 空文字を防ぐものや、数値範囲を制限するものがあります。 これらを使うことで、入力値の安全性を簡単に高められます。
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
public class UserRequest {
@NotBlank
@Size(min = 3, max = 20)
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
4. DI管理されたサービスでのバリデーション実行
バリデーションは、DIコンテナに管理されたクラス内で自動的に実行されます。 サービスクラスに対して、バリデーション対象のオブジェクトを受け取るだけで、 Micronautが入力チェックを行ってくれます。
これにより、サービスロジックに集中でき、入力チェックの重複を防げます。
import jakarta.inject.Singleton;
import jakarta.validation.Valid;
@Singleton
public class UserService {
public void createUser(@Valid UserRequest request) {
// バリデーション済みのユーザー情報を利用
}
}
5. コントローラとバリデーションの関係
Micronautでは、コントローラ層でリクエストを受け取り、 そのままサービス層に処理を委譲する構成が一般的です。 このとき、コントローラでもバリデーションが自動適用されます。
入力チェックをコントローラやサービスで分散して書く必要はなく、 DIとアノテーションにより統一された処理が実現します。
import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;
import jakarta.validation.Valid;
@Controller("/users")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@Post
public void register(@Body @Valid UserRequest request) {
userService.createUser(request);
}
}
6. バリデーションエラー時の動作イメージ
バリデーションエラーが発生した場合、Micronautは自動的に例外を発生させます。 開発者は個別に例外処理を書かなくても、入力不正を検知できます。
この仕組みにより、入力チェック漏れによる不具合を未然に防ぐことが可能です。 初心者にとっても、安全なアプリケーション構築の第一歩となります。
7. バリデーションと設計の考え方
バリデーションは単なる入力チェックではなく、設計の一部です。 MicronautのDIと組み合わせることで、役割ごとに責務を分離できます。
バリデーションをDTOに集約し、サービス層はビジネスロジックに集中する。 この構成は、JavaとMicronautを使った開発で非常に重要な考え方です。
8. 初心者が意識したいポイント
初心者の方は、まず「アノテーションを付けるだけでチェックできる」という点を理解しましょう。 Micronautのバリデーションは、DIと密接に連携して動作します。
手動での入力チェックから一歩進んで、フレームワークの力を活用することで、 保守性と可読性の高いコードを書くことができます。