出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

書評: Jetpack ComposeによるAndroid MVVMアーキテクチャ入門

久しぶりにAndoridアプリ開発がしたくて始めたけれど、 Jetpack Composeがよくわからなかった。 いろいろ調べているうちにこの本を見付けて、よさそうだったので読んだ。

概要

Android アプリ開発においてMVVMアーキテクチャを採用する方法として、Jetpack Composeを用いる方法の解説。 MVVMの解説・シンプルなアプリ例・実践的なアプリ例の3構成となっている。

自分はJetpack Composeというところに惹かれて購入したけど、どちらかというと主題はMVVMであり、 Jetpack Composeに含まれているViewModelライブラリの方に重点が置かれている。 そのため、Viewに関するところの説明でデザインに相当する解説はほとんどない。 また、MVVMを採用する上で重要となるDIについても扱われている。

よかったところ

目的であったJetpack Composeについて知れたのはよかった。 UIデザインの目的で購入したが、それよりもUIを宣言的に実装できること、ViewModelを導入してライフサイクルの考慮が軽減できることが知れてよかった。 ただし、本書で「Androidアプリに特有のライフサイクルの問題を吸収してくれる機能がある」と記載しておきながら、 その具体的なライフサイクルとは何か説明されていないことは気になった。 いろいろ調べて試してみたところ、自前実装のライフサイクルを考慮していないViewModelだと 画面の回転でリソースが破棄されて画面の表示がリセットされるが、 JetpackライブラリのViewModelを利用すると表示が引き継がれることがわかり感動した。 おそらくAndroidアプリ開発経験者にはあたりまえの事なので省略されていたのだと思うが これを理解していると実感がまったく異なるのでこれに気付けてよかった。

また、DIについて知れてよかった。 AndroidにおけるDIはまったく把握していなかったので、このとっかかりにすることができた。 残念ながらDIの解説書ではないので説明が十分とはいえないが、予めDIとは何か簡単に知っていると本書の内容としては理解できるし、 知らなくても実際に動くコードを見ながら理解を深めることができる。

よくなかったところ

一番残念なのは4章の実践的なアプリとして登場する、GitHubのWeb APIを使ったアプリについて説明が少ないこと。 分量としては約40ページ割かれているが、その大半がコードの掲載およびそのコードの説明で、 その背景にあるMVVMアーキテクチャの説明としては不十分に感じた。

例えば、ViewがViewModelに依存しておらず状態変更を購読しているだけだという2章における説明が、 4章のアプリの説明では一切出てきていない。 これを実現するためにDIが上手くやってくれていると一言あるだけでMVVMとの対比が鮮明になると思う。

それ以外にも4.2節 Remote Data Sourceについて、大きくRemoteDataSource、ApiClient、GitHubUserと登場する中で、 それぞれの立ち位置が説明されておらずきちんと理解できているかよくわからない。 RemoteDataSourceがRepositoryに対するインタフェース、ApiClientはRemoteDataSourceに対するインタフェース、 GitHubUserは各インタフェースおよびRepositoryに対するDTOと理解したが正しいか自信がない。 どのインタフェースが何に対して抽象化しているのかといった説明は明記して欲しいと思った。

まとめ

AndroidにおけるMVVMアーキテクチャを理解する上で、またJetpack Composeを利用する上で非常に参考になった。 後半若干説明不足に感じるが、精読したり周辺技術を追加調査したりすると、MVVMやJetpack Composeについて理解を深めることができる。 そのとっかかりとして本書は非常に有益に感じた。