野次馬エンジニア道

野次馬な気持ちでプログラミングをあれこれと綴ります

Android アプリ設計パターン入門 を読む

たまにAndroidを触るぐらいでアプリ開発からは完全に遠ざかってしまって久しい。

Android アプリ設計パターン入門

Android アプリ設計パターン入門

  • 著者:日高 正博,小西裕介,藤原聖,吉岡 毅,今井 智章,
  • 製本版,電子版
  • PEAKSで購入する

AndroidStudioを落としてきて起動したぐらいで「そもそもどうやってアプリを作るのがよいのだろうか」「教えて貰える機会もないしなー」と思っていた矢先にたまたま知った本。 バリバリ書いているエンジニアの人にもそうでない人にもオススメの内容。以下感想。

MVVM (Model-View-Model View)、MVP (Model-View-Presenter)

本書はまず背景となる知識や歴史を振り返った後に、下記のTODOアプリを詳細に見ていくところから始まる(画像は全て下記リポジトリから)。

https://github.com/googlesamples/android-architecture/wiki/images/mvvm-databinding.png

https://github.com/googlesamples/android-architecture/wiki/images/mvp.png

読み進めていく上では、DIの知識が必須。Dependency Injectionと聞いて個人的に思い浮かぶのがこの動画。基本的には大規模なソースコード上でのテストの話なのだが*1その前提としてDIはテスタブルにしておくために必要な書き方となる。

f:id:notta55:20180402233338p:plain

DIをアプリのインフラに導入したことで、単体テストが容易になり品質や開発スピードにも寄与しているということが繰り返し主張されている。

差分開発の問題, Daggar2とRxJavaの導入

メルカリのUSアプリのリニューアル*2を事例にチームが直面した問題を惜しみなく紹介している。

チームの拡大とコードベースの肥大化によるメンテナンスの困難さをアーキテクチャや実装的な問題として捉えて分析。具体的な人員の数も克明に書かれていて相当生々しい。。。が非常に読み応えあり。

その解決方法としてDaggar2とRxJavaを導入して得られた効果は

  • 非同期処理がRxJavaにより統一される、RxJavaはテストを書きやすい
  • Daggar2によりComponentとモジュールから機能全体の依存関係をチームメンバーに分かりやすくシェアできる

Fluxアーキテクチャ、ReactNative

FluxなんかはWebでReactを使って開発している人たちの共通理解のようだが、それをAndroidに当てはめるとどのようになるかを紹介。

そしてReactNativeとNativeのハイブリッドアプリの取り組みについて紹介。「3年間運用されたアプリを3ヶ月で書き直すには?」から着想し、採用の理由はシンプルで、「Web開発者がNative開発に参画できる」「マルチプラットフォーム開発ができる」。

このぐらいまでは想像がつくが「プレイストアを介さずにOn The Air配信が可能」というところまで到達しているのが本当に凄い。また、どんな画面がNative向きでどんな画面が不向きなのか、しっかりとチームのリソースやスキル、中身までを知った上で使いこなしているから素晴らしい。

そして最後の章でAndroid Architecture Componentsのモジュールとここまで紹介してきた内容との対応を紹介。

おしまいに

「新しいから使う」「便利だから使う」ではなくて、レガシーのコードに対峙しながら問題点を意識的に探り、プロダクトとして必要な品質を限られたリソースで作り上げる。そのために最新の設計やライブラリを駆使していかにして具現化していくか、その土台となるようなアーキテクチャを泥臭い実例を交えて紹介している貴重な本だった。

*1:かなり古い動画ですが、Facebookが過去どのようにAndroidをテストしてきたかを紹介していてオススメ。自分の知識も古い。。。

*2:http://tech.mercari.com/entry/2017/07/19/123443