Photoruction工事中!

Photoructionの開発ブログです!

Androidアプリのアーキテクチャの現状 ver.2022年

Androidアプリ開発者の久木田です。

この記事はPhotoruction Advent Calendar2022の日目です。

去年のアドベントカレンダーAndroidアプリのアーキテクチャの現状 という記事を書きました。

今回はここから1年でどういう進捗があったのかをお話しします。

TL;DR

目を見張るほどのものはないかもしれないが、着実に良くなっていっている。

新しいことも始めていきたいな〜。。。

計測と所感

去年と同じ内容でデータを取ってみました。

色々改善が進んでいるのがわかるんじゃないないかなと思います。

ファイル数からわかること

種類 条件 コマンド
Activity 62 ファイル名にActivityがついている find . -name "*Activity.java" -o -name "*Activity.kt" | wc -l
Fragment 80 ファイル名にFragmentがついている find . -name "*Fragment.java" -o -name "*Fragment.kt" | wc -l
ViewModel 87 ファイル名にViewModelがついている find . -name "*ViewModel.java" -o -name "*ViewModel.kt" | wc -l
69 ↑のうち、ViewModelもしくはAndroidViewModelを継承しているクラスのあるファイル find . -name "*ViewModel.java" -o -name "*ViewModel.kt" | xargs grep -l AndroidViewModel | wc -l
Repository 82 ファイル名にRepositoryがついている find . -name "*Repository.java" -o -name "*Repository.kt" | wc -l
Realm 49 RealmObjectを継承しているクラスのあるファイル rg -l "extends RealmObject" . | wc -l
Room 31 @Entityが付いているクラスのあるファイル rg -l "@Entity" . | wc -l
Test 36 ファイル名にTestがついている find . -name "*Test.java" -o -name "*Test.kt" | wc -l

去年と比べての改善点

  • Activityがあまり変わらないけどFragmentが大幅に増えた → FragmentでViewが作られている
  • ViewModelの数が大幅に増えた
  • Repositoryが大幅に増えた

→ ViewModel、Repository経由でのDBアクセスへの書き換えが進んでいる

  • Realmは変わらないがRoomが増えている → 新規のテーブルがRoomで作られている

逆に、改悪した点は特に見受けられないかなと思います。

ステップ数からわかること

種類 条件 コマンド
平均 202 拡張子が.javaのファイルの行数の平均 wc -l /*.java | sort | sed '$d' | awk '{n += $1}{i +=1 }; END{print int(n/i) }'
80 拡張子が.ktのファイルの行数の平均 wc -l /*.kt | sort | sed '$d' | awk '{n += $1}{i +=1 }; END{print int(n/i) }'
中央値 90 拡張子が.javaのファイルの行数の中央値
35 拡張子が.ktのファイルの行数の中央値
長大ファイル 20 拡張子が.javaのファイルの1000行を超えているファイル数
0 拡張子が.ktのファイルの1000行を超えているファイル数

去年と比べての改善点

  • Javaファイルの行数が減少傾向
  • Kotlinは平均が少し上がっている

  • Kotlinで書いているViewModelでロジックが詰め込まれているファイルがあるためかなと予想している

  • 1000行越えのファイルが増えた

  • Realmのマイグレーションファイルが1000行を超えてしまったので+1になった

  • これをやってて気づいたのでこれから分割する予定

この1年での改善点

  1. packageの移動

  2. 設計方針で合意していた場所へほとんどのファイルを移動した。

  3. モジュール分割を始めた

  4. 修正による副作用の低減などを求めてモジュール分割をし始めた。
    まだまだやり始めで、3モジュールを切り出した程度ですが1歩前進といった感じ。

  5. 業務委託の方にガンガンリファクタリングをしてもらう体制になった

  6. 設計方針に沿ったMVVMの形にするために、釘宮さんをはじめ業務委託の方にリファクタリングをお願いすることにした。

  7. テストコードが大幅に増えた

  8. 新しいロジックに関しては基本的にテストを書いているのでどんどん増えています。

来年のやっていきたいこと

  1. リファクタリングの大幅な進捗

できれば、ほぼ全てのActivity/FragmentがMVVMな形になってるといいなと思いますがそれはちょっと夢を見過ぎかな…

  1. Crashlyticsの改善

現状が改善する価値があるくらいの数値なので、ここもテコ入れしていきたい

  1. 新しいことを始めたい

Jetpack ComposeやCameraXなど新しい技術の導入を進められればなと思っている

PS.

今回の記事を書くのにgrepの代わりにripgrepを使ってみましたが、すごい速くて快適だったのでおすすめです!

株式会社フォトラクションでは一緒に働く仲間を募集しています