Safie Engineers' Blog!

Safieのエンジニアが書くブログです

Androidチームにおける品質改善③ 〜2023年のまとめ〜

はじめに

リリースから3年以上経過しようやくモダンな開発環境に近づけていく活動ができるようになるくらい体制が整って来ました。

今回はAndroid版Safie Viewer for Mobileが2023年に行った改善活動の振り返りの話をしたいと思います。

ユニットテストの導入

改善活動の一歩としてユニットテストを導入しました。

ここまでの間テストがないという状況が続いており機能追加やライブラリのアップデートをした時手動でのテストが欠かせない状態でした。

今年からユニットテストを導入したので手動での検証作業が少し緩和されたという状態になりました。

カバレッジ率はまだ約12%というのが現実ですが、来年以降もカバレッジ率を高めていくような活動を続けていきます。

ビジュアルリグレッションテストの導入

ユニットテストに加えRoborazziを使用したビジュアルリグレッションテスト(以下VRT)も合わせて導入しました。

RoborazziはnowinandroidDoroidKaigi2023でも採用されているライブラリで、JVM上でスクリーンショットを撮影し差分比較することのできるライブラリです。

Safie Viewer for Mobileではサンプルを参考にGithubActionsのワークフローを作成し、プルリクエスト上でVRTを実行し差分比較を行えるような環境を用意しました。

プルリクエスト上で差分の確認ができる

Safie Viewer for Mobileは多言語化対応をしており動作確認のため端末の言語設定を切り替えてから対象の画面を表示しレイアウトに問題がないかを確認しておりましたがRoborazzi導入後は自動で言語毎のスクリーンショットを撮って確認する事ができるので、かなりの作業時間の削減に繋がりました。

多言語化対応しているようなアプリであれば非常に強力なライブラリになるかと思います。

github.com

Jetpack Composeの導入

今年からXMLからJetpack Composeにレイアウトの作りを置き換えるという事を始めました。

移行率は10%程度とまだ殆どがXMLでの構成となっておりますが、小さい画面から順にJetpack Composeに置き換えるといった活動をしています。

Jetpack Composeに置き換えて一番大きく感じた利点はテストの書きやすさにあると感じました。

これまで、Activity/FragmentのUI周りのテストを書くのは敷居が高いと感じ実機で手動確認で済ませる事が多かったのですがJetpack Composeであれば

  • 表示のテスト
  • 状態変化のテスト

がかなり簡単に書けるようになったと思います。

developer.android.com

Detektの導入

静的コード解析として、Detektを導入しました。

GitHubActionsで実行したDetektの結果をalaegin/Detekt-Actionを使用して通知する仕組みで運用しています。

目的としては、これまで目視で確認していた「コーディングルールに則って書かれているかどうか」を自動で確認するためです。

その他にDetektの便利なところは、メソッド毎に複雑度の数値「CyclomaticComplexMethod」と「CognitiveComplexMethod」が測れることにあると思います。

今まで感覚的に「このメソッドなんか複雑に感じる」というのを数値で見る事ができるのでレビューの際に指摘しやすくなるといった効果があります。

detekt.dev

Dependabotの導入

今まで手作業で確認していたライブラリのアップデートをDependabotを導入して自動化しました。 手作業で確認していた分の時間がかなり削減されたので開発者体験の向上に繋がりました。

docs.github.com

ビルドスクリプト周りの見直し

ビルドスクリプト周りの改善として以下の事を行いました

  • Groovy から KTSに移行
  • Android Gradle Pluginを7系から8系にアップデート
  • Version Catalogの導入

Androidは今後KTSでビルドスクリプトを書くのが標準なので、それに合わせてSafie Viewer for Mobileも全てKTSに置き換えました。

ついでにライブラリのバージョンもVersion Catalogで管理するようにしましたが今のところ大きな恩恵は受けておらず、これは将来的にマルチモジュール対応などを行った時に効果を発揮することになると思います。

developer.android.com

developer.android.com

便利だったGithubActionsのAction

  • r0adkll/upload-google-play

    GithubActonsからアプリのリリースファイルを作成しGooglePlayConsoleへ自動アップロードする為のActionです。 このActionを導入してアプリのリリース作業を半自動化する事ができました。

  • AlexSim93/pull-request-analytics-action

    PullRequestを解析し

    • オープンしたプルリクエストの数
    • マージしたプルリクエストの数
    • プルリクエストを承認した回数
    • マージまでに掛かった時間

    などのレポートを出力できるActionで、取り急ぎこれまでのプルリクエストの状況を確認したかった事があったので便利でした。

    執筆時のバージョンは1.8.4ですが、頻繁に更新されているライブラリで日に日に新機能が追加されて行っているのが特徴的です。

github.com

github.com

最後に

2023年は改善活動に力を入れた1年でした。

1年かけて様々なものを導入して来ましたが、まだまだ改善していきたい箇所が多く継続的に改善活動を続けていく必要があります。 日々の改善活動を通して、チームとして力を伸ばしていきたいと思います。

また、セーフィーではエンジニアの採用を積極的に行っております。もし興味が出てきた際はぜひご応募いただけたらと思います。

safie.co.jp

© Safie Inc.