DroidKaigiにいってきた & After Talks Nightイベントでしゃべってきたよ

マンガアプリチーム モバイルアプリエンジニア id:kk__777 です。

いわゆる「DroidKaigiに参加しました!」 系の記事です。若干出すタイミングを遅刻していて、今年のDroidKaigi全体を語る包括的な記事はすでに世の中に溢れている(気がする)ので、そういった内容はそちらに任せることにします。 ここでは一つのテーマに絞ってお届けします。

DroidKaigi2025 でみた 基礎から学ぶ大画面対応 〜「Large screen differentiated」認定アプリの開発知見〜 に触発されて、GigaViewer for Appsで大画面対応をいろいろ実験しました。 その結果を DroidKaigi & iOSDC After Talks Nightでしゃべってきたのでまとめます。

GigaViewer for Appsについて

hatena.co.jp

はてなでは個人向けWebサービスの提供で培った技術力・サービス運用力を活かし、Webマンガビューワの「GigaViewer for Web」に加え、マンガアプリに対応した「GigaViewer for Apps」を提供しています。

DroidKaigiのセッションであった大画面対応

2025.droidkaigi.jp

Google提唱のTier表をベースに経験を交えて語られている印象がありました。

developer.android.com

出典: Large screen app quality | Android Developersより引用

これをベースに少しまとめます。

基本的な大画面対応

まずは“壊れない”こと。代表的なのは次の2点かなと思います。

アプリを全画面で実行できるようにする

端末によってはデフォルトでレターボックス(黒帯)が入ることがあるので、manifest側で制御すること。

Configuration changeを前提にした設計

画面回転やリサイズでActivityが再生成されるのを前提に作る。 ViewModelやStateHolderのスコープを整理しておかないと、「向きを変えた瞬間にデータ消える」みたいな現象が起きやすい。

大画面向けに最適化

ここからがいわゆる“Adaptive Layout”の領域。 セッションでも特にこのパートが丁寧に紹介されていました。

WindowSizeClassによる分岐

ComposeならcalculateWindowSizeClass()を使って Compact / Medium / Expanded の3段階に分岐。 たとえばCompactならBottomNavigation、ExpandedならNavigationRailを出す、みたいな切り替え。

window size class 出典: Use window size classes | Android Developersより引用

Navigation rail

NavigationRail 出典: Navigation rail | Android Developersより引用

左サイドに常設メニューを置けるので、大画面ではスペース効率がぐっと上がる。 スマホで見慣れたBottomBarをそのまま使うより快適。

Canonical Layout(カノニカルレイアウト)

canonical layout 出典: Canonical layouts | Android Developersより引用

Material Design公式が提唱しているレイアウトの基本パターン。 List + Detail、SupportingPane、Feedなど、“典型的な分割構造”を名前付きで整理してくれていて、大画面でレイアウトを考えるときの指針になる。

developer.android.com

大画面で差別化

最後はTier1。「差別化」=“もう一歩踏み込んだ体験”です。

Picture in Picture (PiP)

PIP 出典: Picture-in-picture | Android Developersより引用

動画やビューアアプリでは、別アプリ操作中も表示を続けられる。 Android 14以降ではPiP中のジェスチャー制御やトランジションも柔軟になっており、UI演出の幅が広がっている。

Tabletop posture

Tabletop posture 出典: Make your app fold aware | Android Developersより引用

折りたたみ端末を"ちょい曲げた"状態で上画面に映像、下画面に操作UIを置くようなモード。 ComposeにもWindowLayoutInfo経由で posture が取れるAPIがある。

GigaViewer for Apps では何ができるか

細かな部分は抜きにして、基本的な対応はおそらくできているはずと思ってます。

  • Configuration changeへの対応
  • アプリ全画面での実行

「大画面向けに最適化」で語られた、柔軟なレイアウト はかなりの部分でやってないなと感じます。 ということで、GoogleでいうとTier2のAdaptive Layout をいくつか考えてみました。

登壇内容はこちら。 speakerdeck.com

ListDetail

Material3 の Canonical Layoutは使いたいでしょう。ということで 王道のListとDetailを同時に表示します。 listdetail 出典: Canonical layouts | Android Developersより引用

『探す』画面の作品をタップ→『作品詳細』画面に遷移するという画面フローがあるので、大画面ではこれを分割して表示すると検索結果のいろいろな作品を見て回るのがよりスムーズになり使いやすくなりそうです。

List-Detail

SupportingPane

続いて、メインコンテンツとサブコンテンツを表示するLayout supportingpane 出典: Canonical layouts | Android Developersより引用

これはViewerとコメントを並べるのがドンピシャな感じがします。 (登壇では コメント並べちゃうとネタバレくらいそうというごもっともな感想がありました。)

Viewerとコメント分割

BookMode

本の概念を取り入れた面白いオプションです。 Foldable端末をちょっと折るとLayoutが変わります。 bookmode 出典: Reading | Android Developersより引用

これは見栄えも面白い。登壇会場でも『おお〜』という声がちらほらありました。

ちょっと折ると見開きになる

終わり

注意: GigaViewer for Appsについての当記事で語った内容は 実験段階というステータスになるので リリース予定は今のところありません。 (反響があれば リリース予定に入ってくるかもしれませんね)