Kotlinの入門がてら作ったのですが、リリースに至るまでの流れとか利用してるライブラリとかの話しをしようかなと思います。
ざっくり以下の話しをしようと思います。
- 作ったものについて
- 開発期間について
- Kotlinについて
- 利用したライブラリなどについて
- CIについて
- タスク管理について
作ったものについて
画面はこんな感じで普通にRecylerViewでのリスト表示です。 今回は、Android Architecture ComponentsのPagingLibraryを使ってかなり楽できました。(またあとで説明します)
このアプリの自分の用途について
毎クール30作品とか全部見てると時間がいくらあっても足りないので、 視聴中アニメでモチベーションが低くなってる作品のステータスを(見てる -> 一時中断 -> 視聴中止)にちゃんと更新したかった。 というモチベーションで作りました。
どのアニメ観ようかな〜とかの用途ではなく、観てる前提で自分は何を観るきなくしているのか?や自分が次に観るべきアニメはどれなんだというのを把握して確実に消化していく用途です。
ちなみに視聴時の自分ルールはこんな感じ
- 今期で3話以上未視聴が溜まったら
一時中断
にする 一時中断
にしたものはクールの終わったときに振り返って見るかどうか?を他の人のレビューなどを参考に決める- ここで見ないを選択した場合は、
視聴中止
にする
アプリ利用の前提条件
- Annictを結構使ってるユーザー
- 大体今期やってるアニメを把握してる
- Annictのチャンネル登録をちゃんと設定している
- まとめて視聴したりせず、毎日今期アニメを消化しつづけているアニメ好き
「今期はこれだ!」みたいな1点読みとかしないで、ほぼ毎クール7割近くの作品の数話を観て徐々に観る作品を削っていく感じの人だと尚良い
開発期間について
最初に12/2くらいに開発をスタートして、最低限の機能を1日〜2日くらいで作ってちょこっとバグ直したりしてたのが12月前半。
年末までちょこちょこ触って、1/4〜1/8で一気に仕上げました。
12中旬くらいの時点でそこそこ動いてたので、わりと毎日個人的に使ってドッグフーディングできてたのは結構モチベーションにつながってよかった。 後は「やるぞ!」って気持ちと一気にやる時間があるのがやっぱり大事ですね。
Kotlinについて
Kotlinについてですが、とにかく書きやすくてコード書いてて気持ちよかったなぁ〜という感じでした。事前に以下の書籍を読んでいたので、ひとまずほとんど困らず開発できました。 ただ、もっとうまく書けたのかな〜とか思いながら書いたコードが結構あるので、今後もリファクタリングしていければと思います。
- 作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/10/31
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Kotlinスタートブック -新しいAndroidプログラミング
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2016/07/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
利用したライブラリなどについて
- Crashlytics: クラッシュレポートなど
- Dagger2: DI
- kotterknife: view binding
- retrofit2 + okhttp: お決まりの通信まわり
- glide: 画像まわり
- Aboutlibraries: ライセンス表示のUI生成
- Android Architecture Components
- LiveData: RoomやViewModelと合わせて利用(データの流れをいい感じに)
- ViewModel: 画面回転時とかのデータ保持をLiveDataとセット利用
- Room: SQLiteのアクセスいい感じにするやつ
- PagingLibrary: RecyclerViewの内容をLiveDataと同期させる
PagingLibraryについて
今回特に役立ったこちらについてもうちょっと説明。 とは言え、以下の図を見るのが一番早いw
画像引用元: https://developer.android.com/topic/libraries/architecture/paging.html
今回で言うとRoom経由でSQLiteのデータがそのままRecyclerViewのリストに対応している感じになってます。
例えば、新しいデータをInsertすると参照しているRecyclerViewはハンドリングするコード等書かずにPagingLibrary内で notifyItemInserted(position)
を呼び出してくれます。Deleteした場合は同様に notifyItemRemoved(position)
ですね。
つまり、SQLite側のデータをどう更新するかを意識するだけでViewにはいい感じに反映してくれるという感じで最高でした。 もちろんLiveDataなので、画面回転時などにActivityが再生成されてもちゃんとobserveするコードが再度呼び出されてクラッシュするようなことも無くかなり楽でした。
ただ、かなりレールに乗ってる感はあるのでちょっとレールを外れるようなことをしようとすると、SQLiteに変なデータを突っ込んで無理やりViewHolderの処理でハンドリングして〜みたいな感じしかできなさそうな点などある程度諦めが必要かもしれません。
が、めっちゃ開発は楽になったので今後も使っていきたいと思います!
CIについて
今回、Bitriseを初めて使いました。とにかく最高でした。 過去にWerckerやCircleCIでAndroidのbuildをしていたときに比べてやることが全然無くて、殆どがWebコンソール上で完結してとにかく最高でした。 keytoolの管理等もいつも悩まされていたのを管理してくれたりGooglePlayStoreへUploadするstepも用意されていたりなど助かりました。
CircleCIやwerckerだとたまに謎のメモリ不足?とかのbuild失敗があったのですが、それも発生しなくなった気がします。
タスク管理について
Zenhubを使ってやりました。ポイントの見積もりは結構雑だったんですが、 サクッと終わらせられる粒度にタスクを分割してたのでまあまあいい感じだった気がします。
タスクの一部を抜粋したものがこちらです。最初にばーっと10タスクつくら作って優先度決めて開発を進めていくうちにドンドンタスクを追加して、その都度優先度を変えてみたいな感じでガンガンやってました。
今後
ひとまず細かいバグ修正を優先していこうと思います。 現状AnnictのWeb側で設定する前提になっているチャンネル設定とか視聴状況の変更とかもアプリ内で出来るように〜とかも気が向いたらやるかもしれません。
バグ報告とかお気軽にお待ちしておりますので〜何卒お手柔らかに〜