mcpField
L
lombok-patterns

lombok-patterns

github.com/emvnuel開発287 回インストール12 週間前に更新
リポジトリ

lombok-patterns について

lombok-patternsは、Java開発者向けのProject Lombokガイドです。アノテーション、連携パターン、実践上の注意点を扱い、Java 21以降の言語機能で置き換えられる用法も説明します。

主な機能

  1. 01用途別に主要なLombokアノテーションを整理
  2. 02JPAとSpringの連携パターンを紹介
  3. 03Java Recordが適する場面を説明
  4. 04よくある落とし穴と対処法を提示

活用シーン

  1. 01JPAエンティティに適したアノテーションを選ぶ
  2. 02Springサービスでコンストラクター注入を使う
  3. 03単純なDTOにRecordが適するか判断する
  4. 04Lombokの使い方を見直し、問題を調べる

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/emvnuel/skills --skill lombok-patterns

インストール後、Claude Code で/lombok-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

cookbook/
builder-annotation.md
configuration-properties.md
constructor-annotations.md
data-annotation.md
dependency-injection.md
entity-patterns.md
equals-hashcode-jpa.md
getter-setter.md
logging-annotations.md
non-null.md
sneaky-throws.md
synchronized-annotation.md
value-annotation.md
with-annotation.md

詳細

Lombok パターン

このスキルでは、Project Lombok を使用して Java アプリケーションの定型コードを削減する方法について、アノテーション、ベストプラクティス、統合パターンを解説します。

Note:このガイドは Java 21 以降のプロジェクトを対象としています。Records、var、try-with-resources などの最新の Java 機能により、一部の Lombok 機能は現在では不要になっています。詳しくは、以下のJava 21 以降の考慮事項をご覧ください。

概要

Lombok は Java ライブラリで、コンパイル時に getter、setter、コンストラクター、ビルダーなどの一般的なコードを自動生成します。より簡潔で保守しやすいコードの作成に役立ちます。

Java 21 以降の考慮事項

一部の Lombok 機能は、最新の Java では不要になっています。

Lombok の機能Java の代替機能推奨事項
val/varvar(Java 10 以降)Java の var を使用します
@Valuerecord(Java 16 以降)シンプルな値オブジェクトには record を推奨します
@Datarecord(Java 16 以降)シンプルな DTO には record を推奨します
@Cleanuptry-with-resources(Java 7 以降)try-with-resources を使用します
@Withrecord の wither メソッドrecord では wither メソッドを定義できます
Lombok が引き続き役立つケース
  • JPA エンティティ:record は JPA では使えません(引数なしコンストラクターと可変状態が必要です)
  • @Builder:record にはビルダーの組み込みサポートがありません
  • @Slf4j:ロガー生成に相当する Java の機能はありません
  • @RequiredArgsConstructor:Spring の依存性注入に役立ちます
  • 継承:record はクラスを継承できません

アノテーションのカテゴリ

コアアノテーション(引き続き有用)
アノテーション目的使用例
@Getter/@SetterアクセサーメソッドJPA エンティティ、可変クラス
@NoArgsConstructor引数なしコンストラクターJPA エンティティ、シリアライズ
@AllArgsConstructor全フィールドのコンストラクター依存性注入
@RequiredArgsConstructorfinal/@NonNull フィールド用のコンストラクターSpring サービス
@Builderビルダーパターンの実装複雑なオブジェクトの構築
代わりに Java の record を検討するケース
LombokJava の record を使用するケース
@Valueシンプルな不変データの保持に使う場合
@Data継承を使わないシンプルな DTO の場合
// ✅ Prefer Java Record for simple value objects
public record Money(BigDecimal amount, String currency) {}

// ✅ Prefer Java Record for simple DTOs
public record CustomerDTO(String name, String email) {}

// ✅ Use Lombok for JPA entities (records don't work with JPA)
@Entity
@Getter
@Setter
@NoArgsConstructor
public class Customer {
    @Id private Long id;
    private String name;
}
ロギングアノテーション
アノテーションロガーの種類
@Slf4jSLF4J(推奨)
@Log4j2Log4j 2
@Logjava.util.logging
@CommonsLogApache Commons Logging
フィールドおよびメソッドのアノテーション
アノテーション目的
@NonNullパラメーター/フィールドの null チェック
@With不変セッター(新しいインスタンスを作成します)
@SneakyThrows宣言せずに検査例外をスローする
@Synchronizedスレッドセーフなメソッドの同期
@ToStringカスタマイズ可能な toString() の生成
@EqualsAndHashCodeカスタマイズ可能な equals/hashCode

クイックリファレンス

JPA エンティティ(Lombok を推奨)
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Product {
    @Id
    @EqualsAndHashCode.Include
    private Long id;

    private String name;
    private BigDecimal price;
}
Spring サービス
@Service
@RequiredArgsConstructor
@Slf4j
public class OrderService {
    private final OrderRepository orderRepository;
    private final PaymentService paymentService;

    public Order process(Order order) {
        log.info("Processing order: {}", order.getId());
        return orderRepository.save(order);
    }
}
ビルダーパターン(Lombok が役立つケース)
// Records don't have builder support - use Lombok
@Builder
public record Email(
    String to,
    String subject,
    String body,
    @Singular List<String> attachments
) {}

// Usage
Email email = Email.builder()
    .to("[email protected]")
    .subject("Hello")
    .body("Content")
    .attachment("file1.pdf")
    .build();

ベストプラクティス

✅ 推奨事項
  • シンプルな値オブジェクトや DTO には Java Record を使用します
  • 依存性注入には、final フィールドと @RequiredArgsConstructor を使用します
  • 手動でロガーを作成する代わりに、ログ記録には @Slf4j を使用します
  • オプションのフィールドが多いクラスには @Builder を使用します
  • JPA エンティティでは @EqualsAndHashCode を明示的に指定します
❌ 避けるべき事項
  • Java Record で十分な場合に @Data や @Value を使用すること
  • JPA エンティティに @Data を使用すること(個別のアノテーションを使用します)
  • 遅延読み込みされる JPA リレーションシップで @EqualsAndHashCode を使用すること
  • @SneakyThrows を多用すること(例外処理が不明瞭になります)

よくある落とし穴

落とし穴問題解決策
エンティティに @Data を使用可変セッターが含まれ、equals/hashCode に問題が生じます@Getter、@Setter、明示的な @EqualsAndHashCode を使用します
@NoArgsConstructor がないJPA/Jackson には引数なしコンストラクターが必要です必ず @AllArgsConstructor と併せて追加します
循環する @ToString双方向リレーションシップで StackOverflow が発生します片側に @ToString.Exclude を使用します
シンプルな DTO に Lombok を使用不要な依存関係が追加されます代わりに Java Record を使用します

クックブック一覧

コアアノテーション
フィールドとメソッドのアノテーション
統合パターン

コメント