@Deprecated AndroidAnnotations + lombok と spock + Robolectric みたいな環境作ってみた


## Deprecated

一年前の記事で、
* 今なら正直使わない＆使えない
なんだけど何故かストックされるので…

理由はめんどいので特に述べない

この手の情報はすぐ古くなるから、今後はメンテナンス出来るような内容で投稿したいところ

## 元記事

件の通りそんな環境構築してました

[Github](https://github.com/daneko/android_template.g8)に上げてますので、とりあえず試したい方は下記でどうぞ

```sh
g8 daneko/android_template
```

gradleでgiter8みたいなものあるのか知らないので、giter8で作りました

g8ってなに？って方は[こちらをどうぞ](https://github.com/n8han/giter8)

scala触っている人にはお馴染みですので、これを気にScalaに移行してみてはいかがでしょう？ｗ

### なぜこんなものを作ったか

ここ一年くらいScalaヒャッハーな環境でしたが、今月（2014/05）から突然Androidアプリを引き継ぐことに…(´・ω・｀)ｼｮﾎﾞｰﾝ

もちろん時間が許すならScalaで書きなおして…ってのが個人的にはベストですけど…

で、まー、大体自分が引き継ぐって言うと突っ込みどころ数多なものが届くんですね、何故か。

大体説明受けると
「 **時間が無い中で作った** からテストも無ければ、コードに統一感もありません！
  CI? なにそれ??
  とりあえず動いています( ｰ`дｰ´)ｷﾘｯ」
以上は無いわけです…

え、それに俺が手を加えるの…みたいな。

時間がなければ何やってもいいのかよ…と切れてもしゃーないし(実際切れたけど)、
次またどこかで「Androidアプリ作るわー、急ぎでー」みたいなものに対して
「ある程度環境サクッと作れるよ〜」というひな形を作っておけば、
多少はマシになるんじゃないかな〜という希望的観測で作りました

とはいうものの、自分もAndroidとか3月末に久々に触りだしたし（しかもScalaだし）、詳しくないからあれですけど

挙句

* gradle
* AndroidAnnotations
* lombok
* groovy
* spock
* robolectric

全て触ったこと無いｗｗｗ ので間違っているところ等々はご教示していただきたいです

## 入っているものの雑感

### [AndroidAnnotations](http://androidannotations.org/)

Androidのコードを劇的にDietしてくれる便利なやつです！
以上の情報は持ち合わせていませんｗ

同じようなものだと[ButterKnife](http://jakewharton.github.io/butterknife/)とかもそうなんでしょうか？

[roboguice](https://github.com/roboguice/roboguice)も同じような扱いでいいのかな？

まー便利です。多分。

ただ、一度も素のAndroidのコード書いたこと無かったら、逆に意味わからなくなりそう…

### [lombok](http://projectlombok.org/)

4月まで同じセクションに居たjava屋さんが使っていて「(・∀・)ｲｲ!!よこれ！！」ってことで入れてみました

素のジャバっぽい何かを書くより断然良いです

Intellij / Android Studio 上で使うときは[plugin](http://plugins.jetbrains.com/plugin/6317)が多分無いと色々とやり辛いと思います

#### 問題点

* intellij idea / Android Studio 上で [val](http://projectlombok.org/features/val.html) を認識してくれなくて辛い
* [このあたり](http://projectlombok.org/features/Constructor.html)が@java.beans.ConstructorPropertiesを使っているっぽいのだけど、Androidにはそれが無いので動かないという悲しさ
  * これなんで無いんだろう…
  * [suppressConstructorProperties = true](http://projectlombok.org/features/Constructor.html)にすることで利用可能でした（ただしdeprecated扱いになっているけど…) // 2014/09/16 追記

### [robospock](http://robospock.org/)

* JVM上でAndroidのテストを出来るようにしてくれる[robolectric](http://robolectric.org/)
* Groovy製の素敵なテストフレームワーク[spock](https://code.google.com/p/spock/)

を足したもの

ちなみにspockとかこれまで使ったこと無いんですけど、素敵なやつです（ぇ）
よくこんなこと出来るよ！ってので[DataTables](http://docs.spockframework.org/en/latest/data_driven_testing.html#data-tables)とかを見かける気がします

どうでもよいですが、scalaのテストフレームワークのspecs2でも[おんなじような物](http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#DataTables)あります

ようは最近のものは便利ですね〜 というお話


#### 問題点

* 自分の調査不足とか技術不足とかやる気の無さで、AndroidAnnotationsと組み合わせた時に
[sample](http://robospock.org/)のように `apply plugin:robospock` みたいな形だと
ちゃんと動かせなかった
  * ので、[こんな形になった](https://github.com/daneko/android_template.g8/blob/master/src/main/g8/robospock/build.gradle)
* とかなんか[ハマった記録は残した](https://github.com/daneko/android_template.g8/blob/ac358034e3e3e25f40929639b40df181aa845697/src/main/g8/README.md#%E3%83%86%E3%82%B9%E3%83%88%E7%B3%BB%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%82%92%E3%81%97%E3%81%9F%E6%99%82%E3%81%AE%E3%83%A1%E3%83%A2)ので誰かが直してくれるのを期待してみる

## 全体を通しての感想

* あとはGuavaとか入れたいよね〜とか考え出したら切りないなこれ
* template自体をTravis Ci 使ってテストしたいけどどうすればよいかわかんない
  * ので暫定的に[手動確認用script置いといた](https://github.com/daneko/android_template.g8/blob/ac358034e3e3e25f40929639b40df181aa845697/test.sh) (きっと誰かがこういう時はこうすると良いよ！と教えてくれるはず…ｗ)
* AndroidAnnotations Androidに依存する部分に関しては凄く便利だけど、素のAndroidをScalaで書くのとトータルでどっちが楽なのかわからん。
  * 結局設計次第かなぁ…
 

## 最後に

今どきAndroidアプリ作るなら、これは必須だろ〜
みたいなもので導入がだるいもの(dependenceisに突っ込むだけじゃダメというか)を教えていただきたいです、お願い致します。