見出し画像

DroidKaigi2024 に参加してきました

9月12日(木)〜9月13日(金) に DroidKaigi2024 に参加してきました。

初のオフライン参加だったのですが、かなり有意義な2日間を過ごすことができました。「鉄は熱いうちに打て」ということで、参加レポートをNoteに投稿することにしました。

今回の参加レポートでは、私が視聴したセッションを抜粋して、感じたことを中心にまとめていこうと思います。また、最後の方では、DroidKaigi を参加してみての感想を述べようと思います。

はじめに

まずは、DroidKaigiの運営の皆様、本当にお疲れ様でした。そしてありがとうございました!当日までの準備は大変だったと思いますが、おかげで2日間を存分に楽しむことができました。

また、登壇者の皆様にも感謝いたします。(ちなみに、私はプロポーザルを提出してリジェクトされたので、皆さんには頭が上がりません!笑)
発表準備の大変さを思うと、尊敬の念しかありません。本当に勉強になりました。

そして、スポンサー企業の方々にも感謝です。ブース訪問やノベルティなど、楽しませていただきました。

視聴したセッション

Contextを理解する (発表スライドはこちら

Contextを「アプリがアプリ内外の様々な情報や機能にアクセスするための窓口」と表現するなど、オーディエンスに配慮した、とても分かりやすい発表でした。Context を改めて、おさらいしたい方はぜひ。

本セッションでは、Androidエンジニアが一度はつまずく「Application Context と Activity Contextの違い」についての解説が印象に残りました。

例として、Intentを使って別のActivityを起動する際、Application Contextを渡すとクラッシュするという話がありました。FirstActivityの情報も一緒に渡す必要があるためです。

val context = LocalContext.current.applicationContext
val intent = Intent(context, SecondActivity::class.java)
context.startActivity(intent)

一方、WorkManagerにはActivity Contextを渡してもOKという話もあり、驚きました。内部でApplication Contextを取得しているとのことでした。ここで、なぜ、Activity Context から Application Context を取れるの?って疑問が湧いたのですが、おそらく、Application Context は シングルトンであるから、なのだと解釈しました。

Kotlin 2.0 が与える Android 開発の進化 (発表スライドはこちら

Kotlin 2.0に関しては最新情報を追っていましたが、変更点をおさらいできました。K2対応していこうと考えている方はぜひ。

セッションを聞いていて、K2に対応する際にAndroid Studio側の設定も変更が必要であることを知らなかったので、気をつけなければと思いました。

また、@Immutable と @Stable の違いもクリアになりました。
@Immutableは「Instance equals == false」でRecomposeされ、@Stableは「Object equals == false」でRecomposeされるという点が興味深かったです。

Jetpack Compose Modifier 徹底解説 (発表スライドはこちら

Compose 修飾子のリスト から、時間の許す限り、Modifier の種類の説明をしてくれました。こういう勉強って大事なのですが、後回しにしちゃうので、タメになりました。

個人的には、zozo でも、Modifier.basicMarquee が使われていることに驚きました。なんとなくの想像で、デザイナが実装難易度を考えちゃって、marguee の提案ってしづらいのかなぁとも思ったりするんですが、zozo では、エンジニアもデザイナーと密にコミュニケーションとりながら、実装を進めているのかなぁ、という想像をしながら、話を聞いてました。

Privacy Sandbox on Android (発表スライドはこちら

Privacy Sandbox とは、「Googleが提案している新しい広告配信の仕組み」です。最近、Adjust SDK を導入したこともあり、広告周りの仕組みに興味を持ち、視聴してみました。ドメイン知識がほぼ皆無の状態でしたが、わかりやすい発表でした。

まず、そもそも、広告IDは恒久的なIDではないことを初めて知りました。どうやら、設定アプリから、広告IDのリセットができるみたいです。笑

あと、広告IDを利用しない方法で、どのようにプライバシーを保護した状態で、広告配信を行うんだろうか、と思ってたんですが、セッションを聞いて、「なるほど」と感じました。(詳細は割愛。)

現在、Privacy Sandbox は提案段階ではありますが、おそらく、Androidエンジニアはキャッチアップしていく必要がある気がします。
先んじて、情報を仕入れておけてよかったです。

[招待講演] Android StudioのGeminiでコーディングの生産性を高める

Android Studio の Product Manager + UX Designer によるセッションでした。スライドが見えなかった & 英語が聞き取れなかった箇所がたくさんあったという事件はあったのですが、Gemini × Android Studio すげぇ〜ってなりました。

  • 単体テストのシナリオ生成(テストメソッドが自動で生成される)

  • 変数名のサジェスト(ある変数に対して、コードの文脈から、複数の変数名のサジェストを行い、かつリネームしてくれる)

改めて、うまくAIを使っていくことが大切だと感じました。(と言いつつ、何もかもAIに頼った結果、何もコードがかけなくなった、というオチにならないように要注意ですね。笑)

タッチイベントの仕組みを理解してジェスチャーを使いこなそう (発表スライドはこちら

Jetpack Compose 時代の ジェスチャー処理は、直感的でなく、苦労していたのですが、わかりやすい説明でした。ジェスチャー処理の理解に苦労している方はぜひ。

まず、ジェスチャーを、タッチ状態の変化を画面に触れている指について連続的に取得したもの、と定義しており、これを念頭に置いておくだけで、Compose のジェスチャーの仕組みがわかりやすくなると思います

あと、PinterEventPass という概念にビックリしました。子要素と親要素のジェスチャー競合を解決する際、これを駆使して、複雑な競合解決ができるなぁと感じました。(詳細は割愛。)

実践!難読化ガイド (発表スライドはこちら

難読化の対応って、あまり機会がないが故に、勉強が疎かになってしまいがちですが、これを機に、学び直すことができました。難読化を学びたい or 学び直したい方、必見です。

まず、「R8 が Java のバイトコードで動作する」というのは私に欠けていた情報でした。トップレベル関数の難読化とかしたことなかったですし、意識する機会がなかったのですが、タメになりました。

あと、難読化されたクラッシュレポートから、原因特定する方法が勉強になりました。(知りませんでした・・・)
1年半前、とあるプロジェクトで、難読化されたクラッシュレポートを読む機会があったのですが、かなり苦労したのを覚えてます・・・笑

最後に、@Keep と -keep の違い、これは感動しました。違いってあるのかなぁ?って思いながら、特に使う場面がなかったので、放置していたのですが、勉強になりました。

余談パート

今年も DroidKaigi へのコントリビュータに

去年に引き続き、コントリビュートしておきました。(Paddingを変更しただけですが・・笑)

そしたら、なんと2日目の Welcome Talk で、コントリビュータとして、スライドに乗っけてくれてました。笑

2日目 - Welcome Talk

今年の DroidKaigi のアーキテクチャは面白かったですね。来年のコントリビュートも楽しみですね。

スポンサーブースを訪問してみて

合計17のスポンサーのブースを訪問してきました。
どのブースも非常に楽しかったのですが、凝ったノベルティを提供している企業さんは、記憶に残るなぁ〜と感じました。(ただ、企業名ってなんだっけ?って現象には陥るので、注意が必要な気がしました。笑)

あと、スポンサーの方と話していて、なんとなく会社や組織、そしてメンバーの特徴があるなぁと感じました。

最後に、ブースを出展するモチベーションって、「エンジニア採用」が大きいのだと思うんですが、内部の技術スタックを公開したり、事業内容を推し出すことも大切なのかなぁと思ったりしました。

最後に

最後まで記事を閲覧してくださり、ありがとうございました!!
改めてですが、この2日間は非常に有意義な時間を過ごすことができました。

恩返しとは言わないですが、来年は、私もスタッフとして、DroidKaigiに貢献してみたいと思います!

この記事が気に入ったらサポートをしてみませんか?