最後にあれしたのいつだっけ?をトラッキングするAndroidアプリ、SinceTimerをリリースしてた

feature

掲題のとおり、今年の7月末にアプリをGoogle Play Storeに公開していました。気がついたら4ヶ月も下書きのまま放置してしまっていた…

名前は"SinceTimer(シンスタイマー)"です。

「最後に映画観たのいつだっけ?」とか「最後にラーメン食べたのいつだっけ?」とかいった情報を管理するためのアプリです。


画面

トップ画面はこんな感じで

トップ

イベントの追加画面はこう

追加

各イベントの詳細では履歴が一覧できます。FABから新しい履歴を追加

詳細

今回はGoogle I/O 2018で発表された新しいMaterial Designを意識して作っています。

アイコン

今までは99designsで依頼してたのですが、今回はSketchで自作してみました。
素人にしてはソレっぽいのができてかなり気に入っています。
Material Designはガイドラインがしっかりしているので、やっぱいいですね。

今後の展望

もうちょっとほしい機能があるので、引き続き開発は続けていくつもりです。

  • ダークテーマ
  • タイマー
  • 課金で広告非表示
  • 検索

※ここから下は技術者向け ----------

使った技術とか

Android Architecture Components(以後AAC)をガッツリ使ってます。
最近は公式のライブラリが充実してきたので、迷うことが減っていいですね。初心者的には学ぶことが増えて一長一短でしょうけど…。

最初はSingle Activityな構成にしようかと思ったんですが、「Toolbarの形が大きく異なる場合にどうするの?」という問題をうまく解決できそうになかったので、Activityは各画面で別になっています。
この問題、googlesamples/android-sunflowerでもissueがあがっていて、まだ公式でも意見がまとまっていないようです。うまいこと解決できるといいのですが。

データベースはAACのRoomを使っています。RxJavaやLiveDataによるリアクティブな使い方をサポートしていて、ホントに使いやすいです。
なにより、自分で書いたSQLの結果をクラスに楽にマッピングでき最高です。もうテーブル構成まんまなデータをプレゼンテーション層で使う時代は終わったのです。
2.1.0からはFTSやViewもサポートするようなので、今後 LIKE を使わない検索の実装にも役立ちそうです。自力でN-gram的なことをしなきゃなんで、また別の困難はありそうですが。

Architecture?

Clean Architecture x MVIな感じです。
AACのViewModelがUsecaseとReducerを持ち、画面のState(Kotlinのdata class)をLiveDataでFragmentに公開しています。

AndroidだとWebの仮想DOM的な差分更新の仕組みがないので、新しいStateとViewの状態を比べて更新の可否を決めるようなコードを書くことになり、若干手間はかかります。

Stateの更新場所がまとまるのは大変良いので、AirbnbのMvRxとかいろいろ先達を参考にしつつよい方法を模索していきたいです。

参考