Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

DroidKaigi 2025 参加レポート

Androidエンジニアの藤原(@fuji_tech7)です。9月10日〜12日に DroidKaigi 2025 が開催されました。
私はカンファレンスデーの11日、12日に参加してきたので、その内容をレポートします。

ミラティブは 2022 年から DroidKaigi に協賛しており、今年で4年目を迎えます。

tech.mirrativ.stream

更に今回はDroidKaigiカンファレンスアプリの開発リードを弊社のkitakkun (@kitakkun_pb)が務めていました。かなり大変だったと思いますがお疲れ様でした!
(私自身、軽微ではありますがコントリビュートさせてもらいました)

github.com

2日間で48のセッションが行われましたが、その中から特に気になったものをピックアップしてご紹介します。

1日目

基礎から学ぶ大画面対応 〜「Large screen differentiated」認定アプリの開発知見〜

speakerdeck.com

Android16以上をターゲットとするアプリかつ画面の最小幅が600dp以上の場合はorientation, resizability, aspect ratioの制限が無視されることがGoogleから知らされています。

U-NEXTさんは2022年から大画面対応を行っており、Tier1〜3まである大画面対応のサポートレベルにて、最高レベルのTier1(Large screen differentiated)の認定を受けていらっしゃいます。

その知見から大画面への段階的対応の実例を以下の内容で説明してくださっています。

  • 大画面対応(大画面時の重要なタスクのフォロー、UIの問題解決)
  • 大画面最適化(利用する画面サイズに適したレイアウトの提供、マウスやキーボードなど外部デバイスのサポート)
  • 大画面向けのユーザーエクスペリエンスの提供(Picture In Pictureなど)

上記3項目はそれぞれ、上から大画面対応サポートレベルのTier3, 2, 1と連動しているので非常に理解しやすかったです。
Mirrativ Androidでも現在は画面回転を視野に入れた開発を行っていますが、思い当たる節が多数あり非常に学びになりました。

UIだけじゃないComposeの可能性 ━ 宣言的に奏でるメロディ

docs.google.com

Composeの低レイヤーモジュールであるCompose Runtimeの仕組みの説明、及びそれを利用した音声処理ライブラリを構築した知見からの活用例紹介です。

Compose RuntimeはComposition Treeの構築と更新を担っている。この特性を理解することでUI以外の領域でもComposable関数を利用して処理を構築できるということが解説されています。
コードや実行結果と一緒に説明されているので音声処理という専門性の高い分野でもとてもわかりやすかったです。

今回 Compose Runtimeをより直接的に使って宣言的に音声処理をするという新しい試みを聞くことができ、改めてComposeの奥深さを感じることができました。

はじめてのMaterial3 Expressive

speakerdeck.com

Google I/Oで発表されたMaterial3 Expressiveにて追加されたコンポーネント、モーションのコードと実際に動かした動画での紹介です。また、Material3 Expressiveを導入することの影響についても説明されています。

個人的には新しいAppBarにて中央揃えタイトルがサポートされたのは気になります。今もiOSベースでページタイトルを中央揃えにするデザインは多いですし、今後は中央揃えがAndroidでも増えていきそうです。

また、Material3 Expressiveは「ユーザーの注意を引き付ける」コンポーネントデザインとなっていて、ユーザーの行動を変えるのに十分な影響力を持っているとのことでした。
アニメーションが豊富で私自身わくわくしていますが、扱うコンテンツとの親和性がないとごちゃごちゃして煩い印象になりそうなので、導入には慎重にならざるをえないのかなと感じました。

ですが、前述したAppBarや新規のShortNavigationBarは既存のコンポーネントと大きく変わっていないと思われるので、その辺は導入検討してもよいかもしれません。

2日目

Android値受け渡し大全 〜設計を制する者が「渡す」を制す!〜

speakerdeck.com

データ層からUI層へ、画面から画面へ、値を渡す仕組みは幾つもありますが、渡す手法のそれぞれの紹介と「いいね問題」をサンプルとした「良い設計」の説明でした。

良い設計は

  • UDF(単方向データフロー)
  • SSOT(信頼できる唯一の情報源)

といったデータ整合性の観点、および

  • Androidのライフサイクル(画面回転などでデータが破棄される)

のような、プラットフォーム固有の問題も考慮されています。

今までやってきたことの復習のような内容でしたが、自分の中の情報の整理や誰かに教える際の手本となりそうだと感じました。

speakerdeck.com

現行版のNavigation2(NavigationCompose)からNavigation3への変更点、ケース毎にどう実装したらよいか紹介されているセッションです。

Navigation3の新しい要素であるBackStackやNavDisplay、NavEntry、またアダプティブレイアウトに対応するための仕組みであるScene, SceneStrategyもわかりやすく説明されています。
特に画面構成、SinglePaneの画面や一覧&詳細の画面の実装例も併せて紹介されているので、実用性の高い内容でした。 惜しむらくは、Navigation3がまだalphaで、正式版ではAPIが変更される可能性があることですね。

