はじめに
本記事は with Advent Calendar 2021 14日目の記事です。
こんにちは with でAndroid エンジニアをしている石田です。with の Androidチームでは新規機能開発に加え 負債解消にも積極的に取り組んでおり、常に健康なコードベース維持を心がけています。
本記事では Redashというダッシュボードツール を使用してコードベースの負債を可視化した話をします。 ツールの使い方などの詳細な説明は割愛し アイデアの説明にフォーカスします。
モチベーション
数年以上歴史のあるプロダクトには必ず負債があります。負債の種類は設計、依存ライブラリ、命名、モジュール、言語などなど プロダクトによって様々だと思います。しかしながら 「負債は解消しないといけないんだけど、新しい機能も入れないといけないし...」 という風に 負債があることを認識していながら結局放置する方向に流れてしまうことも多い と思います。
負債をゼロにすることは不可能ですが、とはいえ負債が放置されている状態は技術的にも精神的にも不安要素になってしまいよくありません。そこで、可視化を通して負債のシルエットを掴みさえすれば、適切に対処できるはず という考えのもと (軽い気持ちで) Redashを使ってみました。
可視化の対象
可視化の対象は、まずは比較的効果を感じやすくお手軽な
- 簡単に計測できる
- 該当箇所が多く中長期に渡り段階的な作業が必要になる
の条件に当てはまるものを選ぶことをおすすめします。 例えば Android のプロジェクトの場合 Java, Kotlin Android Extensions, RxJava などが当てはまると思います。
負債 | 計測手法 | 対処 |
---|---|---|
Java | 拡張子 が .java であるファイルをカウントする | Kotlin に移行する |
Kotlin Android Extensions | kotlinx.android.synthetic で始まる import 文を含むファイルをカウントする | ViewBinding もしくは Jetpack Compose に移行する |
RxJava | io.reactivex で始まる import 文を含むファイルをカウントする | Coroutines/Flow に移行する |
ざっくりと計測できれば十分だと思うので、計測手法はシンプルなものにすることをおすすめします。
構成
自動で定期的に計測データを収集・可視化するために GCP(AWSでも可) + GitHub + Redashを組み合わせます。まずは負債計測コードを書いてCloud Functions に乗せます。
Android エンジニアなので計測コードには使い慣れている Kotlin を使いました。KotlinでCloud Functionsのコードを書く方法はこちらが参考になります。計測コードでは GitHub にあるリポジトリのソースファイルを走査する処理を書くことになると思いますが、 Kotlinには walkTopDown という便利なextensionがある ので比較的楽に計測コードを書くことができました。
書いた計測コードは Cloud Scheduler を使って1日1回トリガーされるようにしておきます。データベースにある程度計測データが蓄積されたらRedashを使用して可視化します。Redashは多種多様なデータベースに対応しています。Google スプレッドシートにも対応しているので、お手軽に試したい場合におすすめです。
結果
実際に運用してみた Redash のダッシュボードです。左上のfillされているチャートが負債のチャートで、それ以外は別の計測のチャートになります(項目名は伏せています)。可視化することで負債を直感的かつ定量的に把握することができるようになりました。 負債が着実に減っている過程も確認できます ✨
感想
- 可視化を通して負債のシルエットを掴むことで これくらいのペースでやればこれくらいの時期には解消できそう、というように現実的な負債解消プランを検討するきっかけになった と思いました。
- 負債解消の作業は地味で時間もかかりますが、可視化してあればその成果をチームメンバー間でわかりやすく共有することができるので理解を得やすくなります。また、チャート上で負債の数値が下がったのを見た時はけっこう嬉しい気持ちになるものです☺️