こんにちは。食べログシステム本部 アプリ開発部の 和田 です。
以前、食べログのアドベントカレンダーで記事を執筆したことがあるため、ご存知の方がいるかもしれませんね。
私は、今からおおよそ4年前に弊社(株式会社カカクコム)に入社して以来、ずっと Android 版食べログアプリの保守を担当しています。
例えば以下のような対応をしています。
- 非推奨になったライブラリを最新のものに差し替える対応
- ビルドツールや開発言語、ライブラリのアップデート
- TargetSdkVersion の更新
- 保守性が高く、テスタブルな設計へのリアーキテクチャ
- CI/CD 環境の整備
- 脆弱性診断の準備
Android 版食べログアプリは規模が大きく、様々なライブラリを導入しているため、仕事がなくなることはありません(笑)。
私はコードの保守や改善が大好きなので、楽しく仕事をさせてもらっています。
さて、私の自己紹介はこれくらいにして、本題に入ります。
先日、私は弊社の Android 開発者とともに、DroidKaigi 2023 に参加してきました。
私が DroidKaigi 2023 に参加した理由は、Android 版食べログアプリの保守に活かす知見を得るためです。DroidKaigi に参加すると、今後非推奨になりそうな技術
や これから盛り上がりそうな技術
について知見を得ることができ、先手を打った保守ができると私は考えています。
また、食べログは Supporter として DroidKaigi 2023 に協賛しました。食べログは、iOSDC Japan 2023 にも協賛していて、今後はこういった活動もしていきたいと考えています。
当記事では、DroidKaigi 2023 の Day1 の中から、私が興味を持ち、食べログアプリの保守に活かせると考えたセッションをいくつか紹介します。
目次
- Deep dive into size configuration changes
- Unleashing the Power of Android Studio
- モニタリングでパフォーマンス改善入門
- After Party
- 今後私が食べログプロジェクトでやりたいこと
- さいごに
Deep dive into size configuration changes
Chiko さんのセッション。
画面の向きの変更や、言語/地域の変更、ダークモード/ライトモードの切り替えなどによって生じる構成変更について、注意しなくてはならない点を数多く紹介してくれました。
他にも、例えば次のような様々な情報を共有していただけました。
- Chromebook やタブレットといったラージスクリーンに対応することの重要さ
- ラージスクリーンにアプリをインストールすると、見栄えが悪くなることがある
- ラージスクリーンの場合、複数のアプリを並べることができるため、必ずしもアプリが Portrait/Landscape で固定的に表示されるとは限らない
- 折りたたみ式デバイスに対応することも重要
- スクリーンサイズを動的に計算するときの注意点
- inset はスマホの設定によって変わり、アプリが自由に表示できる領域が増減する
- Jetpack WindowManager を導入すれば、正確なスクリーンサイズを取得できる
- 構成変更が実行された場合、API レベルによっては Activity の再起動が必ずしも実行されるとは限らない
- API 24 からは大幅なサイズ変更が起きない限り、アクティビティの再起動は生じない
- 構成変更が実行された場合、API レベルによっては、Activity の onConfigurationChanged が呼び出されない
- View の onConfigurationChanged なら API レベル問わずに呼び出される
食べログアプリの開発に活かせそうな知見
食べログアプリは、いくつかの画面でスクリーンサイズを計算することがあります。スクリーンの横幅に応じて、ボタンの横幅を動的に計算する、などです。
検証は必要ですが、Chikoさんに共有頂いた、 Jetpack WindowManager を導入すれば、デバイスを気にせずスクリーンサイズを計算できるのではないかと考えています。
また、アプリ開発部は、検証用端末として折りたたみ式デバイスを購入しています。今後、食べログアプリが折りたたみ式デバイスに対応する場合、Chiko さんに共有頂いた知見を活用できると考えています。必ず対応する、とは言いませんが(笑)。
Unleashing the Power of Android Studio
mhidakaさん のセッション。
Android Studio の最新機能を利用したデバッグ手法や生産性向上のための技法を数多く紹介してくださいました。
食べログアプリの開発に活かせそうな知見
現在、食べログアプリは Android Studio Flamingo によって開発していますが、次の理由があるため、mhidaka さんに共有頂いた技法をすべて使いこなせるわけではありません。
- 食べログでは、Android Studio の更新に合わせて他のライブラリの更新も行っており、Stable の最新バージョンを常に使っているわけではない
- すべてのプロダクトが Jetpack Compose を導入しているわけではない
しかし、様々な技法を食べログアプリの保守、開発に役立てることができると考えています。例えば、以下のような使い方です。
- Device mirroring
- リモート会議の参加者に、実機の表示内容を共有するのにすごく役に立ちそう
- 今までは、手元で動画を撮影して参加者に共有したり、エミュレータの表示を共有したりしていました
- Network inspector
- ステータスコード、ヘッダ、本文など、あらゆるトラフィックデータが表示されるようになりました
- 今までは、Http クライアントライブラリが出力するログを確認していました
- ルールを設定することで、ルールに合致したレスポンスを書き換えることができるようになりました
- 食べログアプリの開発者には、ひとりひとりに開発用の Web/アプリケーションサーバが割り当てられています
- 今までは、開発用の Web/アプリケーションサーバのコードを書き換えて、ネットワークやサーバサイドに係る異常系の動作確認をしていたのですが、Network Inspector の機能を利用すれば、より簡単に異常系の動作確認を実施できそう
- ステータスコード、ヘッダ、本文など、あらゆるトラフィックデータが表示されるようになりました
- One-click automated profileable build and run
- 食べログアプリのビルド時間を計測してボトルネックを突き止めたいですね
これらの機能を活かして、より効率的にアプリを開発してゆきたいですね。
モニタリングでパフォーマンス改善入門
ShimizuAsami さんのセッション。
Android Vitals や Firebase Performance Monitoring などのツールを使い、パフォーマンスをモニタリングし、ウィークポイントを改善する方法を紹介してくださいました。
食べログアプリの開発に活かせそうな知見
食べログアプリはデータ構造が大きい、通信回数が多い、View のネストが深い、などの問題があり、パフォーマンスの悪化に悩まされています。 今回、こちらのセッションを聞くことで、例えば次のような知見を得ることができました。
- アプリパフォーマンスガイド を読む
- 受け身検査はすぐに実行できる
- 所定のタグ(Choreographer/ActivityManager など)の出力を Logcat で確認するだけで実行できます
- 手動検査を補助するツールがあること
- すぐには対応できないかもしれないけど、 Instrumented tests でパフォーマンステストを自動実行できるようにしたい
- Firebase Performance Monitoring を導入しているものの、今ひとつ有効活用できていないので、ネットワーク、アプリ起動、フリーズ情報の収集にもっと役立てたい
- Stable版がリリースされたら JankStats の導入を検討したい
ShimizuAsami さんから共有いただいた通り、アプリ起動やレンダリングなど、各領域に集中してボトルネックの調査、改善に努めてゆきたいと考えています。
After Party
Day1 の最後に、After Party が開催されました。
ドリンク、料理が色々提供されてて、ローストビーフやお寿司などもあり、かなり満足感がありました。写真の通り、色々なエンジニアが交流を深めていて、最後まで楽しそうな雰囲気でした。
今後私が食べログプロジェクトでやりたいこと
Android 版食べログアプリは 10年近く運用されており、残念ながら技術的負債になってしまったコードが散見されます。今回、DroidKaigi 2023 に参加したことで、食べログアプリの技術的負債を返済するための知見を得ることができました。今後は、得た知見を活用してゆくつもりです。
素晴らしいセッションを提供をしてくださった DroidKaigi 2023 の運営者の方々、登壇者の方々に心より感謝致します。
当記事では DroidKaigi 2023 の Day1 で得た知見を紹介しましたが、後日、Day2、Day3 で得た知見を他の Android 開発者が紹介する予定になっています。それらの記事もぜひ楽しみにしてください。
さいごに
当記事では、私の業務の都合上、保守に関する話が多くなってしまいましたが、食べログアプリはビジネス上の目標を達成するため、多くの機能開発が行われています。保守、機能開発ともにやるべきことがたくさんあります。こちらの記事をご覧になっている Android 開発者の方は、きっと食べログプロジェクトで活躍できるでしょう。
食べログプロジェクトの Android 開発チームは心理的安全性が高いチームだと思います(自分で言うのもなんですが)ので、食べログの Android アプリ開発に興味を持った方は、ぜひ以下の採用情報ページをたどってみてください。