DroidKaigi 2023 Day1 セッション概要&感想

# はじめに
DroidKaigi 2023に参加してきましたので、オフラインで聴講してきたセッションの概要とその感想についてまとめていきます。
Day2のセッション紹介はこちらです

https://qiita.com/t_nana/items/8789fd8dbcc5b18ab560

# これで安心！ Compose 時代のDon’t keep activities対応
## 概要
開発者向けオプションにある「アクティビティを保持しない（Don't keep activities）」をONにすることで、メモリの少ない端末の動作を再現できるので、その状態で起こるバグ、Activity破棄時にも画面情報を引き継ぐための方法について解説したセッションでした。
セッション内では、ComposeにおいてはrememberSavableを使うことで、引き継ぎたい情報のkey設定やsave/restoreの処理を記述することなく引き継ぎ処理ができるのでおすすめとのことでした。ただし、ここで使っているのはBundleのため、このBundleの容量上限である50MBを超えないようにする必要があるとのことです。

## 感想
開発時にも、「アクティビティを保持しない」をONにすると、アプリ容量が足りてないせいでクラッシュしたり、入力したはずの情報が綺麗さっぱり消えて無くなってることはそこを意識せずにいるとよくあるなと思いました。昔はFragmentのBundleを使ったり、最近だとViewModelのSavedStateHandleを使うような方法がありましたが、今回紹介いただいたrememberSavableはなによりもsave/restoreの処理を書かなくてもいいところが最高ですね。ただしこの簡単さゆえにBundleの容量上限は何よりも気をつけねば...と思いました。気がついたら50MB突破してたぜとか、想像できますね。

# よく見るあのUIをJetpack Composeで実装する方法〇選
https://docs.google.com/presentation/d/1LNn-fI4a3hOFTn93u8hn_9OAon9HnFGkylc1inr6b-o/edit#slide=id.p
## 概要
タイトルのとおり、よくあるUIをどうやったらJetpack Composeでつくれるの？　作る際の注意点は？　という疑問をコードベースで、かつ実際の画面動作も込みで紹介していたセッションでした。単純なUI話だけではなくアクセシビリティ話も挟んでいました。

## 感想
スライド見て！　が正直な感想ですね。本当によく使うUIをピックしているので、誰にとっても役立つものではありましたが、特にComposable UI初心者にはかなりありがたい内容だったのではと思いました。
何気に参考情報のURLもより詳しく知るために便利に使うことができました。

# Push通知許諾率向上のアプローチ
https://speakerdeck.com/miyabigouji/pushtong-zhi-xu-nuo-lu-xiang-shang-henoapuroti
## 概要
通知はアプリの外でユーザとコミュニケーションが取れる重要な機能ですが、年々そのハードルは上がっています。特にAndroid13では通知のデフォルト設定がOFFになり、より一層通知を受け取ってもらうのは難しくなりました。そんな中で「通知をOFFにされないようにするためには」「通知をONにしてくれるには」を中心に通知チャンネル分けとチャンネルごとの重要度をポップアップのあり/なしで変化させることで特定の通知を開いてもらいやすくなりました、という内容でした。

## 感想
自分はAndroid13での通知デフォルトOFFがかなりショックを受けた記憶があります。貴重なアプリから主体的にユーザにコミュニケーションを求めることが機能であり、これはアプリをどれくらい利用してくれるかにも大きく影響します。こちらのセッションでは技術的な話では「通知チャンネル分けとチャンネルごとの重要度を変化」が主な話でしたが、個人的にはその手前に発表されていた「どれくらいの通知を送るとユーザから通知OFFにされやすいのか」「どの画面を見た後に通知をONにしてくれやすいか」を調べ、仮説を作る行動分析が最も重要だと思いました。通知チャンネル単位で重要度を分けても重要だと判断した通知がユーザからしたら見当違いだった場合は通知OFFの行動を加速させることになりかねませんからね...
セッション資料には実際の通知許諾のオプトアウト率、通知許諾率、通知開封率などの実際の数値も載せていたので、実際にどのくらい上がった、下がったというのがわかりやすかったです。

# モニタリングでパフォーマンス改善入門
https://docs.google.com/presentation/d/1m4b8EYs4jrXEjNIFoelInZMSxZHCFArBUkcZz1zzRQY/edit#slide=id.p
## 概要
[アプリパフォーマンスガイド](https://developer.android.com/topic/performance/overview?hl=ja)の内容を実際の動作も込みで発表しており、パフォーマンス改善の方法やツールの使い方をより深く知ることができるものでした。特にlogcatを使ったPassiveTest, ProfettoやAndroid StudioのProfile, JankStatsなど基本ツールの使い方や見るべきデータを教えていただけたのは、これからパフォーマンス改善をしようする開発者にとってお手本になるようなセッションでした。
開発時のパフォーマンス改善方法だけでなく、Android VitalsやFirebase Performanceを使った継続的なパフォーマンスの監視方法についても解説していました。

## 感想
開発時のパフォーマンス改善時にどの画面を直せばいいのかわからない、という疑問に修正対象の画面、機能の探し方をばっちりと答えてくれました。自分が使ったことなかったツール（Jank Stats, Profetto）を実際に画面を動かしながら動作を見せつつどこを見ればいいのかを教えてくれたのは嬉しかったです。
特にFirebase Test LabをGithub Actionsと組み合わせるのはいいなと思いました。開発時にローカルでツール回すよりも例えばPR作成時に回すようにすれば追加箇所で著しくパフォーマンスを落とすような変更がないか確認できるのは便利ですね。

# Jetpack GlanceではじめるMaterial3のColor
https://speakerdeck.com/mochico/jetpack-glancedehazimeru-material-3nocolor
## 概要
Material3で登場したDynamic Colorを使うことで、ユーザの壁紙から端末のカラーテーマを変化させることができるようになりました。しかし、Material3自体が以前のMaterial2からデザインシステム面で大きく変わったこともあり、まだ導入が進んでいないアプリも多い状態です。
このセッションではカラー変更がされるホーム画面に設置されるWidgetにDynamic Colorを適用することで、アプリ本体に導入せずにかつユーザ体験を最適化させる方法について解説していました。

## 感想
アプリの中にはブランドカラーがあるアプリが存在していますが、Material3のデザインシステムはブランドカラーと非常に相性の悪いものです。軽く解説しますが、Material3ではkey colorを5つ選択し、そこからkey colorから輝度が変化したtonal paretteが作成されます。このtonal paretteから特定の輝度の色をRoleに割り当てていくことでColor Schemeが作成されます。このColor Schemeにある色（key colorから作られた29種の色）が実際のアプリで使われることになります。つまり、最初に選ぶkey colorにブランドカラーを選択しても、Color Schemeになるころには別の色になっているということです。ブランドカラーがそのまま使えないMaterial3はブランドカラーのあるアプリにとって導入にかなり高いハードルがあると言えます。
しかしWidgetであればアプリ本体に影響せず、かつDynamic Color適用でアイコン等も変更されるホーム画面に配置されるため、Material3の導入のスタートラインとしては最適だなと思いました。

# さいごに
DroidKaigi 2023 Day1のオフライン聴講してきたセッションは以上になります。
これ以外にもライブ公開していたセッションは今すぐにでも見れますし、これから各セッションは順次動画化されて公開される予定とのことでした。
Droid Kaigiも年々規模が大きくなっている気がします。来年の参加も楽しみです。