🐥

DroidKaigi 2023 初参加レポート

2023/09/19に公開

今年のDroidKaigiは現地参戦したのでそのレポートをします

協賛ブース

協賛ブースでは各社さまざまな展示がされていました
とくに印象に残ったブースを紹介させていただきます

LINE

今年もCode Review Challengeが行われていました
私はDay1に1問、Day2に2問チャレンジしました
不要なものや単純なタイポなどはすぐに見つけられましたがCoroutineのDispatcherに関する指摘やdata classに入れるべきでない型などはそもそも知らなかったり、想定回答を見てようやく理解するものばかりでした
自分のヨワヨワ具合を痛感させられるいい機会だったので、次回参加した際は難関ポイントの指摘が出来るように技術力を高めたいと思います

DeNA

DeNAさんのブースでは脳内プレビューと題して、Composeの描画結果を推測してもらう問題が出されていました
ComposeではModifierに連結するメソッドの順番によって描画結果が左右されるのでそれを全て考慮して結果を推測するのは難儀しました
普段はプレビューウィンドウという最高の相棒とともに開発しているので順番を意識するよりも描画を見ながら順番を調整することがほとんどなので、たまにプレビューを隠して脳内プレビューと実際のプレビューが一致しているかを一人でテストするのも面白いかもしれないと思いました

NISSAN

日産はChipmunkの会場に頑張って運ばれた車両のインパクトが大きいですが、それを遠隔で操作可能なNissanConnectというアプリが紹介されていました
このアプリではエアコンの調整やカーナビの設定などさまざまな操作ができたり、積算走行距離や車検の期限まで確認できました(すごい)
エンジニアとしてはアプリと車の状態の同期スピードがどのくらいかが気になるところなんですが、リロードするとあっという間に同期が完了したのでストレスなく使えそうな印象を受けました

セッション

どのセッションも非常に学びの多いものばかりでした

(Unofficial) Guide to App Architecture Guide vol.2 @ Saryong Kang

去年に引き続きGoogleのSaryongさんがAndroidアプリのアーキテクチャについてDIとマルチモジュールの観点で発表されていました
公式ドキュメントに載ってないことや、異なる実装の可能性、他のライブラリによる解決策なども紹介されており非常に勉強になりました

DI

DaggerおよびHiltであらかじめ用意されたComponentやScopeを使う分にはなんの問題もないですが、カスタムしようと思ったら途端につらい世界が待っているようです。。
またつらみとしてKotlinのサポートが弱いことが上げられていましたが、こちらは現在すすめられているKSP対応が完了して安定したら改善するのでしょうか(Office Hourで聞けばよかったな)

Multimodule

マルチモジュールについては単一責任の原則をベースにどうモジュールを分けるべきか発表されていました
例としてPlayストアの詳細画面の一部だけ(現在の実装は変わっているそうですが)でも6つのモジュールで構成されていると聞き正直引きましたww
またドメイン層とデータ層の依存の向きをドメイン層に向かわせるためにRepositoryのインターフェースをドメイン層に用意するのが一般的だと思っていたんですが、そうではなくインターフェース用のモジュール(data-interface)を作ってそこに向かわせる実装方法が紹介されていました(アプリの規模によっては過度な抽象化になりそう)

共有 @ 荒木佑一

https://docs.google.com/presentation/d/1E6fMxGTHINPqvjzmoZbI3YGEqlcAWBESFJHz0577OiU/edit?usp=sharing

このセッションではACTION_SENDなIntentによってデータを他のアプリに共有する場合の実装方法およびベストプラクティスが発表されました
なんとこのIntentというAPIはAPI Level1から存在し今なお変わらないインターフェースを提供しているものだそうです(すごい!)
テキストや画像を送信する場合の送信側と受信側の実装方法(権限とか難しいところはShareCompatがいいかんじにやってくれる)について詳しく解説があった後、共有シート(Sharesheet、共有ボタンを押したときに出てくるボトムシート的なやつ)についての話になりGoogle的にはカスタム実装をしないでほしいとのことでしたw
共有シートでもやりたいことの大半はできるみたいです

  • 任意のアクションを追加(>= Android14)
  • 共有先候補を並べ替える
  • 候補から除外する
  • どの共有先が選ばれたかを取得する

ここ数年のAndroid Textの新(?)機能について @ Seigo Nonaka

https://docs.google.com/presentation/d/1FYZghn-BE4CwsVnVA0ERHGX_KNx8kGVLZj0OQHdWGU0/edit?usp=sharing

このセッションは一番ニッチな話でテキストが画面に描画されるまでにバックエンドで行われている涙ぐましい努力を垣間見ました

Hyphenation

英単語をまたいで改行が発生するときにいいかんじの位置にハイフンを付けてそれから改行させるやつですが、ちょうどいいハイフンの位置を計算するのは結構マシンパワー食うみたいなのでAndroidQ(10)からはデフォルトでoffになっているようなんですがやっぱり欲しいということで速くしたって話
正確にやるならリガチャーとかカーニングとかを考えないといけないけど計算時点ではこれらを無視することによって計算量を抑えたらしいです(描画時にはリガチャーやカーニングはちゃんと効くようです)

System Emoji Updatability

フォントの中でも特に絵文字はOSのバージョンによって差異が大きい部分です
古いバージョンのOSでも絵文字が表示されるようにシステムフォントをアップデート可能にしているみたいです
またレンダリング速度を速くするためにzygoteというプロセスを使って高速にフォントマッピングを行っていたようなんですが、マッピングの初期化がデバイスのブートプロセスでしか実行できないのでフォントを取り直すことができないというデメリットが大きすぎるのでzygoteによるマッピングはやめたみたいです
代わりにFontManagerServiceという仕組みを作ってフォントをリローダブルにしたようです

次回の参加に向けての反省点

  • 宿を取るのは会場情報が出てから
  • 3日目に参加者としゃべる機会が多いので3日目までフルに参加できるように飛行機の時間を調整する
GitHubで編集を提案
カラビナテクノロジー デベロッパーブログ

Discussion