Posted at

声に出して読みたい Android のライブラリ - その3

More than 5 years have passed since last update.

声に出して読みたいObjective-Cのライブラリ8種(2014.7) に触発されて書いてみます。


第一回はこちら

前回はこちら


今回は、アノテーションを用いた、アスペクト指向っぽいものを中心に紹介します。


hugo

https://github.com/JakeWharton/hugo

安心と信頼の JakeWharton 先生のライブラリでございます。

デバッグ時にメソッドコールをロギングしてくれるライブラリで、ログ出力をしたいメソッドに対して@DebugLogアノテーションをつけることで、そのメソッドの呼び出しと終了がロギングされます。呼び出されたスレッドと、終わるまでに要した時間も出力されます。

アノテーションの実体はhugo-annotationsにありますが、ログ出力処理そのものはhugo-runtimeにあります。hugo 自体は、AspectJ をベースに、@DebugLogアノテーションのついたメソッドが呼ばれたのを検知して処理を実行しています。このあたりの処理の実体は、hugo-runtimeの中のHugoクラスが担当しています。

AspectJ がベースになるため、別途hugo-pluginで提供される Gradle Plugin を使用する必要があります。


paraphrase

https://github.com/JakeWharton/paraphrase

安心と信頼の JakeWharton 先生のライブラリでございます。

文字列のフォーマットを安全に取り扱い、コンパイル時に間違いに気付くことができるような仕組みを提供してくれます。

通常、文字列フォーマットでは、%1$sなどの特殊なプレースホルダを用い、データ型ごとにフォーマットが異なったり、複数ある場合は順番を考慮したフォーマットにする必要があったりなど、何かと気を付けるポイントが多いです。また、取り扱いを間違えても、コンパイル時には何のエラーも出ないため、実行時に初めて間違いに気づきます。

paraphrase では、文字列フォーマットを型を用いてビルドできるようにすることで、間違いがあった場合にはコンパイルエラーで検知できるようになり、かつ型があるので、順番を気にすること無く、命名されたプレースホルダに流し込みたい文字列を入力するだけでフォーマットが完了します。これによって安全に文字列フォーマットが取り扱えるというわけです。

似たようなものに square/phraseがありますが、paraphrase はより厳密に型を用いたフォーマットをする事ができます。

リソースを型に組み上げるため、Gradle のプラグインを導入する必要があります。


scapel

https://github.com/JakeWharton/scalpel

安心と信頼の JakeWharton 先生のライブラリでございます。

View のデバッグ用途として、画面をグリグリすると 3DCG みたいに View のヒエラルキーを見ることができるようになるツールです。

root となる View をScalpelFrameLayoutにして、必要な設定をすれば、指の動きに合わせて View の構造が見えるようになります。


LogHouse

https://github.com/rejasupotaro/LogHouse

アプリの開発・運用において、ログの収集は非常に重要な役割を担います。特にネイティブアプリでは、ログは端末からサーバへ送信しなければ解析をすることができません。

この LogHouse は、ログの蓄積と非同期処理による送信・リトライなどのボイラプレートな部分の面倒を見てくれるので、自分たちがほしいログの定義と、実際に送信する先をどうするかにフォーカスすれば、あとはよしなにしてくれるすぐれものです。


icepick

https://github.com/frankiesardo/icepick

アノテーションによって、ライフサイクルを超えて保存しておきたいデータを宣言的に記述するためのライブラリです。Activity#onSaveInstanceStateActivity#onRestoreInstanceStateで行う各種の保存・復元処理をアノテーションによって置き換えることが可能です。


saripaar

https://github.com/ragunathjawahar/android-saripaar

入力のバリデーションをアノテーションによって行うためのライブラリです。

入力された文字列のパターンや文字数、チェックされているかどうかなどの各種の状態をアノテーションで宣言すると、バリデーションのロジックがそれに応じて差し込まれ、リスナ経由でその結果を得ることができます。