1. Home
  2. イベント
  3. DroidKaigi 2023に参加しました!

DroidKaigi 2023に参加しました!

はじめに

「ニフティ不動産」アプリのAndroid側の開発を担当している、TS-Elfenです。Androidの技術共有と、コミュニケーションを目的としたカンファレンス「DroidKaigi」に現地参加してきました!弊社のプロダクト開発でも活かせる内容もあり、とても楽しく参加できたイベントだったため、本記事では、その感想などをご紹介しようと思います。

DroidKaigi 2023の概要

今回のDroidKaigi 2023は以下のような日程で開催されました。

  • 1日目(9/14(木) 10:30-19:20)
    • 様々なスピーカーによるトーク
    • 特定のテーマについて話せるMeetUp
    • AfterParty
  • 2日目 (9/15日(金) 10:30-18:00)
    • 様々なスピーカーによるトーク
    • 特定のテーマについて話せるMeetUp
  • 3日目(9/16(土) 11:00-16:00)
    • オフィスツアー
    • キャリア相談会
    • パネルトーク
    • 特定のテーマについて話せるMeetUp

上記にある「特定のテーマについて話せるMeetUp」という項目は、その名のとおり、様々なテーマ(例えば「初学者」など)を掲げたテーブルが用意されており、参加者同士が気軽に意見交換することができるというコーナーです。ランチタイムやおやつタイムに時間設定されていて話しやすい環境がつくられており、とてもありがたいと感じました!

また、スポンサーブースでは様々な企業がブースを出しており、それぞれ、会社の事業紹介やノベルティの配布などを行っていました。

そして、会場ではスナックやペストリーなどの軽食や、バリスタによる美味しいコーヒーの提供サービスなどがあり、リラックスした状態で講演を聞くことが出来ました!

聴講した講演の感想

それでは、本カンファレンスのメインコンテンツであるトークの一部について紹介します。

これで安心! Compose 時代のDon’t keep activities対応

これで安心! Compose 時代のDon’t keep activities対応 | DroidKaigi 2023

内容

  • 開発者オプションにある「アクティビティを保持しない」オプションについてのトーク
    • 今見えている画面以外のアクティビティを全てクリアするようにするオプション
    • AndroidのOSによって、メモリが不足した際に表示していないアクティビティが意図せずクリアされてしまう場合がある
      • 特に、古い端末はメモリがあまり多くない場合が多く、古い端末でのみ起こる不具合などの再現に役にたつ!
  • いつメモリは不足することが多いか?
    • 画面遷移で新しくactivityが生成されるとき
    • アプリからカメラなどの外部アプリを起動する時
  • 対応すべきか?
    • アプリや画面の特性に応じる
      • 例)長文入力、多様な選択肢を選ぶような動作を前のActivityでやっており、次の確認画面に遷移したが、前の画面に戻って入力を修正したい
        • ここでActivityが破棄されてしまうと、入力が最初からやり直しになってしまいUXが損なわれる
    • 問題の発生頻度や、上記の特性に応じて優先順位を検討する
  • 対応方針
    • UIStateを保存する枠組みを使う
    • Composeでは、クラシックなViewよりも多くの情報を保存する必要があるため注意
  • 保存のために用いるAPI
    • SavedStateAPI
      • Bundleにデータを保存するためのAPI
      • ComposeやView、ViewModelなどで参照可能
      • Bundleには50KBくらいしかデータが入らない想定でいた方が良い
  • Bundleの容量
    • なぜこんなに少ないのかというと、意識せずに保存されている情報があるから
    • Navigation-Composeの遷移への引数はBundleに保存されている
    • 画像を渡す際には、APIを叩くために必要な情報のみにする。画像とかデータそのものを送るのはやめたほうがいい
    • Observeなどの状態も問答無用で破棄されるため、新しいActivityを開くときは気をつけた方が良い

感想

  • ニフティ不動産の賃貸アプリでもGoogleMapを起動する導線があるので、状態の管理には気をつけなければいけないなと思いました。
  • 開発で使えるオプションに関する説明は、今後問題に直面した際に活用できるのでありがたいと思いました。

