lombokについて - M2O-Workshop/Training GitHub Wiki

当ページでは、コード自動補完jarである「lombok」の概要や基本的な使用方法を記述する。


1.前提

運営チーム内での検討の結果、m2oの開発においては、
当面lombokの本格採用は見送る整理となっている。

主な理由としては後述するデメリットから、lombokが初学者向けではないと判断したため。
先々の習熟次第では、再度メリットデメリットを整理した上で、導入を検討するものとする。


2.概要

lombokはJavaプログラムにおいて記述頻度の高いSetter/Getter等のコードを
コンパイル時に自動で生成する、jarモジュールである。

適用することでJavaソース上にコードを記述せずともClassファイルに
Objectが追加され、アプリケーションの中で利用することができる。


3.ダウンロード~使用方法

①以下サイトでlombok.jarをダウンロードする
Project Lombok(https://projectlombok.org/)
※m2oのサンプルアプリ「jsug-shop」フォルダにver_1.16.10を格納済み。

②lombok.jarをダブルクリックする
lombok_main
eclipseもしくはエクスプローラー上でlombok.jarをダブルクリック。
表示されるウィンドウで適用するeclipseを選択し、「Install/Update」ボタンを押下する。
初回ビルド時の1回のみで良く、eclipseの設定ファイル「eclipse.ini」が更新される。

eclipse上でダブルクリックした場合は、エディタで開けない旨の警告も表示されるが
「キャンセル」押下で閉じて問題ない。
lombok_eclipseAlert

③アノテーションを付与する
lombokを有効化したいクラスに専用のアノテーションを付与する。
対象アノテーションの詳細については、下記「4.」を参照。

@Data
public class SampleEntity {
  private String testStr = "";
  private int testInt = 0;
  private BigDecimal testDecimal = new BigDecimal( 0 );  
}

4.主な機能とアノテーション

lombokでの主な機能とアノテーションは以下の通り。

①lombok.Data

機能概要 Dataクラスの生成(一括)
アノテーション @Data
機能要約 メンバのgetterとsetterを自動生成する
備考/使用箇所等 entityクラス等で使用する

②lombok.Getter/lombok.Setter

機能概要 Dataクラスの生成(個別)
アノテーション @Getter or @Setter
機能要約 メンバのgetter または setterを自動生成する
備考/使用箇所等 entityクラス等で使用する

③lombok.Value

機能概要 Valueクラスの生成
アノテーション @Value
機能要約 クラスとメンバをFinal化し、getterを自動生成
備考/使用箇所等 定数クラス等で使用する

④lombok.Builder

機能概要 Builderクラスの生成
アノテーション @Builder(builderClassName="Builderクラス名", builderMethodName="Builderメソッド名()")
機能要約 インスタンス生成用の内部クラスを自動生成する
備考/使用箇所等 パラメータの多いクラスで使用する(※)

(※)Builder自体はデザインパターンの1つとして定義されている。
内部クラスとして適切にBuilderを保持することでコンストラクタよりも
柔軟にインスタンス生成をコーディング可能となる、という考え方。
=コンストラクタは最もSimpleだが柔軟性に欠くBuilderパターンと言える。
参考:http://qiita.com/disc99/items/840cf9936687f97a482b

⑤lombok.NonNull

機能概要 NotNullの指定
アノテーション @NonNull(メンバまたはメソッド引数に付与)
機能要約 対象にnullがセットされた時点でNullPointerExceptionをスローする
備考/使用箇所等 nullチェックのコードが割愛できる

他にもコードを簡略化するアノテーションが多く用意されており、
詳細は以下サイトに綺麗にまとめられている。

Lombokを使った開発ひと巡り:http://blog.y-yuki.net/entry/2016/10/15/165320


5.メリットおよびデメリット

【メリット】
・「お約束」のコードを割愛or簡略化することができる。
・lombok.jarはコンパイル時のみあれば良く、実行モジュールからは除外して良い。

【デメリット】
・使い方がjarとしては独特(単純なimportでは有効化されない)。
・Javaソースには残らないため、lombokを知らないとまず気付けない。

⇒ Javaにある程度慣れたプログラマのための機能が多く、初学者には不向き。


6.jsug-shopでのlombok利用箇所

jsug-shopはsetter/getterをハードコーディングせずlombokの動的生成に委ねており、
初回ビルドの前にjsug-shopフォルダ直下の「lombok.jar」を実行する必要がある。
lombok_eclipsePjt


7.補足

SpringBootのスターターキットにも含まれており、
pom.xmlに以下の記述を追加することで利用を制御可能。
※ただし、lombok.jarの起動(eclipse.iniの更新)は手動で行う必要がある。

<dependency>
  <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

⚠️ **GitHub.com Fallback** ⚠️