本記事は Timee Product Advent Calendar 2025 14 日目の記事です。
タイミーのアプリがAndroid 16に対応しました
Android 16にアプリを対応させるにあたり、一番のハードルはEdge-to-Edge対応でした。Edge-to-Edgeの詳細については、Android Edge-to-Edge対応 大規模アプリですべての画面を更新するための道のり - Sansan Tech Blog のブログに詳しくまとまっているので、そちらを読むと良いかと思います。
簡単にEdge-to-Edgeを説明すると、アプリのコンテンツをステータスバーやナビゲーションバーで表示範囲を狭めずに全画面に表示することであり、Android 15ではopt-outのオプション付きで、Android 16からはopt-outがなくなり強制で対応が必須になりました。
タイミーのアプリは100以上のActivityで構成されており、ComposeとAndroid Viewの両方が使われています。Edge-to-Edgeへの対応は一つ一つは難しくないものの、ComposeやAndroid View、IME対応、Material Designのバージョンごとの対応など画面ごとに異なる対応を進める必要があり、100以上の画面で対応するのには大変な労力が必要な状態でした。
事前準備
パターンごとの対応方法をドキュメント化する
手元にあるいくつかの画面で対応を進めてみた結果、対応する場合のパターンが見えてきたので、共通関数の作成と対応パターンの分け方、パターンごとの対応方法のドキュメント化を行いました。
対応箇所を列挙する
変更の方針が立ったら、次にその変更をする対象を列挙しました。一つのPRで複数の画面に対応をすることもできますが、コンテキストが収まりきらなかったり、レビューも大変なので、画面ごとの対応にするために、対応が必要な画面を列挙しました。従来であればややめんどくさそうな作業ですが、AIエージェントが得意な作業です。
このアプリにあるActivityをComposeとAndroid Viewでそれぞれ全て列挙して
とプロンプトを打てば今では一発で列挙をしてくれます。このリストをNotionで管理して、完了までのロードマップを可視化しました。
実装
前述のパターン別ドキュメントに沿ってAIエージェントに対応を進めてもらいました。当時は(今も)様々なAIエージェントを試しに使っており、Cursor、Devin、Claude Codeなどで対応を進めました。プロンプトで
- developブランチからある画面のEdge-to-Edge対応ブランチを切る
- そのActivityのパターンに則ったEdge-to-Edge対応を実装する
- ビルドやコードフォーマットの実行
- ブランチをpushする
のステップを繰り返すことを指示すると、数時間で大量のPRを作成してくれるようになりました。
動作確認
実機での動作確認では、アプリ内で容易に到達できる画面もあれば、開くのが面倒な画面(例: 退会完了時の画面)もあります。そこで、すべてのActivityを開ける開発環境限定のデバッグ機能を用意し、Activity名から任意のActivityを開ける機能をAIエージェントで作成しました。すべての画面への遷移を1つの画面に集約するのは泥臭い繰り返し作業ですが、こうした単純反復もAIエージェントに任せることで2日程度で作成することができました。
まとめ
Edge-to-Edge対応は、Android 16対応における最大の難関でした。しかし、画面分類と対応パターンの明確化、AIエージェントの活用、動作確認の簡易化により、100以上のActivityを短期間で対応することできました。現在Edge-to-Edge対応中の方や、これから対応される方の参考になれば幸いです。
タイミーではAndroid関連のポジションも含めプロダクト組織で絶賛採用活動中です!