Jetpack Compose の Side-effect を使いこなす

Jetpack Compose の Side-effect を使いこなす | DroidKaigi 2023

内容(メモ)

  • 副作用とは?
    • 関数の結果を返す以外の効果のこと
    • 実行順によって結果が変わったりするのでテストがしにくいもの
  • Jetpack Composeにおける副作用とは?
    • コンポーズの関数以外での変化
      • スナックバーを出す、メッセージを表示する、画面遷移をするなど
    • これらの動作を安全に実行するようにする必要がある

内容(コードと動作の一部の紹介)

LaunchedEffect

LaunchedEffect(key) {
  // ここに処理を書く。中はCoroutinesになっている
}
  • LaunchedEffect内のブロックが呼ばれるタイミングは以下の2つ。
    • Composableが初回にCompositionに入った時
    • keyの値に変化があったとき
  • したがって、外部要因でこのブロックがあるComposableにRecompositionが走っても、Keyが変わっていない場合は中身が呼ばれることはない。
  • また、内部が Coroutines になっており、suspend関数を呼び出すことが可能になっている。
    • suspend関数の処理のキャンセルについては、次の2パターンで実施される
      • Keyが変わった時
      • UIのTreeからComposeが消える時

DisposableEffect

DisposableEffect(key) {
  // LaunchedEffectと同じ条件で呼び出されるブロック
  // ※このブロックはCoroutinesではないので注意
  onDispose {
    // 破棄されるときなどに呼び出されるブロック
  }
}
  • ライフサイクルの監視に用いられる。
  • 破棄する際に何かしらの処理をしたいときにこれを用いる。
  • keyが変わると、前回のブロックにおける onDisposeが呼び出されてから、次の DisposableEffect内のブロックが呼び出される。
  • LaunchedEffectを用いたいが Coroutinesが不要な場合に、空の onDisposeを定義してこれを使うこともある

derivedStateOf

val listState: LazyListState = rememberLazyListState()
val showBackButton by remember {
    derivedStateOf {
       listState.firstVisibleItemIndex > 0
    }
}
LazyList(...) {
   ...
   // ①良くない例
  if(listState.firstVisibleItemIndex > 0) {
      Button()
   }
   // ②良い例
   if(showBackButton) {
       Button(...)
   }
}
  • Composableは、中で使われている変数が書き換わると適宜、再描画を行なってくれる
  • Listがスクロールしていったら、戻るボタンを表示したい!といったユースケースを考えた際に、コードの①のような実装がまず思いつく
  • ListStateは、Listを少しスクロールするだけで中身が変わる⇨Listを少しスクロールするだけでLazyListの再描画が走ってしまう
  • コードの②のように、derivedStateOfを使う事でそれは解決する
  • derivedStateOfで囲んだブロックは、ブロック内の計算結果が変化した場合のみ、再描画の対象となる。

感想

  • Androidの実装や環境周りで困ったとき、検索でこのスピーカーの方の記事がよくヒットしてとても参考になりました。
  • そういう方の講演が生で聞けるのは感動でした
  • Composeの内部のこの辺りの処理については、まだ把握していない部分も多く、早速次の開発で活かせる部分がないか検討しているところです。非常に勉強になりました・・・。

全体を通しての感想

 コードや実行例を示してのJetpack Composeの実装方法の説明といった、勉強になるトークセッションを多く聞くことが出来た為、今後の業務の参考にしたいと考えております。また、計測や不具合調査の手法についても知見を深めることができたので、今後選択肢のひとつとして活用していきたいと思いました。また、iOSを主担当としている弊社のメンバーも複数人参加していましたが、SwiftUIの知識を生かしてJetpack ComposeのUIの組み方などのトークを理解しながら聞いていたようでした!

 弊社ではiOSDCやDroidKaigi、AWS Summitといった最新の技術を取り扱うカンファレンスや、技術力向上を目的としたイベントに参加することを積極的に応援しています。

気になった方はぜひ採用情報の方を見て頂けると幸いです。よろしくお願いします!

この記事をシェア

掲載内容は、記事執筆時点の情報をもとにしています。