■応用の森(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 を開きます。 |
![]() 画面の上から1/3ぐらいのところに、lombok.jar のダウンロードのリンクがあるので、これをクリックします。 ダウンロード確認で、パソコンの任意のフォルダに、lombok.jar をダウンロードして保存します。 |
※)Lombokをインストールする前に、Eclipseは終了しておいてください。 Windowsエクスプローラなどで、先ほど保存したlombok.jarのアイコンをマウスでダブルクリックすると、 インストーラーダイアログが開きます。 |
![]() 通常は、インストーラが起動して画面が開いた時点で、 中段のテキストボックスに、自分が使用するEclipseのパスがリストされているはずですが、 もし見当たらない場合は、ボックス左下の「Specify location...」ボタンで、自分のEclipseのパスを選択してください。 リストされた対象のチェックボックスをチェックして、右下の「Install/Update」ボタンをクリックすると Lombokのインストールが開始されます。 次のようなダイアログが表示されれば、インストール完了です。 ![]() |
インストールが完了したら、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 も、最新をインストールしておくことをお忘れなく。 |
Eclipseの小技集 ![]() |
LombokプラグインでAccesor(setter/getter)を自動生成する |