【Java】Lombokという便利なライブラリについて学ぼう

公開日: 2025/6/2 更新日: 2025/5/15

皆さんはJavaのライブラリであるLombokについてご存じでしょうか。

私は開発業務で使用した経験がありますが、恥ずかしながらどういったライブラリなのか、あまり知らずに使用していました。

Lombokとはなにか、メリット・デメリットはなにかをこの記事作成を通して調査し、まとめました。

1. Lombokとは


「ロンボク」「ロンボック」と読みます。代表的なマークともいえるLombokの唐辛子はインドネシアにあるロンボク島から来ています。

今もなお半年に一回程度でリリースされており、2024年4月18日現在はv1.18.32(リリース日:2024年3月20日)となっています。


また、LombokはNRI(野村総合研究所)のOpenStandiaが提供しています。

JavaのDTO(Data Transfer Object)のような単調な処理が連続するコードを簡潔に記述するためのJavaライブラリです。

Eclipseの機能を使用すれば、getter/setterの自動生成やhashCode()、equals()、toString()の生成を行うことができます。

Eclipseのこの機能は便利ですが、自動で生成できるようなアプリケーションの本質とは関係のない冗長なコードが必要になってしまっていると言えます。


さらに、フィールドの追加・削除・変更を行う場合は自動生成し直す必要があり手間となります。

フィールドを追加の場合はhashCode()、equals()、toString()は自動生成しなおさなくてもエラーとならないため、自動生成を忘れるとバグの原因にもなります。

しかし、Lombokを使用すれば、アノテーション1つでクラスがDTOとして機能し、getter/setterメソッドやequalsメソッドを書く必要がなくなります。

Lombokのライセンスは、MITライセンスに基づいています。

ソースコード公開の有無に関わらず、自由な再利用が認められています。

1.Lombokのメリット

・DTOの作成が簡単になる

・コード量が減る(実装やテストの時間を短縮できる)

・フィールド名や型の修正に伴うgetter/setter修正の手間がかからない

・フィールド追加に伴うgetter/setter追加の手間がかからない

・参照する側の変更は必要なく、そのままgetter/setterを利用できる

2.Lombokのデメリット

・javaファイルにclassファイルの内容が表示されない

・EclipseがLombokのコード生成について認識できない

・Lombokが生成したコードにはJavaソースがないためデバッグが難しい

2. Lombokのインストール方法


