見出し画像

DroidKaigi2024に参加してきました! (day2,3) #REALITY

こんにちは!REALITY Androidエンジニアのぴかです。
今回は前回に引き続き、DroidKaigi2024の参加の模様をお伝えします。
day2, 3はセッションがメインでAndroidにまつわる様々な内容についてのセッションを各々で聞き回りました。

まずは、今回の参加メンバー(REALITY Androidエンジニアほぼ全員)を紹介します!

参加メンバー紹介

ぴか

DroidKaigi 2回目の参加です!
普段はDesign周りの調整やUnity周りをよく担当しています。

メタルおじさん

DroidKaigiの物理会場参加は実は初めてでした。セッションを聴く以外にもブース巡りをしたり懇親会でいろんな方と仲良くなったりできて、楽しかったです。TwitterXのフォロワーも増えました。

mits_sid

DroidKaigiは今回の2024が初参加です! カンファレンスの規模が想像以上でドキドキしながらの参加でした!

応為



初日のワークショップに引き続き、セッションの方にも参加してきました!
今回はKMPに注目が集まっているところも増え、期待値高めです!

tkc

物理参加は2年ぶり2回目です。
HONDAのブースで出展してたバイクに乗ることができたのが予想外で良かったです。

hosico

猫が大好きなAndroidエンジニアです。DroidKaigiは、自分も今回初参加です!

セッションについて

以下に各メンバーが実際にセッションを聞いた上で印象に残った発表をまとめています!

ぴか

デザインからアプリ実装まで一貫したデザインシステムを構築するベストプラクティス

自分が普段REALITYのDesignSystemを担当していることもあり、気になっていた発表でした!
LINEヤフーさんのデザインシステムチームはREALITYと比べると規模も大きく、自動化なども含め、今後参考にしたいと思う部分を多く学ぶことができました。
また、課題感や意識の持ち方としては共感できることも多く、やってきたことの自信になりつつ、不足している部分を再認識することができたので、自分が今後デザインシステムの設計に対してどう接していくべきかを改めて考えていこうと思います!

mits_sid

起動時間で差をつけろ!アプリ起動パフォーマンス改善!

アプリの起動種別(コールドスタート、ホットスタート、ウォームスタート)から、計測指標、計測ツールの説明、モニタリングやAppStartupライブラリやベースラインプロファイルなどの汎用的なアプローチまで広く網羅されている内容でした。
「劇的な改善にはプロダクトごとのボトルネック改善が必須」という言葉がとても印象に残っています。アプリをより良くするためにはプロダクトごとのボトルネックをウォッチし、改善し続けられるような取り組みが求められるなと思いました。

Debugging All You Need to Know

プリントデバッグを避け、より良くデバッガーを使いこなそうという発表です。標準的な行ブレークポイントやDebugger Paneの説明から、実行中の変数の途中修正や関数実行途中の強制的な値の返却、複数スレッドの場合に特定スレッドのみ停止させる方法など踏み込んだ点まで幅広いテクニックが紹介されていました。
個人的にはsuspend functionのデバッグ途中に変数値を読み取れない問題に悩んでいたので、最適化オプションをオフにすることで対処出来ることを知れたのが良かったです。

hosico

オフライン・ファーストなアプリの実例 : ガーナの農業アプリ

ガーナで利用する農業アプリを例に、インターネット速度が遅いエリア(ガーナは、平均12.33Mbps)でオフラインで動くことを想定したアプリを作る上で、工夫した点や発生した問題点、解決法などが紹介された発表でした。
農地の境界線を歩き回り、土地のマッピングを行うために必要な位置情報の取得ができない問題や、Google Map上のPolylineの描画がうまくできない問題など色々な課題が紹介されていましたが、共通として言えることが開発環境では該当の問題の再現ができなく、実際のユーザの利用環境で初めて発覚したというものでした。Realityでは、様々な地域でアプリを利用していただいているので、開発側では把握できていないが、実際のユーザ利用環境では発生している不具合なども存在しており、現地のアプリの利用者の声を、開発者に届けるような取り組みが改めて求められているんだなと感じました。

Privacy Sandbox on Android

Privacy Sandboxについて紹介されており、なんとなくキーワードは知っていたけどあんまり理解できてない人が概要を理解する上でわかりやすい内容になっていると思いました。自分は、ユーザのプライバシーの保護をするため、広告IDに依存しない効果的な広告配信の仕組みということはざっくり理解してましたが、広告IDを使わずにどのようにパーソナライズや広告効果の測定を行うかをキャッチアップできてなかったので、TopicsやProtected Audience API、Attribution Reportingなどの代替技術の概要を知れて、理解が深まりました。(公式ドキュメントを読んでもピンと来なかったりするので)
Privacy Sandbox周りの技術を、業務で直接触ることは現状ありませんが、Realityではリワード動画広告経由で無料でコインをもらえる導線があり、その裏側でPrivacy Sandboxがどのように動作しているかは興味があったので、非常に有意義な発表でした。

Jetpack Compose Modifier徹底解説

zozoのプロダクトコードでよく使われていて面白そう or 使われてないけど注目したいという観点で、Modifier 47種がどのような効果があるかを視覚的にわかりやすく紹介がされていました。個人的には、アクセシビリティのTalkBack機能での読み上げに利用されるSemanticsは知らなく、確かにRealityではアクセシビリティなどの対応ができてないので馴染みがなく、アクセシビリティの取り組みを今後していく必要性はあるなと改めて感じることができました。

