JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■応用の森(Eclipse編) LombokプラグインでAccesor(setter/getter)を自動生成する
つい最近(2016年暮れ)のことになりますが、
最近始めた、Spring Boot の情報をネットで漁っていたところ
思わぬ掘り出し物を見つけたので、簡単にご紹介しておきます。

Lombok(「ロンボック」もしくは「ロンボク」)という
Javaのボイラープレートコードを
アノテーションを使って、スッキリ、シンプルにしてくれるプラグインです。
 ※)ボイラープレートコードとは、getter/setter などの典型的な鋳型コードの事らしい。
   なので、Eclipseには、これらの自動生成機能がある訳ですが。

と言いつつ、このプラグイン自体は2009年頃から既に存在しているようなので、
つい最近までこの存在を知らなかった私が、単にオバキャなだけなのかもしれませぬが。。。

このプラグインは、ボイラープレートコード以外にも色々強力な機能があるみたいですが
ここでは、Accesor自動生成 に的を絞りますので、それ以外の機能に興味のある人は
「lombok」で検索すれば、山ほど情報があるので自分で勉強してみてください。

では、まず最初のLombok IDEのインストールから説明します。
2017年1月の現時点では、Eclipseマーケットプレイスには残念ながらまだ無い様なので、
Lombokダウンロードの公式サイト Project Lombok - Download を開きます。
Project Lombok - Download

画面の上から1/3ぐらいのところに、lombok.jar のダウンロードのリンクがあるので、これをクリックします。
ダウンロード確認で、パソコンの任意のフォルダに、lombok.jar をダウンロードして保存します。
※)Lombokをインストールする前に、Eclipseは終了しておいてください。

Windowsエクスプローラなどで、先ほど保存したlombok.jarのアイコンをマウスでダブルクリックすると、
インストーラーダイアログが開きます。
Lombok Install

通常は、インストーラが起動して画面が開いた時点で、
中段のテキストボックスに、自分が使用するEclipseのパスがリストされているはずですが、
もし見当たらない場合は、ボックス左下の「Specify location...」ボタンで、自分のEclipseのパスを選択してください。
リストされた対象のチェックボックスをチェックして、右下の「Install/Update」ボタンをクリックすると
Lombokのインストールが開始されます。

次のようなダイアログが表示されれば、インストール完了です。

Lombok Install
インストールが完了したら、Eclipseを起動します。
で、このままだと、Eclipseの開発環境ではLombokの恩恵にはあやかれますが、
運用環境での運用時には、Lombokが動いてくれないので、
運用環境デプロイ時のために、lombokプラグインを設定します。

・Maven プロジェクト の場合
 pom.xml に以下を追加します。
   <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.12</version>
   </dependency>
 追加したら、ナビゲータビュー(プロジェクトエクスプローラービュー)のプロジェクトをマウス右ボタンクリック
 メニュー「Maven」ー「プロジェクトの更新」で、Lombokプラグインがプロジェクトに反映されます。
 
 最新のバージョン等については、Maven Repository
 「lombok」で検索してみてください。

・Gradle プロジェクト の場合
 build.gradle に以下(青字)を追加すればいいはず(動作未確認です)
   dependencies {
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.projectlombok:lombok:1.16.12')
        :
   }
 追加したら、ナビゲータビュー(プロジェクトエクスプローラービュー)のプロジェクトをマウス右ボタンクリック
 メニュー「Gradle」ー「すべてリフレッシュ」で、Lombokプラグインがプロジェクトに反映されます。
では、次にLombokの具体的な使い方について説明しておきます。
■SpringMVC の小径 7-1)データモデルバインド
で使用した、パラメータ格納Bean(PromenadeForm.java)を例にとって説明します。
src/main/java/jp/dip/arimodoki/model/PromenadeForm.java


7-1)データモデルバインドで説明したクラスは、上のようにいくつかのプロパティと、
普通にプロパティへのAccesor(getter/setter)があります。
これまでAccesorは、Eclipseのgetter/setter自動生成機能で作成していましたが、
Lombokを使用すると、Accesorを記述する必要がなくなります。

Lombokを使った、Beanクラス
src/main/java/jp/dip/arimodoki/model/PromenadeFormLombok.java


必要に応じて、Beanのプロパティに、@Getter/@Setter アノテーション
を付与するだけで、getXXX()、setXXX() メソッドが使用できるようになります。
プロパティごとに一々、@Getter @Setter アノテーションを付けるのが面倒な場合は、
クラスの頭で、@Dataアノテーションを付けてあげれば
一括してすべてのプロパティのAccesor(getter/setter)が自動生成されるようになります。
 ※)ただし、Javaソースのコンパイル時に生成されるので、ソースコード上には現れません。
おぉ!なんとエレガントな!!

ただ、一つだけ惜しい点は、Lombokで自動生成されたAccesor(getter/setter)を
Eclipseのリファクタリング ー「インターフェースの抽出」機能で、インターフェースは作ってくれません。
Springで、クラスをDIする際は、
@Autowiredを使って、クラスの実体ではなくインターフェースを指定するのが一般的なお作法ですが、
クラスの実体を指定しても問題はないので、この辺はなんとかうまく使い分けるようにすれば大丈夫そうです。
ということで、遅まきながら
これから作る私のコードには、度々出現することになりそうです。
ありがたや、ありがたや

 

※)2018/Jun/04 JDK-10移行
JDK-10に移行するにあたり、ちょっとはまってしまったので、
備忘録として残しておきます。
Linux上の、実行環境は単純に、Javaのパスを切り替えるだけですんなりと動いたものの、
いざ、Maven pom.xml を使ってLinuxでビルドしようとしたところ、
いくつかビルドエラーが出てビルドが異常終了します。
(※Eclipse上では特に異常は出ないのですが。。。)
調べたところ、JDK-10では、どうもlombokのバージョンが1.16.22(以降)じゃないと
ビルドエラーとなるようです。
なので pom.xml の以下を1.16.22に修正します。
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.16.22</version>
  </dependency>
以上で、lombokのビルドエラーはとりあえず回避できました。

pom.xml の修正とは別に、このページの最初で説明した
lombok IDE も、最新をインストールしておくことをお忘れなく。