1.【Windows】Lombokのインストール方法(Eclipse)

 1.公式ページ(https://projectlombok.org/)からLombok.jarをダウンロードする。

 2.ダウンロードしたjarファイルをダブルクリックしてインストーラを開く。

 3.Specify locationをクリックし、eclipse.exe が存在するフォルダを選択する。

 4.Install / Updateをクリックする。

※インストール後、eclipse.iniに以下が追記されます。
 
-javaagent:C:\path\to\eclipse\lombok.jar

2.【Mac】Lombokのインストール方法(Eclipse)

 1.ダウンロードしたJarを以下のディレクトリにコピーします。
cp ./lombok.jar /Applications/Eclipse.app/Contents/MacOS/lombok.jar

 2./Applications/Eclipse.app/Contents/Eclipse/eclipse.iniに以下を追記します。
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar


・Mavenを使用していない場合

 1.[Project Explorer]でプロジェクトを選択 > 右クリック > [Build Path]/(ビルド・パス) > [Configure Build Path...]/(ビルド・パスの構成)でダイアログを表示します。

 2.[Libraries]タブ > [Classpath] > [Add External JARs...]/(外部Jarの追加)ボタン > lombokのjarを選択します。

 3.lombokのjarの場所 : インストールでeclipse.iniに追記された-javaagentにあるパスの場所

 4.[Apply and Close]ボタンでダイアログを閉じます

 5.[Referenced Libraies]にLombokが追加されます。


・Mavenを使用している場合

 1.https://mvnrepository.com/artifact/org.projectlombok/lombok?repo=projectlombok-mavenrepo
からインストールしたバージョンのMaven用の記載をコピーします。

 2.pom.xmlにコピーした内容を貼り付けます。

 3.[Project Explorer]でプロジェクトを選択 > 右クリック > [Maven] > Update Projectでダイアログを表示します。

 4.[OK]ボタンで更新します。

 5.[Maven Dependencies]にLombokが追加されます。

3. Lombokのアノテーション一覧


アノテーション:指定場所:説明

@Getter:クラス・フィールド:デフォルトのゲッターメソッドを自動生成します。

@Setter:クラス・フィールド:デフォルトのセッターメソッドを自動生成します。

@NoArgsConstructor:クラス:引数なしのコンストラクタを自動生成します。

@RequiredArgsConstructor:クラス:finalフィールドを引数で初期化するコンストラクタ、ファクトリメソッドを自動生成します。

@AllArgsConstructor・クラス:すべてのフィールドを引数で初期化するコンストラクタ、ファクトリメソッドを自動生成します。

@EqualsAndHashCode:クラス:すべてのフィールドを使用してequalsメソッドとhashCodeメソッドを自動生成します。

@ToString:クラス:すべてのフィールドを1つの文字列表現に変換するtoStringメソッドを自動生成します。

@Data:クラス:クラスに@Getter、@Setter、@RequiredArgsConstructor、@EqualsAndHashCode、

@ToStringを指定したことと同じ作用になります。

@Value:クラス:不変クラスを作成します。クラスと全てのフィールドがfinalで修飾され、@Getter、

@RequiredArgsConstructor、@EqualsAndHashCode、@ToStringを指定したことと同じ作用になります。

@Builder:クラス:すべてのフィールドを引数で初期化するコンストラクタと、ビルダーパターンによる値の初期化のためのメソッド、ビルダークラスを自動生成します。

@With:フィールド:引数の値でフィールドを初期化した新しいオブジェクトを返すメソッドを自動生成します。不変クラスのセッターのようなメソッドを生成する機能です。

@SneakyThrows:メソッド:メソッド内で発生する検査例外を非検査例外であるRuntimeExceptionにラップしてリスローするコードを自動生成します。

@Synchronized:メソッド:メソッド全体をsynchronizedブロックで囲むコードと、synchronizedで使用するロックオブジェクトの宣言を自動生成します。

@NonNull:フィールド・引数:指定したフィールド、引数にnullを指定すると、NullPointerExceptionをスローするコードを自動生成します。

@Cleanup:変数:I/O系などのclose処理が必要な変数に指定することで、finallyでclose処理を呼び出すtryブロックで囲むコードを自動生成します。

@Log:クラス:Java標準Loggerのロガーインスタンスを保持するフィールドを自動生成します。

@CommonsLog:クラス:Apache Commons Loggingのロガーインスタンスを保持するフィールドを自動生成します。

@Flogger:クラス:Fluent Loggerのロガーインスタンスを保持するフィールドを自動生成します。

@JBossLog:クラス:JBoss Loggingのロガーインスタンスを保持するフィールドを自動生成します。

@Log4j:クラス:Apache log4jのロガーインスタンスを保持するフィールドを自動生成します。

@Log4j2:クラス:Apache Log4j 2のロガーインスタンスを保持するフィールドを自動生成します。

@Slf4j:クラス:SLF4Jのロガーインスタンスを保持するフィールドを自動生成します。

@XSlf4j:クラス:SLF4Jの拡張ロガー(XLogger)インスタンスを保持するフィールドを自動生成します。

@CustomLog:クラス:Lombokの設定ファイルで指定されたロガーインスタンスを保持するフィールドを自動生成します。

4. Lombokの仕組み

コンパイル時のクラスパスにLombokが含まれていると、コンパイル時にLombokがソースファイルを解析して、getterやsetterなどの定型コードを生成したあとにコンパイラに渡します。

そのため、ソースファイルレベルでは定型コードが含まれていなくても、コンパイル後のクラスファイルには定型コードが存在していることになります。

5. まとめ

Lombokはインストールがとても楽でコード量も減るため、便利なJavaのライブラリであると感じました。

この記事を読んだ方が少しでもLombokについて理解していただけたら幸いです。