声に出して読みたいObjective-Cのライブラリ8種(2014.7) に触発されて書いてみます。
今回は、アノテーションを用いた、アスペクト指向っぽいものを中心に紹介します。
hugo
安心と信頼の JakeWharton 先生のライブラリでございます。
デバッグ時にメソッドコールをロギングしてくれるライブラリで、ログ出力をしたいメソッドに対して@DebugLog
アノテーションをつけることで、そのメソッドの呼び出しと終了がロギングされます。呼び出されたスレッドと、終わるまでに要した時間も出力されます。
アノテーションの実体はhugo-annotations
にありますが、ログ出力処理そのものはhugo-runtime
にあります。hugo 自体は、AspectJ をベースに、@DebugLog
アノテーションのついたメソッドが呼ばれたのを検知して処理を実行しています。このあたりの処理の実体は、hugo-runtime
の中のHugo
クラスが担当しています。
AspectJ がベースになるため、別途hugo-plugin
で提供される Gradle Plugin を使用する必要があります。
paraphrase
安心と信頼の JakeWharton 先生のライブラリでございます。
文字列のフォーマットを安全に取り扱い、コンパイル時に間違いに気付くことができるような仕組みを提供してくれます。
通常、文字列フォーマットでは、%1$s
などの特殊なプレースホルダを用い、データ型ごとにフォーマットが異なったり、複数ある場合は順番を考慮したフォーマットにする必要があったりなど、何かと気を付けるポイントが多いです。また、取り扱いを間違えても、コンパイル時には何のエラーも出ないため、実行時に初めて間違いに気づきます。
paraphrase では、文字列フォーマットを型を用いてビルドできるようにすることで、間違いがあった場合にはコンパイルエラーで検知できるようになり、かつ型があるので、順番を気にすること無く、命名されたプレースホルダに流し込みたい文字列を入力するだけでフォーマットが完了します。これによって安全に文字列フォーマットが取り扱えるというわけです。
似たようなものに square/phraseがありますが、paraphrase はより厳密に型を用いたフォーマットをする事ができます。
リソースを型に組み上げるため、Gradle のプラグインを導入する必要があります。
scapel
安心と信頼の JakeWharton 先生のライブラリでございます。
View のデバッグ用途として、画面をグリグリすると 3DCG みたいに View のヒエラルキーを見ることができるようになるツールです。
root となる View をScalpelFrameLayout
にして、必要な設定をすれば、指の動きに合わせて View の構造が見えるようになります。
LogHouse
アプリの開発・運用において、ログの収集は非常に重要な役割を担います。特にネイティブアプリでは、ログは端末からサーバへ送信しなければ解析をすることができません。
この LogHouse は、ログの蓄積と非同期処理による送信・リトライなどのボイラプレートな部分の面倒を見てくれるので、自分たちがほしいログの定義と、実際に送信する先をどうするかにフォーカスすれば、あとはよしなにしてくれるすぐれものです。
icepick
アノテーションによって、ライフサイクルを超えて保存しておきたいデータを宣言的に記述するためのライブラリです。Activity#onSaveInstanceState
やActivity#onRestoreInstanceState
で行う各種の保存・復元処理をアノテーションによって置き換えることが可能です。
saripaar
入力のバリデーションをアノテーションによって行うためのライブラリです。
入力された文字列のパターンや文字数、チェックされているかどうかなどの各種の状態をアノテーションで宣言すると、バリデーションのロジックがそれに応じて差し込まれ、リスナ経由でその結果を得ることができます。