また、スマートバンクさんでの移行時の課題(DeepLink、Hilt、BottomSheet)も紹介されていたので、実際に移行するとなった際にはとても参考になりそうでした。

「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド〜新メンバーを活躍に導くオンボーディング戦略〜

speakerdeck.com

開発チームに新メンバーがジョインした際にチームに上手く馴染むための準備からどうやって一緒に働くか、発表者さんの経験をもとに紹介されているセッションです。受け入れる側視点だけでなく新メンバーの視点からも説明されています。
今回のDroidKaigiの中でも異色の内容ですが、開発に携わる誰もがブチ当たることなのではないでしょうか。

新メンバー:闇雲にコードは読まずに「データ」「UI」「機能」から実装を追う。PRなど小さなエントリーポイントからアーキテクチャを理解する。ドキュメントの見る側でなく当事者としてメンテする側になる。

チーム:遭難しないように「プロジェクトの地図」を用意する。ドキュメントと対話で思想を伝える。技術以外でも「人」と「文化」を伝えるドキュメントを作る。

参考になるし、自分の中で何気なく出来ていたことも「文化」として根付いているのか見直すきっかけになったと感じました。

逆向きUIの世界〜AndroidアプリのRTL言語対応〜

speakerdeck.com

RTL(Right To Left)言語対応の紹介です。多言語対応はモバイルアプリ開発においてはよくある話ですが、アラビア語などRTL言語対応をプロダクト開発レベルで行った内容だったので、とても貴重な話でした。

正しくRTL対応することで、レイアウトや向きをもつアイコンが左右反転され、RTL言語とLTR言語が混在しても正しい並びで配置されるなどのメリットがあるそうです。
基本的にはフレームワーク側が言語設定とManifestのフラグを参照して自動処理してくれるが、してくれないものもある。
開発者が個々に設定する必要があるが、何を反転させて何を反転させないかは開発者の感覚を養う必要がある、とのことでした。
「戻る」を意味する矢印は反転する必要があるが、アナログ時計は世界共通なので反転させてはいけない、など。
クイズ形式でRTL対応の正否を紹介していたのが印象的でした。アイコンに表示するバッジは左上配置がRTLでは正しいとのこと、まったく知りませんでした。

あとはvector画像もautoMirroredフラグをつけると自動反転してくれる、普段当たり前に使ってるstart/end, left/rightの指定もRTL対応時には使い分ける必要がある(left/rightは固定だがstart/endは左右反転する)など、Tipsも紹介されています。

グローバル対応時にアラビア語が含まれていた際にはマストとなる内容だったので、もしどこかで対応することになった場合には再度熟読したいと感じました。

Cache Me If You Can

speakerdeck.com

GradleとAGP(Android Gradle Plugin)の話。この記事を書くまで「Catch Me」だと思ってましたが「Cache Me」でした。

GradleとAGPへの理解を深めると共に、キャッシュ戦略やビルド自体の高速化について紹介されています。
GradleやAGPにライフサイクルがあるというのは漠然と知っていたのですが、普段のAndroidのビルドがライフサイクル上でどう処理されているのか整理されていて、GradleとAGPに理解を深めるいいセッションでした。

また、キャッシュを有効化した上でのTipsも紹介されていて、いろいろ試してみたいと感じました。

Fireside Chat

順番は前後しますが、箸休めで2日目に行われたFireside Chatも参加してきました。

DroidKaigi運営様がDroidKaigi 2025を開催するにあたって、どういう活動を行ってきたのかというお話。
同時通訳の方との事前打ち合わせなどスピーカーの方々への手厚いサポートがあったり、セッションのプロポーザルをする方と一緒に内容を考える機会がある、など運営様の努力や情熱を知ることができました。

10年に渡りイベント運営を続けてくださっている運営様には感謝と尊敬しかありません。



全体的な感想

去年もAI関連のセッションが多かったですが、今年はより増えた印象です。
Gemini, Copilot, またはオンデバイスだったり、利用用途もコーディング、UnitTest、コンテンツ作成などジャンルが細分化しているのでより専門性の高い内容が揃ってきているのかな、と感じました。

また、上記に挙げたオンボーディングの他にも、アプリ新法やキャリアについてなど、開発以外でもエンジニアを取り巻く環境にフォーカスした内容もありエンジニアからEM、PMに進んでいく方についても有意義なセッションだったのではないでしょうか。

AIもAndroidも日進月歩で進化しているので、新しい情報は常にキャッチアップしてプロダクトに活かしていきたいと考えています。


We are hiring!

ミラティブでは一緒に開発してくれるAndroidエンジニアを募集しています! 少しでも興味を持っていただいた方はお話を聞いていただくだけでも結構ですので、お気軽にご連絡ください。

hrmos.co

mirrativ.notion.site