アプリをフルリファクタリングしました。
このアプリって?
1回目の無職期間に、Androidアプリの練習をしようと思って作ったものです。
やりたかったことは「毎日 or 曜日ごとに繰り返すTODOの管理」になります。そのため、下記2点ほどを実現することとしています。
- TODOにDBに保存
- 登録した時間になったら繰り返し実行
旧バージョンでの実現方法
作成したのが2017年1月ごろだったので、基礎の基礎から組み上げてやろうと考えてました。
- TODOをDBに保存
- 登録した時間になったら繰り返し実行
- Android 5.0以上を対象としたため、JobSchedulerによる実現をしてみることに
- 実現のため、LocalDate型の導入のためにThreeTenABPに頼ることに
そのほかはDataBindingとか、Snackbarを入れてみるとか程度のことをしていました。
新バージョンでの実現方法
9月から転職したので、その直前の有給期間からAndroidX(当時はalpha版)を利用してフルリファクタしてみようと考えていました。 前職ではAndroid Architecture Componentsを導入してMVVMな感じにアプリをリファクタしたこともあったので、「じゃあ今一番新しいものを使って書くとしたらどうなるんだろう」ってな感じで興味が湧いたためです。
- TODOをDBに保存
- 登録した時間になったら繰り返し実行
- AlarmManagerを選択
- 結局、一度もAlarmManagerを触ることなくAndroidエンジニア4年目に入ってしまったで、ここで触らないと触る機会なさそうだなと感じたのが一番の理由
- JobSchedulerやWorkManagerを利用することも検討し、バージョンアップで置き換えてみれば置き換えの経験も積めそうだなーというのが目論見に
- AlarmManagerを選択
8月中はがっつりと、9月以降は土日とか平日の夜とか使って書いてました。途中、AndroidStudio3.2系から3.3へのアップデートが発生したり、Dagger + ViewModelの関係でビルドが通らなくなったりといったトラブルに巻き込まれたので、期間としては2ヶ月ほどかかってしまいましたね。もうちょっとコンパクトにできればなーと思いますが。
AndroidX対応
どうせならtargetSDKを28にしてしまえということで、androidxを入れました。感想です。
- よかったこと
- Material Design 2がのテキストフィールド、SnackBarの動作が良い
- 複数の選択をさせたい時のChipの使い勝手が非常に良い、革新的
- 大変だったこと
- PreferenceFragmentCompatを利用していたのですが、Preferenceクラスの実装がリファクタされていたのに気づくのが遅れ、大幅に実装し直すことに
- SupportLibraryのクラスを追加する時、それがandroidxでどのパッケージに入っているか自分で調べるのが(少し)難しい
- (alphaだからだけど)ビルドエラーが頻発する
対応タイミングとしては、製品なら年明けぐらいがいいのかなーと思っています。早くBrowserのバグ直ってほしい。
今後
DailyToDoをiOSでも動かしたいので、Flutterで改めて実装してみようかなーと。 新しい技術、触っていきたいですね。