Timee Product Team Blog

タイミー開発者ブログ

#DroidKaigi に向けて数字で振り返るタイミーのAndroid開発

こんにちは、タイミーDevRelの河又です。

タイミーはDroidKaigi 2024にゴールドスポンサーとして協賛しています。
当日はブースも出展しておりますので是非、お立ち寄りください。

今回はDroidKaigiを前に一度、タイミーのAndroid開発を数字で振り返ろうという企画です。 Androidエンジニアの中川をインタビューアーとしてAndroid領域のリードエンジニアである村田にタイミーのAndroid開発についてインタビューする形式でお届けします!

タイミーのAndroidアプリのクラッシュフリーレートについて

2022年


2024年現在


※グラフ上の7日間、30日間の数値は当該期間全体の数値ではなく、デイリーの移動平均の数値です

中川:
僕が入社したのが今年の1月なんですが、その時点でクラッシュフリーレートは高いな、という印象がありました。
タイミーでは2年前の段階から99.9付近で安定していますよね。僕は前職でライブ配信アプリをやっていたので一概に比較出来るものではないですが、このレベルの数字は中々見たことがありませんでした。
この2年間で更に改善されていて、クラッシュに対して高いプライオリティを持っていると感じることも多いのですが、改めて取り組みとか方針みたいなところを聞かせてください。

村田:
まず、段階的なリリースプロセスを採用しています。新しいバージョンをリリースする際、最初は全体の30%のユーザーにのみ提供します。その後、半日から1営業日ほどの観察期間を設け、Crashlyticsを用いて慎重にモニタリングを行って問題がないことを確認できた場合にのみ、全ユーザーへのリリースを行います。

次に、静的解析ツールを積極的に活用しています。今はCodeClimateを使用していますが、現在はより柔軟なカスタマイズが可能なDetektなどのツールの導入を検討しています。これらのツールを使用することで、人間のレビューでは見逃しやすい細かな問題も検出することができます。

そして定期的にメトリクスを眺める同期会を開催し、2桁以上のクラッシュがあるものは細かくIssue化し解決に取り組んでいます。

また、コードスタイルの統一にも注力しています。ktlintを使用して、コードスタイルの一貫性を自動的に担保しています。チーム全体でのコードの可読性が向上し、バグの早期発見にもつながっています。

中川:
こうやって聞いてみると結構色々取り組んでいますよね。
あと、無闇に新しい技術をすぐに取り入れる、っていう文化ではないですよね。ある程度、実績や信頼性を重視していると感じます。

村田:
そうですね。そこはバランス感覚を重視してます。 どっちに偏り過ぎても良くないと思っていて、DroidKaigiアプリがやっている様な最先端なスタイルを今のタイミーのプロダクト規模で積極的に取り入れるのは難しいと思っていますが、とはいえ新しいものを取り入れていかないのはメンバーのモチベーション観点や学習サイクルの観点で言っても良くないと思っています。

例えばJetpack Composeとかも比較的、早めに取り組み自体は開始しました。それこそ中川さんにリードして貰いましたが、Kotlin2.0へのバージョンアップとかも早めに対応出来た方なのではないでしょうか?

ただ、本当に新しいものに飛びつく、みたいなカルチャーではないのはその通りで代表的なところで言うとCoroutineですよね。 Composeといえば、CoroutineみたいなところがあるのでCompose化に伴って導入を開始しましたが、それまではRxがメインだったので一旦、そこは慎重に立ち止まったりしながらメリット・デメリット考えて技術選定に向き合いましたね。

中川:
前職とかだと、Coroutine最高だからRx剥がそう! みたいな動きが強かったのでそれはそれで面白かったのですが、同じパラダイムがアプリ開発してる中でも結構存在していて、認知負荷とか学習コストは高くなった部分があるので確かにメリット・デメリットの比較は大事だなと感じます。

今のタイミーだとRepository層から返すのがRx、それ以降がFlowという形が出来ているので迷うことが少なくて良いなと思います。

村田:
併存はしているものの、しっかり境界が分かれているので分かりやすいですよね。 慎重に検討して、今の境界が出来上がっているのでそこはしっかりと検討して良かったと思います。

既存のView systemがRxにしっかり紐付いているので、Composeの導入は慎重に進めないといけないのですが、既存のView systemがなくなってJetpack Composeの割合が100に近づいたらRepository層以降も全部Coroutineに置き換えても良いのかな、とは思っています。

人が増えても品質を保つために


中川:
そもそもCodeClimateってどういった経緯で導入したんですか?

