記念日を忘れないためのAndroidアプリをつくった

以前、記念日を忘れないためのWebアプリを作りました。

bati11blog.hatenablog.com

しかし、致命的な弱点がありました。それはオンラインじゃないと動かないということです。つまり、飛行機で上空にいるタイミングで「もう少しで結婚記念日だわね〜」みたいな会話になった時に、何年目だっけ!?というのをすぐに確認できません!!!

というわけでAndroidアプリとしてオフラインで動くように作りました。あと通知でリマインドする機能も追加。これでばっちりです。

github.com

登録画面 登録画面 通知


開発メモ

という理由に加えて、2020年になってから久しぶりに仕事でもガッツリとAndroidアプリ開発に携わることにもなったので、練習がてら作り初めてみたのです。

久しぶりのAndroidアプリ開発は、以前と比べてとても快適になっていました。これまでにもいろいろなアーキテクチャコンポーネントがありましたが、2020年時点では Jetpack というラベル付けで提供されるものを使うと良さそうです。

快適とはいえ学ぶことは多かったので、どんなことを調べたっけなというのをメモ。

Kotlin

プログラミング言語JavaではなくKotlinになってる。Kotlin Bootcamp Courseというcodelabをやりつつ公式ドキュメントを参照するというのをやった。Kotlin イン・アクション という本も読んだけどKotlinのバージョンが古いので、こちらも公式ドキュメントを参照しながら。特にCoroutine周りは公式ドキュメントが読みながらコード書いてみるのが良い。

Jetpack

Kotlinを使ったAndroidアプリ開発のcodelabをやった。Jetpackコンポーネントも使いつつなので良い。

Android KTXを使うといろいろ便利。以下をよく使う。

  • Fragment KTXby viewModels
  • Lifecycle KTXviewLifeCycleOwner

codelabが終わったらすぐに以下の記事を読んでおけばよかった。

Dagger

DIコンテナ。Android DevelopersにもDaggerのページがあるし、codelabも用意されているのでデファクトスタンダード感。これらのドキュメントのViewModelはJetpackのViewModelではないのでちょっと混乱した...

Dagger単体ならまだしもAndroidと合わせて使うと難しい。この本読みながらいろいろ試行錯誤した。

DaggerのAndroid拡張はドキュメントや本を読んでもスッと入ってこない。SubComponentを良い感じに取り扱う方法は結局よく分からず。

テスト

テストはユニットテストをちょっとしか書けていない。ViewModelとLiveDataを使ったテストは難しい。。いろいろ読み漁った。

しかもJUnit5を普通に使うだけだとうまくいかないのを解決できずJUnit4を使ってる。Androidコンポーネントに依存しないテストはJUnit5で書くなどして、バージョン4と5が混在しても大丈夫。あんまり覚えてないけど、この記事ぱらぱらと読んだ気がする...。

モックライブラリのMockKは使いやすいと思った。

一覧画面

codelabには出てこないけどやりたかったこと。

スクロールするとUIにないデータを取りにいくという処理はpagingを使う。

スクロールに応じてToolbarやFloating Action Buttonを動かすにはCoodinateLayoutを使う。

UIの細かいところ

角丸にするのがよく分からなかったり...

リップル対応したり...

アイコン

こちらを使って W の1文字で...

ライセンス表記

使用しているライブラリのライセンス表示はこちらを使って。

開発中のデバッグ

このスライドがとても参考になった。

おしまい

Androidは自分のためのアプリをつくって日常で使えて良いですね!