Google Sign-inの移行から始める Credential Manager活用

現在、非推奨となっているGoogle Sign-inをCredential Managerに移行するにあたって、そもそもCredential Managerって何?という疑問が出てくると思います。その疑問に対して、Credential Managerについての概念や実装方法など周辺知識を含めてしっかり紹介していただいている内容の発表でした。Realityではちょうど、Google Sign-inからCredential Managerへの移行を検討していたので、非常に参考になりました。

メタルおじさん

テストの新時代

AndroidのプロジェクトでJUnit 5を使用する方法や、JUnit 4と比べてJUnit 5の優れている点についての紹介がされていました。 特に便利そうだなと思ったのはParameterized testです。
@ParameterizedTest というアノテーションを使うことで同じテストケースを複数の入力パターンで実行することができます。入力値の指定はString, Intの値をハードコードする他、enumクラスを指定することができたり、CSVとして関連する複数のデータをグループ化して渡したりすることができます。

@ValueSource(strings = ["Login", "Register"])
@ParameterizedTest
fun test(arg: String) {
  // arg="Login", arg="Register" それぞれのパターンでテストを実行
}

@CsvSource(
    "Alice,  34, f, true",
)
@ParameterizedTest
fun testCsv(name: String, age: Int, gender: Char, b: Boolean) {
  // name="Alice" age=34 gender='f' b=true が渡される
}

Instrumented testについてもJUnit 5で実行可能だそうです(API Level 26以上)。Robolectricの対応は部分的にはできたものの、まだ完全ではなさそうです。

アイデアからIDEへ: Android Studio用プラグインの開発

個人的にAndroid Studioプラグインの開発について興味があったので、参考になりました。どのようなAndroid Studioプラグインが作れるのか、プラグインを開発するのに必要なクラス・インターフェースの紹介と実際の利用例が紹介されていました。
Android StudioプラグインはPSIというAPIを使ってエディターで開いているKotlinソースの構造にアクセスしたりできるのですが、このAPIはDetektのカスタムルールを実装する際にも見たことがあったので、「Android StudioプラグインとDetektにこんな共通点があるなんて面白いな〜」と思って聴いてました。
アプリ開発をサポートするための社内固有のツールをWebやCLIで作っているところはあると思うのですが、Android Studioプラグインとして作るのも面白そうだなと思いました。

tkc

アプリをリリースできる状態に保ったまま段階的にリファクタリングするための戦略と戦術

ライブラリの移行、巨大なActivity,Fragmentの解体、ViewModel, Hilt, Composeの導入などのリファクタリングを、アプリがリリースできる状態で進めるための戦略が紹介されていました。
業務ではアプリを止めてリファクタを進めるのは難しいため、紹介された戦略を意識すると現実的な範囲でのリファクタがしやすくなるように思いました。
個人的には、「いつでも中断できる単位で進める」という戦略はリファクタをする際に特に意識してみようと思いました。
各移行の仕方もコードとともに詳しく説明されているので、
真似して実践しやすいのも良かったです。

Android開発以外のAndroid開発経験の活かしどころ

Android開発をスキルのメインにすることに対する不安を感じたことのあるAndroidエンジニアは少なくないと思いますが、
そのようなキャリアの不安や疑問についてエンジニアリングとマネジメントのどちらも経験したkonifarさんのセッションです。
上記のようなトピックについて語れる人は数が少ないといわれるAndroidエンジニアの中でも更に少なく、エンジニアからVP of Engineeringまで経験している発表者の話はかなり貴重なものに思えました。

応為

今回はVRTを中心にセッションを聞いていました。
REALITYでも実はVRTの導入を進めており、Pull-Requestでレイアウトの差分があると検知をしてコメントにどこが変わったかを知らせてくれる仕組みを導入しています。

VRT(Visual Regression Test)とは、画面や各UIパーツの新旧双方のスクリーンショットを保存、比較して差分を検知するテストのことです。
XMLでレイアウトを記述していたときは、レイアウトの出力をすることに手間がかかっていましたが、jetpack composeの導入によりメソッドを呼び出すのみでレイアウトの出力ができるようになり、テストのハードルがガクッと下がりました。
また、roborazziやshowkaseによりスクリーンショットの保存が手軽にできるようになり、@PreviewがついているComposeを集めてスクリーンショットを出力したり、ライト・ナイトモードの出力等ができるようになっています。
スクリーンショットの取得にもただ取得するだけでなく、様々な条件で取得ができるようになり、目視確認も大変となるため自動化できる箇所を増やしていきたいですね。

おわりに

今回は会場での参加含め初参加のメンバーも多く、少しバタバタしたりもしましたが、多くの刺激や学びを得ることができました。
REALITYのプロダクトにも応用できる部分も多くあり、早速メンバーが対応をしてくださいました!!(早い!!)

社内でのDroidKaigiの活用事例

最近はチーム内でオフラインで集まることもそこまで多くなかったため、メンバー全員で参加できたことで、社外の方含め、交流できたことも良かったと思います!

懇親会のお寿司
ライブキッチンのような形も!
懇親会の限定のお酒!JVMとKoala!
DroidKaigiのプリクラ

今回はスポンサー参加や登壇参加はありませんでしたが、来年以降は是非そちらの方向性での参加も目指していきたいです💪
また、発表で得た知見を活かして今後のREALITYの改善や成長にも繋げていこうと思います!!