
DroidKaigi2023現地参加レポート
こんにちは、トリです。
食べ物のnoteをよく投稿しますが、普段はAndroidエンジニアをやっています。
先月、初めてDroidKaigiに現地参加してきました。
せっかくなので、備忘録を兼ねてレポートを書いてみようと思います。
DroidKaigiとは?
DroidKaigiはエンジニアが主役のAndroidカンファレンスです。
Android技術情報の共有とコミュニケーションを目的に、2023年9月14日(木)〜16(土)の3日間開催します。
2023はどんな内容だった?
1日目・2日目は、タイムラインに沿っていくつかの部屋でセッション発表が行われました。
間でテーマについて話せるミートアップがあったり(ランチやおやつを食べながらのゆるい感じ)、祭り並みに活気のあるスポンサー企業のブースを回ったりできます。
あとは、なぜかジェルネイルもできます。
バリスタの美味しいコーヒーも飲めますし、軽食やおやつもあります。
3日目になるとセッションや企業ブースはありませんが、エンジニア同士集まってコードラボを進めたり、DroidKaigiアプリのコントリビュートに挑戦してみたり、キャリア相談したりできます。
会場のステージで「キャリア・パネルトーク」というイベントもあり、色々な方のキャリアのお話が聞けておもしろかったです。
実に有意義で贅沢な3日間でした。
聴講したセッション
《day1》
これで安心! Compose 時代のDon’t keep activities対応
Don't keep activities(アクティビティを保持しない)についてのセッションです。
従来はViewModelやsavedInstanceStateで必要なデータを保持していましたが、JetpackComposeではどのようにデータを保持するのか? どのような注意が必要か? といった内容でした。
Android開発ではActivityの破棄は切っても切れない関係です。
JetpackComposeに移行しても考慮は必要なので、まとまった情報が得られたのは幸いでした。
よく見るあのUIをJetpack Composeで実装する方法〇選
実務でよく見るUIの実装方法について、画像とコードを併せて紹介されていたのでわかりやすかったです。
参考情報や注意点のURLも記載されていて、詳細を調べに行きやすいところも助かりました。紹介されたUIは下記の9種類です。
ローディング
ボトムナビゲーション
ボトムシート
アコーディオン
カルーセル
クレジットカード番号入力
固定ヘッダー
特定位置へのスクロール
もっと見る
(Unofficial) Guide to App Architecture Guide Vol. 2
Dagger Hiltの利点と弱点の話。それからマルチモジュールの分け方やアンチパターンの話もありました。
あまり触れてこなかった分野なので難しい内容でしたが、いずれは理解していきたいところでもあるのでセッションを聞けてよかったです。
マルチモジュールについてGooglePlayのアプリ詳細画面が例に挙げられた時、思った以上に細かく分割されていたことが印象的でした。(確か6分割)
モニタリングでパフォーマンス改善入門
いくつかのパフォーマンス改善の手法を動画を交えて紹介しています。
「検査と改善のサイクルを回すときは一箇所ずつ見ること」はしっかり頭に入れておきたいですね。
AndroidStudioはAndroid Profilerはもちろん便利な機能が色々あるので、うまく活用していけるようになりたいです。
Master of NestedScroll
複雑なレイアウトのネストスクロールで発生しうる問題の解決方法を丁寧に紹介しているセッションでした。
従来(AndroidView)のコードとJetpackComposeコードを比較しながら説明されているのでわかりやすかったです。
シンプルなスクロールではない場合、JetpackComposeだとカスタムが必要になるケースが従来より多くなること。ただ、従来のコードよりはカスタムしやすい点は覚えておきたいですね。
《day2》
Kotlinハイパフォーマンスプログラミング
アプリ高速化についての入門的なセッションです。
ためになる話が多かったです。下記はメモ。
JVM言語が遅かったのは過去の話でKotlinが特別遅いわけではない
メモリは遅いものなので、メモリアクセスの無駄はできるだけ減らす
しかし、なんでもかんでも速さを優先するとメンテナンス性が損なわれる
大量のデータを高頻度で処理するところなど限定してボトルネックになっている箇所を最適化する
Jetpack Composeを活用した強力なUI表現の実装実例
JetpackComposeでもっと踏み込んだUI表現のセッションでした。
AnnotatedStringは実務でも活用しそうなので、情報を得られてよかったです。
セッションに出てきた内容は下記。
AnnotatedString
StringBuilderのように一部のテキストだけスタイル変更・アイコン設定などできる
Brush
グラデーション表現。背景にもテキストにも反映できる
Modifier.drawWithContent
Canvasを拡張したようなもの。オブジェクトを重ねた表現ができる
Animation
オブジェクトのアニメーション、バネ・緩急のついた表現など
発表を聞いていて、グラフィカルな表現の実装がとっつきやすくなった印象がありました。
ここ数年のAndroid Textの新(?)機能について / What's new (?) in Android Text
TextView周りの最近の新機能についてのセッションです。
なかなかニッチでテクニカルな内容が多かったですが、
前職で少しTextViewをカスタムすることもあったのでおもしろかったです。
実務だと、日本語の文節改行(API33から)が便利そうでした。
TextShaperも楽しそうなので個人で何か試してみたいですね。
突撃!隣のコードレビュー
コードレビュー歴が浅いので、他社事例を聞いてみようと思い立ち聴講しました。
内容は、社内3チームで取り組んでいるコードレビューの流れや工夫の紹介などです。基本的な流れはどのチームも同じですが、工夫している点はチーム構成によって違いがあり興味深かったです。
内容によっては変更行数が大きくなりレビューが大変……はよくあるので、
より良い方法を考えていきたいですね。
Material 3 やめました
Material3をやってみて、問題があったので独自デザインシステムを構築したというセッションです。
ブランドカラーを設定してもMaterial3のカラールールで微妙に色が変わってしまうし、DynamicColorやDarkModeはカスタムカラーに対応していない。
独自で定義する方向になってしまうのも納得です。
Material3に合わせてカラー設定する場合は問題なさそうですが、独自のカラーシステムがある場合は同じような対応が必要になるかもですね。
写真コーナー
現地でもらったもの

こんなに物をもらうと思わなくてびっくりしました。
ちなみにブースは半分くらいしか回っていないです。







美味しい思い出



会場のキャラクターがかわいい



おわりに
セッションやブースで話を聞いてみるとJetpackComposeの話題が多く、部分的に導入している会社も結構ありました。
JetpackComposeに触れる機会がなかったので、これを機に色々試していければいいなと思っています。
あと、これは反省なんですが、のんきにしていたら9月のイベント終了から1ヶ月以上経ってしまいまして……思い出すのが大変でした(それはそう)
来年参加する時は、せめてその日のうちに下書きを始めておこうと思います。