ココナラAndroidアプリの開発現場について (2019年8月版)

こんにちは、Androidアプリエンジニアの中田です。
今回は2019年8月現在のココナラ Androidアプリの開発現場について、ざっと書いてみようと思います。Androidアプリチームでも定期的な振り返りで活用出来ると思うので、備忘録の意味も含めて書いてみたいと思います。

ココナラ Androidアプリはこちらです。

play.google.com

開発言語

Java と Kotlinを使っています。 ココナラアプリは2017年から開発が始まっているため、多くのコードがJavaで書かれています。 現在、Kotlinへ移行していく最中で、これからは新規機能や簡単な実装には積極的にKotlinを使っていきます。

minSdkVersion

19です。

2019年3月までは minSdkVersionは16で Android4.3以下も対応していましたが、Android4.3以下でアプリを利用しているユーザーが少なくなってきた等を理由に minSdkVersionを 19に引き上げました。

本来は minSdkVersion を21まで引き上げたかったのですが、Android4.4でアプリを利用しているユーザーが多い等を理由に引き続きサポートすることになりました。 ただし、現在も minSdkVersionについては継続的に議論しているため、21以上に引き上げることも視野にいれています。

設計

MVVM + Repositoryパターン

ソフトウェアアーキテクチャに関しては、MVC、MVP、MVVM、Fluxなど色々あると思いますが Googleが推奨している設計に従ったほうが、Jetpackとの相性も良く、簡単に使えたり、新しいものも入れやすくなると思っています。

developer.android.com


ここからは実装する上でよく利用しているライブラリについて書いていきます。

OkHttp + Retrofit

Http Clientには、OkHttp + Retrofitを使っています。 Converter.Factoryなどを使ってレスポンスをよしなにやったりしますが、特殊な使い方はあまりせず、普通に使っています。

また現在、ココナラでは一部の機能に関してはgRPCの導入しており、アプリにも導入できないか検討している段階です。こちらに関しては、また違うタイミングで書ければと思っています。

DataBinding

レイアウトは出来る限り DataBindingを使うようにしています。 複雑なことは極力しないようにして、あくまでもfindViewByIdしなくてもViewにアクセスできるようにすることや、Viewへのデータ反映を楽にすることを目的で利用しています。

Gson

JSONライブラリはGsonを使っています。徐々にKotlinへ移行するため Moshi への移行も検討しています。 Kotlinのコードが増えていく段階なので、Moshiへ移行することも検討しています。

Glide

画像ダウンロードライブラリは、Glideを利用しています。 元々Picassoを利用していましたが、求めている機能とパフォーマンス観点でGlideへ移行しました。

github.com

Jetpack

ViewModelとLiveData、Lifecycleを導入しています。現在、Navigationを導入出来ないか検討している段階です。

Support Library

まだAndroidX への移行はしていません。今年の後半に実施する予定です。

ここからは実装以外で利用しているツール等について書いていきます。

Firebase Analytics + BigQuery + Redash

アナリティクスにはFirebase Analyticsを使い、Firebase Analyticsの情報をBigQueryに流しています。 BigQueryにたまったデータをRedashを使って集計・分析しています。

Firebase Crashlytics

クラッシュレポートについては、Firebase Crashlyticsを利用しています。 クラッシュが多発した場合など緊急時には、Firebaseのベロシティアラートを利用して、Slackに通知がくるようにしています。

firebase.google.com

CI

CIは、Bitriseを利用しています。

go.bitrise.io

まとめ

上記以外にもライブラリを利用していますが、ココナラアプリの仕様・性質を理解した上でどういった設計やライブラリがうまくはまりそうなのか、見極めながら開発をしているため、Androidアプリ開発においてデファクトスタンダードな設計手法やライブラリであっても、うまくはまりそうにない場合は導入を見送ったりもしています。

ココナラAndroidアプリは、これからも新機能や既存機能の改修が継続的に行なっていくため、チームメンバーと共に色々考え、議論しながらいいアプリ、いい開発をしていきたいと思い、今日もアプリを開発しています。

一緒に開発する仲間も探しているので、もし興味があればオフィスに遊びにきてください! TVCM放映中!ユーザー志向のアプリエンジニア募集。技術選定の裁量あります - 株式会社ココナラのモバイルエンジニア中途の求人 - Wantedly