この記事は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年での改善点
packageの移動
設計方針で合意していた場所へほとんどのファイルを移動した。
モジュール分割を始めた
修正による副作用の低減などを求めてモジュール分割をし始めた。
まだまだやり始めで、3モジュールを切り出した程度ですが1歩前進といった感じ。業務委託の方にガンガンリファクタリングをしてもらう体制になった
テストコードが大幅に増えた
新しいロジックに関しては基本的にテストを書いているのでどんどん増えています。
来年のやっていきたいこと
- リファクタリングの大幅な進捗
できれば、ほぼ全てのActivity/FragmentがMVVMな形になってるといいなと思いますがそれはちょっと夢を見過ぎかな…
- Crashlyticsの改善
現状が改善する価値があるくらいの数値なので、ここもテコ入れしていきたい
- 新しいことを始めたい
Jetpack ComposeやCameraXなど新しい技術の導入を進められればなと思っている
PS.
今回の記事を書くのにgrepの代わりにripgrepを使ってみましたが、すごい速くて快適だったのでおすすめです!
株式会社フォトラクションでは一緒に働く仲間を募集しています