---
title: JJUG CCC 2024 Springで"知名度は高くないけど便利なJavaライブラリ集"について話してきました。
tags: ["Java", "Spring Boot", "Jilt", "YAVI", "Logbook", "NullAway"]
categories: ["Programming", "Java", "am", "ik", "yavi"]
date: 2024-06-17T08:25:25Z
updated: 2024-06-17T23:18:06Z
---
[JJUG CCC 2024 Spring](https://jjug.doorkeeper.jp/events/172019)で"知名度は高くないけど便利なJavaライブラリ集"について話しました。
スライド
以下の4つライブラリを紹介しました。このブログの実装にも全て使用しています。
* [Jilt](https://github.com/skinny85/jilt)
* [YAVI](https://github.com/making/yavi)
* [Logbook](https://github.com/zalando/logbook)
* [NullAway](https://github.com/uber/NullAway)
なお、知名度は以下の通りでした。自分のXフォロワー周辺に聞いているので、自分が作っているYAVIについては流石に知名度が高めでした😅
* Jilt

* YAVI

* Logbook

* NullAway

セッションの最後のQ&Aでは、"YAVIはプレゼン層で利用する想定か?"と聞かれました。
サンプルはわかりやすくするため、プレゼン層で利用する例を上げましたが、どちらかというとドメイン側で利用する想定です。
そのため、[ドメイン側で定義したValidatorをプレゼン用に変換することを想定した機能](https://yavi.ik.am/#validating-the-source-object-before-creating-the-target-object)
も用意しています。
サンプル。次の`User`クラスで定義したValidator
```java
import am.ik.yavi.arguments.Arguments3Validator;
import am.ik.yavi.validator.Yavi;
import static am.ik.yavi.constraint.charsequence.codepoints.AsciiCodePoints.ASCII_PRINTABLE_CHARS;
public record User(String name, String email, Integer age) {
public static final Arguments3Validator validator = Yavi.arguments()
._string("name", c -> c.notBlank().lessThanOrEqual(20).codePoints(ASCII_PRINTABLE_CHARS).asWhiteList())
._string("email", c -> c.notBlank().lessThanOrEqual(50).email())
._integer("age", c -> c.notNull().greaterThanOrEqual(0).lessThanOrEqual(200))
.apply(User::new);
}
```
を、`UserForm`クラスのバリデーションに使いたい時、
```java
import am.ik.yavi.arguments.Arguments;
import am.ik.yavi.core.ValueValidator;
import com.example.yavi.domain.User;
import jakarta.annotation.Nullable;
public record UserForm(@Nullable String name, @Nullable String email, @Nullable Integer age) {
static ValueValidator validator = User.validator
.compose(userForm -> Arguments.of(userForm.name(), userForm.email(), userForm.age()));
}
```
という風に`UserForm`を受けて、`User`を返すValidatorに変換できます。
```java
UserForm userForm = ...;
Validated userValidated = UserForm.validator.validate(userForm);
```
という形で使えます。 全ソースコードはこちらです https://github.com/making/demo-spring-mvc-yavi
発表後にJilt 1.6がリリースされ、新たに[Functional Builders](https://github.com/skinny85/jilt?tab=readme-ov-file#functional-builder-style)がサポートされました。
https://github.com/skinny85/jilt/issues/17
ご清聴ありがとうございました。