Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

【Android】“いつかやる”UI修正、Devinが1日でやってくれた

Rettyアプリチームの若田(@wakanao_banana)です!北海道出身のため7月の東京の暑さで半分溶けています。

今回はAndroidアプリのデザインをDevinを用いて一括で改善できた例を紹介します!

Rettyでの生成AI導入状況

現在RettyではGitHub Copilot、Devin、CursorなどのAIツールが導入されています。 2023年の中旬からGitHub Copilotの使用は進んでいましたが、最近ではDevin、Cursorなどのツールも積極的に活用されるようになっています。

これまでiOS/Androidの開発では、VSCodeベースの開発が難しく、複雑な状態管理も必要だったことから、AIツールの活用は限定的だと考えていました。しかし最近では、モバイルアプリチームでもAIの導入が進み、ネイティブ開発においても十分活用できると実感しています。

直近ではDevinにCIのエラー解消であったり、簡単な運用タスクをDevinに任せることで、やりたい本質的な改善に注力できるようになってきていると感じます💪

Devinとは

Devinは自律型のAIソフトウェアエンジニアで、指示に基づいて計画から実装・デバッグなどを行なってくれます。

実はDevinはAndroid開発においてはとても有用で、AndroidLinuxベースの環境で動作するため、DevinにAndroidSDKをインストールすることでAndroidアプリをビルドできるようになります。コンパイルエラーを解消してくれたりテストを実行してくれるのでとても便利です。

古いデザインの画面が残存

Rettyアプリのデザインでは、白をベースカラー、オレンジをアクセントカラーとして使用しています。 しかし奥まった普段の施策で手が入りづらいような画面では古いデザインが残っていることが多いです。TopBarがオレンジでフォントサイズが大きい画面は古くから手をつけられていない画面で、主要な画面とのギャップが大きいため、せめてTopBarだけでも刷新したいなとずっと思っていました。

←古いTopBarの画面 新しいTopBarの画面→

ただこのような画面は20画面近く存在し、XMLで作られているかつ普段手を入れることがあまりないので「いつかやろう」と思いながらも、いつまで経っても改善ができていませんでした。

そんな時に現れたのがDevin様です。

今回やりたい改善は、明確にやることがわかっていて比較的単純な作業だったため、Devinを用いて解消できるのでは?と思い試してみました。

Devinとの改善

手動で参考になるPullRequestを作る

今回はXMLで作られている画面のToolbarをJetpackComposeのTopBarのコンポーネントに置き換えるという方針で進めようと考えました。 0からDevinに頼んでもある程度やってくれそうですが、不確実性を下げ、手戻りの少ない状態にしたかったので、人力で1画面のみ対応をしたPullRequestを作成しました。

Devinに渡すPullRequest

差分としてはこれだけです。XMLのToolbarをRettyで共通で使用しているJetpackComposeのTopBarに変更しました。

Devinに頼む

作成したPullRequestをDevinに渡して、その他全ての画面に対して同様の改善をお願いしました。

頼んだDevin...ッ!!!

どうやら22個のActivity/Fragmentで置き換えが必要だったみたいです。人力ではどの画面が置き換えが必要か調査するだけでも時間がかかるので、Devinが全体のコードを把握・調査してくれるのはとても助かりますね。

Devinが作ってくれたPullRequestを確認すると

  • 実装が漏れている画面が存在していた
  • material3ではなくmaterialのTextを使用していた
  • Javaで書かれているActivityではComposeのTopBarを実装するコードが書かれていなかった

という3点を発見したので以下のようにDevinに改善を指示しました。

改善を指示した結果、期待するものをしっかりと実装してくれました! 実装漏れがあったのは十分な指示をしていなかったこちら側の責任で、追加で明確な指示を与える必要がありました。

Treat Devin like a junior engineer. Assign Devin tasks a junior engineer or intern could figure out if provided with sufficient, clear instructions. (Devinをジュニアエンジニアとして扱いなさい。明確で十分な指示があればジュニアエンジニアやインターンでも理解できるタスクをアサインしなさい。)」と公式にも言われており、必要十分な指示を渡すのがDevinを使いこなすコツであることが実感できました。

できました

その他lintのWarningなどもDevinに解消してもらい、古い全ての画面に新しいTopBarを適用することができました🎉

← Before / After →

今回の改善は22画面にもおよび、調査から実装・検証までを自力で全てをやるには数日はかかったのではないかなと思います。それをほとんどDevin様に丸投げしてレビューするだけで1日で改善できてしまったのは最高の体験でした💪

Devinは「改善したいけど人がやるには費用対効果が低い」といった課題に対して大きな効果があることが実感できました。 改善したいけど面倒だなというものがまだまだあるのでAIと一緒に解消していきます🫡