最近いくつかlombokが話題になってた
- lombokで快適Java生活 サイバーエージェント公式エンジニアブログ
- JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由
- Java特有の冗長なコードを簡潔に記述する「Lombok」 codezine
ので、twitterなどでは何度かつぶやいた私見を、改めてblogにも書いておこうかと思います。Scalaもlombokも好きなので、ある意味「Scala使えばいいじゃん」という単純な意見に対する反論でもあります。
lombok自体のそれぞれの細かい機能の紹介は、先ほど上げたリンク先で既に語られてるのでしません。
個人的意見としては、上記2点がかなり大きいです。「Javaからの移行のしやすや、取っ付きやすさ」を上げる人がいるかもしれません。もちろんそれもlombokのメリットだとは思います。しかし、Scalaの言語自体に慣れれば「移行のしやすや、取っ付きやすさ」は、ある程度どうにかなるのに対して、IDEの問題とコンパイル時間は、いくらScalaに慣れてもどうにもなりません。まぁIDEのほうは
「IDEの支援があっても無くても変わらないくらいの境地に達してスラスラ書ける」
というのはありえるかもしれませんが、コンパイル時間は本当に頑張っても現状はどうしようもありません。
あとはlombokに関しては「Androidのユーザーに勧めたい」です。理由としては
- runtimeのjarサイズとproguard
- IDE
ちなみに、Androidでlombokやるには少し設定が必要です
http://projectlombok.org/setup/android.html
が、逆にlombokの公式ページに専用のページがあるように、ある程度公式的にAndroidに関して力を入れているようです。個人的に「lombok + Android」やってたことがあるのですが、手順通りやれば「lombok + Android特有の問題」にハマったことはありませんでした。
まとめると、Scalaは
「新しい機能が多い(=メリットが大きい)代わりに、Javaと比べて明らかなデメリット(IDE問題、コンパイル時間)が数点ある」
のに対して、lombokでは
「Scalaにおいてのデメリット(IDE問題、コンパイル時間)がほぼ生じない」*2
ということです。(当たり前ですが、そのかわりScalaに比べたら機能は圧倒的に少ない)
Scalaは学習していって、「Scalaのメリットがデメリットを上回って、Javaを使うよりも生産性を発揮できる」のに時間がかかったり、その「Javaを使うよりも生産性を発揮できる」時点に到達するまでの期間がはっきり予測できないのに対して、lombokの場合は「Scalaのように"明らかに目立つデメリット"が最初からほとんどない」ということです。*3
あと、上記の3つのリンク先でどれも言っていないけれど、重要なことだと思うので改めて書いておきますが、lombokは
「eclipseのコンパイラではコンパイルできるのに、javacではコンパイルできなくなる」
という現象が発生することがあります。発生条件はよく分かってませんが、valを多用すると起きるようです。(これ書いてる時点で最新のlombok0.12.0で確認)
実際のエラーはこんな感じ https://gist.github.com/xuwei-k/6126569
そうすると
- jenkinsでのビルドできなくなる?
- mavenやsbtやgradleなどでもビルドできなくなる?
などの問題が発生します。上記のツールが間接的にeclipseのコンパイラを使えるように設定できれば、問題なくなるでしょう・・・。が、自分がsbtでやろうとしたときは全然うまくいきませんでした。だれかその辺のノウハウ(javacでコンパイルできなくなる詳細な条件、eclipseのコンパイラを他のツールから使う方法)まとめてください。以前調べたときは、mavenならeclipseのコンパイラ使うことできるらしい・・・という情報は見つけましたが、自分では試しませんでした。
あと最後に、以前「ブラウザ上でlombokのコードがどのようにJavaに展開されるか確かめることができるサイト作ったよ」という宣伝
http://lombok.herokuapp.com
https://github.com/xuwei-k/lombok.herokuapp.com