LoginSignup
10
11

More than 5 years have passed since last update.

Lombok ①導入編

Last updated at Posted at 2017-03-29

Lombok とは

Javaクラスを作成する際の冗長的な記述をコンパイル時に自動で生成してくれるライブラリです。

例えば以下のクラスが

DateTime.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);
    }

}

以下のようにリファクタリング可能です。

DateTime.java
@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 );
    }
}

さらに

DateTime.java
@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を追加する必要がある。

build.gradle
...
configurations {
    provided
}
...
dependencies {        
...
    provided "org.projectlombok:lombok:1.16.4"
...
}

また、Eclipseで開発する場合は以下の記述も必要になる。

build.gradle
eclipse {
    classpath {
        plusConfigurations += [configurations.provided]
        noExportConfigurations += [configurations.provided]
    }
}

1-b. warプラグインで依存性追加(gradle2.12以上の場合のみ)

1-aでは自前でprovidedConfigurationsを定義したが、gradleのwarプラグインを追加することで、providedCompileが利用可能になるので、それを使っても良い

build.gradle
...
apply plugin: 'war'
...
dependencies {        
...
    providedCompile "org.projectlombok:lombok:1.16.4"
...
}

1-c. compileOnlyで依存性追加(gradle2.11以下の場合のみ)

gradle2.12からはデフォルトでprovidedにあたるcompileOnlyというスコープが追加されたのでそれを利用する。

build.gradle
...

dependencies {        
...
    compileOnly "org.projectlombok:lombok:1.16.4"
...
}

2. Eclipseにlombokプラグインの追加

依存性を追加しただけでは、ビルドしたアプリは問題なく動くがIDE上では認識されないのでlombokプラグインを追加する必要がある。
スクリーンショット 2017-03-25 20.29.31.png

公式サイトからjarをダウンロード
https://projectlombok.org/download.html

Windowsの場合
ダウンロードしたjarをダブルクリックすることでインストーラーが起動するのでEclipseのexeファイルを選択することで設定完了となります。

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

/Applications/Eclipse.app/Contents/Eclipse/eclipse.iniに以下を追記

eclipse.ini
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar

これでEclipse上でLombokのアノテーションが有効化されます。

スクリーンショット 2017-03-25 20.27.12.png

これで無駄なコーディング時間を抑える事が可能になりました。

ただ、オブジェクトによってはSetterを作らない方が良いケースもあるのでうまく使い分けて快適なJavaライフを過ごしましょう♪

※Kotlinを使えばlombokを導入する事なく同様の事ができますがそれはまた別のお話。。。

次回

次はオブジェクトの生成に関するアノテーションを紹介したいと思います。

じゃあの。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11