村田:
有難いことに採用が上手く進んで、Android開発メンバーが3人から6人なるということが見えた時にそれに備えて導入しました。

3人体制で、開発プロセスも非常にシンプルでした。CIの警告チェックや、品質指標を追跡するような仕組みはほとんどなく、主に手動のテストとコードレビューに頼っていました。6人にチームが倍増することが決まり、従来の手法では立ち行かなくなると感じました。

まず、コーディングの方針を明確化しました。それまでは特に明文化された方針がなかったので 「こういう方針で書いていきましょう」という指針を作りました。その上で、コードレビューやテスト以外に何ができるかを考え、仕組みで品質を保証したいという思いから、静的解析に着目しました。

ただ、3人という限られたリソースでは、独自の静的解析ツールを開発するのは難しいと判断し、既存の静的解析サービスであるCodeClimateを導入することにしました。

中川:
視座が高い、というか、しっかり長期的な目線を持ってそういった取り組みをしていること自体がめちゃくちゃ偉いな、と思いました。

村田:
ありがとうございます(笑) ただ、やってみないと分からなかったことも多かったですね。 良かった点からいくと技術的負債の見える化には非常に役立ちました。特に、行数や技術的負債に関するレポートを自動生成し、チーム全体で共有できた点は良かったです。また、プルリクエストに対して自動的にコメントを付けてくれる機能も便利でした。「このメソッドが長すぎます」などの指摘を機械的に行ってくれるのですが、機械的なルールに基づく指摘なので受け取る方も素直に受け取りやすい。

一方でアプリ全体で一つのルールセットしか作れないという制約があり、機能ごとに異なるニーズに応じたルール設定が出来ませんでした。なので、ある部分ではルールが緩すぎる一方、別の部分では厳しすぎるといった問題が発生しました。例えば、1メソッドの行数は25行に制限されていました。Android開発としては厳しいので80行に緩和しました。他にもファイル全体の行数も250行まで、といった設定があったりなど……。

これでは厳しいということで現在CodeClimateは主に技術的負債の指標取得にしか使用していない状況です。なので、現在Detektの検討を進めており、もう少し各所のニーズにあった柔軟な設定が出来ることを期待しています。

開発のスピードが上がる中で品質を追求する

中川:
LOCは順調に増えている中で負債は減って、クラッシュフリーレートも上がっているのは単純に偉業だなと感じるのですが何か心がけていることはありますか?

村田:
そうですね。それこそ、3人体制の頃は今ほど自動化された仕組みがなかったため、逆に常に全員が品質を意識しながらという所に尽きるのですが例えば、コードレビューの際は単にバグを見つけるだけでなく、「自分が次にこのコードを触るときにスムーズに作業できるか」という視点で見たりしていましたね。他人が書いたものでも自分がオーナーシップを持ってたらどうするか、みたいな意識はあったと思います。

今だとコーディングとかComposeのガイドラインもあって、意識レベルではなく仕組みレベルで整ってきたなと感じています。

中川:
自動化、というところを除いても、以前からリリースフローみたいなのは結構洗練されてるなとも感じます。

村田:
3人時代でも一部はしっかり自動化されてはいました。例えば、アプリのバイナリを作ってそれをアップロードするところとか、クリティカルな部分は手動にならない様にみたいなことはその時代からも意識はしてましたね。やっぱり違う間違ったブランチのバイナリあげちゃったみたいなことが発生してしまうと大きい問題なのでそういったものは起こらない様に気をつけてました。

やっぱり3人でやってた頃はリソースが限定されていたので取捨選択して重要なものだけしっかりと取り組む意識は強かったのかなと思いますね。

タイミーは社会インフラとなるプロダクトになっていくことを掲げていますし、エンジニアも各々がしっかりとそれを意識してくれているので品質に対する意識は皆、高く持ってくれているなと感じます。

まとめ

インタビュー、如何でしたでしょうか?

タイミーのAndroid開発チームは、急速な成長と変化の中で、高い品質基準を維持しながら開発速度を向上させてきました。クラッシュフリーレートの改善、新技術の慎重な導入、そしてチーム拡大に伴う品質管理の進化など、多くの課題に取り組んできました。

今後は、Compose化やCoroutineへの移行などにも取り組みつつ、様々な部分で自動化をより推し進め、効率的で品質の高い開発プロセスを目指していきます!

DroidKaigi 2024ではタイミーのAndroidエンジニアも数多く参加しますので是非、現地来場される方はタイミーのエンジニアとお話頂ければ幸いです! 皆さんとお話出来ることを楽しみにしております!