Lombok とは
Javaクラスを作成する際の冗長的な記述をコンパイル時に自動で生成してくれるライブラリです。
例えば以下のクラスが
public class DateTime
{
private LocalDateTime value = LocalDateTime.MIN;
public DateTime()
{
}
public DateTime( LocalDateTime value )
{
this.value = value;
}
public boolean isEmpty()
{
return value == null;
}
public boolean isNotEmpty()
{
return !isEmpty();
}
public String format( String pattern )
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( pattern);
return formatter.format( value );
}
public LocalDateTime getValue()
{
return value;
}
public void setValue( LocalDateTime value )
{
this.value = value;
}
@Override
public String toString()
{
String format = "Person(name=%s)";
return String.format(format, value);
}
}
以下のようにリファクタリング可能です。
@AllArgsConstructor
@NoArgsConstructor
@toString
public class DateTime
{
@Getter
@Setter
private LocalDateTime value = LocalDateTime.MIN;
public boolean isEmpty()
{
return value == null;
}
public boolean isNotEmpty()
{
return !isEmpty();
}
public String format( String pattern )
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( pattern);
return formatter.format( value );
}
}
さらに
@AllArgsConstructor
@NoArgsConstructor
@Data
public class DateTime
{
private LocalDateTime value = LocalDateTime.MIN;
public boolean isEmpty()
{
return value == null;
}
public boolean isNotEmpty()
{
return !isEmpty();
}
public String format( String pattern )
{
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( pattern);
return formatter.format( value );
}}
まで省略可能です。
※@Dataは@Getterや@Setter等の複数アノテーションの複合を意味する
クラス内が意味のあるメソッドのみになるのでスッキリです。
他にも色々アノテーションがありますが、
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@toString
入門レベルであれば上記あたりを押さえておけば、とりあえずは大丈夫だと思います。
導入
開発環境
- Eclipse
- Gradle
1-a. providedスコープで依存性追加(gradle2.11以下の場合のみ)
lombokはコンパイル時にアノテーションに従って各メソッドを生成するが、
gradle2.11以下だと自前でprovidedConfigurationsを追加する必要がある。
...
configurations {
provided
}
...
dependencies {
...
provided "org.projectlombok:lombok:1.16.4"
...
}
また、Eclipseで開発する場合は以下の記述も必要になる。
eclipse {
classpath {
plusConfigurations += [configurations.provided]
noExportConfigurations += [configurations.provided]
}
}
1-b. warプラグインで依存性追加(gradle2.12以上の場合のみ)
1-aでは自前でprovidedConfigurationsを定義したが、gradleのwarプラグインを追加することで、providedCompileが利用可能になるので、それを使っても良い
...
apply plugin: 'war'
...
dependencies {
...
providedCompile "org.projectlombok:lombok:1.16.4"
...
}
1-c. compileOnlyで依存性追加(gradle2.11以下の場合のみ)
gradle2.12からはデフォルトでprovidedにあたるcompileOnlyというスコープが追加されたのでそれを利用する。
...
dependencies {
...
compileOnly "org.projectlombok:lombok:1.16.4"
...
}
2. Eclipseにlombokプラグインの追加
依存性を追加しただけでは、ビルドしたアプリは問題なく動くがIDE上では認識されないのでlombokプラグインを追加する必要がある。
公式サイトからjarをダウンロード
https://projectlombok.org/download.html
Windowsの場合
ダウンロードしたjarをダブルクリックすることでインストーラーが起動するのでEclipseのexeファイルを選択することで設定完了となります。
Macの場合
ダウンロードしたJarを以下のディレクトリにコピー
cp ./lombok.jar /Applications/Eclipse.app/Contents/MacOS/lombok.jar
/Applications/Eclipse.app/Contents/Eclipse/eclipse.iniに以下を追記
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
これでEclipse上でLombokのアノテーションが有効化されます。
これで無駄なコーディング時間を抑える事が可能になりました。
ただ、オブジェクトによってはSetterを作らない方が良いケースもあるのでうまく使い分けて快適なJavaライフを過ごしましょう♪
※Kotlinを使えばlombokを導入する事なく同様の事ができますがそれはまた別のお話。。。
次回
次はオブジェクトの生成に関するアノテーションを紹介したいと思います。
じゃあの。