okuzawatsの日記

雰囲気でAndroidアプリ開発をやっている者です。

Androidアプリ開発入門2020

この記事はフラー Advent Calendar 2020 - Adventarの25日目の記事です。24日目の記事は、shmokmtによる「multipart をGoで扱ってみる」でした。

さて、元気にAndroidアプリ開発してますか。僕はしてます。

突然ですが、Androidアプリ開発をする上でつらいことの一つは、Androidアプリ開発の初心者にAndroidアプリ開発のことを教えることだと思ってます。まずはこの図を見てください。

f:id:ayb:20201220202826p:plain

出典:来年に備えるために Android の知識を網羅する / Looking back on this Android year in preparation for next year. - Speaker Deck

こちらのスライドは、GDG DevFest Tokyo 2019にてwasabeefさんが発表されていたスライドです。Androidアプリ開発でよく使われるライブラリやらツールやらを示しています。多いですね。多いだけならいいですが、RxJavaやDagger2など、単体で多くの学習コストを払わないといけない人がカジュアルに混ざっていて困ります。

こちらのスライドは前述のとおり2019年のものですので、日進月歩のAndroidアプリ開発の世界ではちょっと内容が古いと言えます。このような混乱した状況がそう長く続くわけはありません。2020年の今はきっともっと楽になっているはずです。そうに違いない。

f:id:ayb:20201220202841j:plain

出典:KeithYokoma on Twitter: "Android Developers right now 😂 https://t.co/3BxuWC29UQ… "

こちらの画像(ツイート)が投稿されたのが2020年6月26日です。見て分かるとおり...新たなラプトルが襲いかかってきており、状況は悪化しました。その他にも、Kotlin Android ExtensionsがDeprecatedになったり、Androidアプリエンジニアが退屈することはなさそうです。

Say Good-Bye to Kotlin Android Extensions - Speaker Deck

Androidアプリ開発入門2020

学ばなくてはならない概念が多く、今からAndroidアプリ開発に入門するのはしんどそうです。が、これからAndroidアプリ開発に入門しなければならない人もいるでしょう。そういった方のために、これから学ぶならこの辺から...という指針を自分なりに書いておきます。キーワードを散りばめておくので、検索しながら頑張ってください。大丈夫、Androidアプリ開発は楽しいから...。

Kotlin

Androidアプリ開発で使うプログラミング言語といえば、Kotlinですね。Java(Android Java)も使えますが、Kotlinを使った方が生産性が高いでしょう。公式でサポートされていることもあり、Kotlinを選ばない理由はあまり見当たりません。

この辺をやったり(自分はやったことないけど)、適当な入門書を読めばとりあえず書くことはできるでしょう。

Kotlin Bootcamp for Programmers  |  Training Courses

もっとKotlinのことを詳しく学びたい人は、英語の電子書籍しかないと思いますが、Effective Kotlinを読むのがいいと思います。

Effective Kotlin by Marcin Moskala [Leanpub PDF/iPad/Kindle]

CoroutinesとかFlowとかもついでにどこかで...。

LiveData

Lifecycle Awareなデータホルダーで、変更通知ができるやつです。後述するViewModelと一緒に使うと最も力を発揮します。MVVMでViewModelからViewに変更通知を流したりするのに使うことが多いでしょうか。Lifecycle Awareなので、正しく使えば比較的簡単にクラッシュしないアプリを作ることができるでしょう...。ちょっと癖があるといえばあるので、使いこなしましょう。

developer.android.com

ViewModel

前述のLiveDataと一緒に使うといいやつです。Androidは、画面が回転する時など、割とカジュアルに画面が一度破棄されて再生成されるんですが、ViewModelを使うとその辺をいい感じにやってくれます。その名の通り、MVVMにおけるViewModelとして使うことが多いでしょうか。

developer.android.com

DataBinding

Android公式のDataBinding機構です。レイアウトに式を書けるようになるので、楽になったり(ならなかったり)します。また、自分でBindingAdapterを書いたりすると楽になったり(ならなかったり)します。ActivityとかFragmentとかでbinding.textViewみたいに書くとViewの取得をしてくれるのは偉いです。

developer.android.com

Viewを取得したいだけなら、ViewBindingが使えます。

developer.android.com

Kotlinを使っているなら、wada811氏の作ったライブラリを一緒に使うと良いでしょう。

MVVM

アプリのアーキテクチャとしては、こんな感じのMVVMっぽくしておくと無難な気がします。先述のLiveDataとViewModelも、MVVMで使うことで力を発揮してくれるものと思います。

f:id:ayb:20201220213249p:plain

developer.android.com

Retrofit

上の図にあるRetrofitですが、HTTPクライアントです。OkHttpや、JsonパーサのMoshi(最近は、kotlinx.serializationという選択肢もありますが...)と一緒に使うことが多いでしょう。

Room

こちらも上の図にあるRoomですが、ローカルDBです。SQLiteのラッパーです。前述のLiveDataを一緒に使うと変更通知の実装がとても楽にできます。

developer.android.com

このCodelabsが勉強になります。

developer.android.com

Dagger or Dagger Hilt (or Koin)

DIは、Daggerを使うか、Koinを使うか、Dagger Hiltを使うかという感じだと思います。どれにすべきかは本日現在微妙だと思います。来年はDagger Hiltになるかもしれません(わかりません)。無難なのはDaggerという気はしますが(GoogleがForkして開発していて、Googleのドキュメントにも登場する)、学習コストが高いです。Dagger HiltはDaggerをAndroidで使いやすくしたやつです。yanzm氏のMaster of Daggerを読みましょう...。

booth.pm

Epoxy

リスト表示を楽にしてくれるやつです。GroupieというライブラリもありEpoxyと人気を二分していた気もしますが、今見たらLast Updateからしばらく時間が経っており、あまりメンテナンスされてないような...。EpoxyはAirbnbがちゃんとメンテナンスしている気がするので、Epoxyの方が無難だと思います。

github.com

Glide or Coil

画像を読み込むやつはGlideかCoilでしょうか。PicasoとかFrescoとかもありますが、今はGlideかCoilかな...。Coilの方が読み込みが速いと聞いた気がする(未確認)。

番外編でLottieを使うとアニメーションが楽です(Lottie形式で書き出せる人がいれば)。

まとめ

あっ、最後の方はAndroid入門というよりライブラリの紹介になってしまった。まあいいや...。

ということで、フラー Advent Calendar 2020も完走ですね。おつかれさまでした。また来年!