Androidアプリを開発していると、単純な処理を実装するだけでもコードが長くなってしまいます。煩わしいと感じる人も多いでしょう。今回紹介するAndroidAnnotationsは、劇的にコードの記述量を抑えることができる夢のようなライブラリです。

アノテーションを利用

 Javaでは、「@Overide」など「@」から始まるアノテーションをソースコードに記述して、警告メッセージを抑制したり、実行時にソースコードを自動生成したりできます。アノテーションの使い方には、大きく2種類あります。実行時にアノテーションを読み取るタイプ、もう一つがコンパイル時に読み取るタイプです。前者が一般的で、後者はほとんど知られていないと思います。AndroidAnnotationsは後者になります。このアノテーションを処理するには、アノテーションプロセッサと呼ばれる専用のクラスを使います。

 AndroidAnnotationsは、コンパイル時にコードを生成して、様々な機能を実現させるライブラリです。実装したい処理の先頭に対応したアノテーションを付属するだけで、AndroidAnnotationsが自動的にコードを生成してくれます。

 このAndroidAnnotationsは、Pluggable Annotation Processing API(旧称Annotation Processing Tools)を使っています。このAPIのポイントは、Javaソースのコンパイル時に、ライブラリ独自のアノテーションプロセッサを動作させられる点です。

 最大の利点は、コンパイル時に様々な計算処理やエラーチェックができるため、手で丁寧に記述したコードと同じ処理を自動的に埋め込むことができ、しかも実行時にはクラッシュする危険のない安全なコードとして実行できることです(図1)。

図1●アノテーションプロセッサを使って処理を埋め込むことができる
図1●アノテーションプロセッサを使って処理を埋め込むことができる
[画像のクリックで拡大表示]

定番処理から利点を学ぶ

 任意のViewにClickイベントのハンドラを設定する例をみてみましょう。イベントのハンドラを設定するには、Fragment内でリスト1のコードを書きます*1。とてもすっきりしています。アノテーションを付けたコードは、AndroidAnnotationsによって、コンパイル時にSampleFragmentを継承したSampleFragment_という名前のクラスが自動生成されます。

リスト1●任意のViewにClickイベントのハンドラを設定する
リスト1●任意のViewにClickイベントのハンドラを設定する
[画像のクリックで拡大表示]
*1 SampleFragment自体にも、@EFragmentアノテーションを付ける必要があります。

 生成されたSampleFragment_には、リスト2のコードが含まれます*2。インスタンス変数として定義したViewにfindViewByIdメソッドを使ってあらかじめ中身を詰めておく処理が実装できています。LayoutのXMLやコード中からFragmentを利用するときは、SampleFragmentではなく、代わりに自動生成されたSampleFragment_の方を利用するように設定します。

リスト2●生成されるコードの一部
リスト2●生成されるコードの一部
[画像のクリックで拡大表示]
*2 実際に生成されたコードを少し整形して読みやすくしています。

 SampleFragment_も手で書いたコード同様、コンパイラによってチェックされた後コンパイルされるので、手で丁寧に書いたコードと同じように扱えます。しかも、自動生成されたコードは、Androidのお手本のようなコードなので、可読性があり安全性(実行時エラーにならないコード)も優れていると言えるでしょう。