この記事はフラー Advent Calendar 2020 - Adventarの25日目の記事です。24日目の記事は、shmokmtによる「multipart をGoで扱ってみる」でした。
さて、元気にAndroidアプリ開発してますか。僕はしてます。
突然ですが、Androidアプリ開発をする上でつらいことの一つは、Androidアプリ開発の初心者にAndroidアプリ開発のことを教えることだと思ってます。まずはこの図を見てください。
こちらのスライドは、GDG DevFest Tokyo 2019にてwasabeefさんが発表されていたスライドです。Androidアプリ開発でよく使われるライブラリやらツールやらを示しています。多いですね。多いだけならいいですが、RxJavaやDagger2など、単体で多くの学習コストを払わないといけない人がカジュアルに混ざっていて困ります。
こちらのスライドは前述のとおり2019年のものですので、日進月歩のAndroidアプリ開発の世界ではちょっと内容が古いと言えます。このような混乱した状況がそう長く続くわけはありません。2020年の今はきっともっと楽になっているはずです。そうに違いない。
出典:(20) KeithYokomaさんはTwitterを使っています 「Android Developers right now 😂 https://t.co/vhQgjPJYqo」 / Twitter
こちらの画像(ツイート)が投稿されたのが2020年6月26日です。見て分かるとおり…新たなラプトルが襲いかかってきており、状況は悪化しました。その他にも、Kotlin Android ExtensionsがDeprecatedになったり、Androidアプリエンジニアが退屈することはなさそうです。
学ばなくてはならない概念が多く、今からAndroidアプリ開発に入門するのはしんどそうです。が、これからAndroidアプリ開発に入門しなければならない人もいるでしょう。そういった方のために、これから学ぶならこの辺から…という指針を自分なりに書いておきます。キーワードを散りばめておくので、検索しながら頑張ってください。大丈夫、Androidアプリ開発は楽しいから…。
Androidアプリ開発で使うプログラミング言語といえば、Kotlinですね。Java(Android Java)も使えますが、Kotlinを使った方が生産性が高いでしょう。公式でサポートされていることもあり、Kotlinを選ばない理由はあまり見当たりません。
この辺をやったり(自分はやったことないけど)、適当な入門書を読めばとりあえず書くことはできるでしょう。
もっとKotlinのことを詳しく学びたい人は、英語の電子書籍しかないと思いますが、Effective Kotlinを読むのがいいと思います。
CoroutinesとかFlowとかもついでにどこかで…。
Lifecycle Awareなデータホルダーで、変更通知ができるやつです。後述するViewModelと一緒に使うと最も力を発揮します。MVVMでViewModelからViewに変更通知を流したりするのに使うことが多いでしょうか。Lifecycle Awareなので、正しく使えば比較的簡単にクラッシュしないアプリを作ることができるでしょう…。ちょっと癖があるといえばあるので、使いこなしましょう。
前述のLiveDataと一緒に使うといいやつです。Androidは、画面が回転する時など、割とカジュアルに画面が一度破棄されて再生成されるんですが、ViewModelを使うとその辺をいい感じにやってくれます。その名の通り、MVVMにおけるViewModelとして使うことが多いでしょうか。
Android公式のDataBinding機構です。レイアウトに式を書けるようになるので、楽になったり(ならなかったり)します。また、自分でBindingAdapterを書いたりすると楽になったり(ならなかったり)します。ActivityとかFragmentとかでbinding.textView
みたいに書くとViewの取得をしてくれるのは偉いです。
Viewを取得したいだけなら、ViewBindingが使えます。
Kotlinを使っているなら、wada811氏の作ったライブラリを一緒に使うと良いでしょう。
アプリのアーキテクチャとしては、こんな感じのMVVMっぽくしておくと無難な気がします。先述のLiveDataとViewModelも、MVVMで使うことで力を発揮してくれるものと思います。
上の図にあるRetrofitですが、HTTPクライアントです。OkHttpや、JsonパーサのMoshi(最近は、kotlinx.serializationという選択肢もありますが…)と一緒に使うことが多いでしょう。
こちらも上の図にあるRoomですが、ローカルDBです。SQLiteのラッパーです。前述のLiveDataを一緒に使うと変更通知の実装がとても楽にできます。
このCodelabsが勉強になります。
DIは、Daggerを使うか、Koinを使うか、Dagger Hiltを使うかという感じだと思います。どれにすべきかは本日現在微妙だと思います。来年はDagger Hiltになるかもしれません(わかりません)。無難なのはDaggerという気はしますが(GoogleがForkして開発していて、Googleのドキュメントにも登場する)、学習コストが高いです。Dagger HiltはDaggerをAndroidで使いやすくしたやつです。yanzm氏のMaster of Daggerを読みましょう…。
リスト表示を楽にしてくれるやつです。GroupieというライブラリもありEpoxyと人気を二分していた気もしますが、今見たらLast Updateからしばらく時間が経っており、あまりメンテナンスされてないような…。EpoxyはAirbnbがちゃんとメンテナンスしている気がするので、Epoxyの方が無難だと思います。
画像を読み込むやつはGlideかCoilでしょうか。PicasoとかFrescoとかもありますが、今はGlideかCoilかな…。Coilの方が読み込みが速いと聞いた気がする(未確認)。
番外編でLottieを使うとアニメーションが楽です(Lottie形式で書き出せる人がいれば)。
あっ、最後の方はAndroid入門というよりライブラリの紹介になってしまった。まあいいや…。
ということで、フラー Advent Calendar 2020も完走ですね。おつかれさまでした。また来年!