
Jetpack Compose を導入したからといって、アプリが「Compose アプリ」になったわけではありません。
実際、現場で思うのは「完全に Jetpack Compose 化した場合は Activity は1つ、Fragment は 0」なことを知識として持ってない人たちの扱いよな。#android #jetpackcompose
— chanzmao (@maochanz) August 4, 2026
多くのプロジェクトでは、XML を ComposeView に置き換えただけで移行を終えています。
しかし、その状態は Compose の世界と View の世界の両方を同時に抱える アーキテクチャです。
一見すると移行できたように見えますが、実際には複雑さが増えていることも少なくありません。
🧑🏻💻 Compose に見えて、実は View
ComposeView は名前の通り View です。
Activity
└── Fragment
└── ComposeView
└── Composition
つまり、Compose を書いていても、
- Activity のライフサイクル
- Fragment のライフサイクル
- View のライフサイクル
- Composition のライフサイクル
という複数のライフサイクルの上で動いています。
Compose 本来のシンプルさは、この時点ではまだ得られていません。
🧑🏻💻 View のルールから逃げられない
Compose だけなら意識しなくて済むことも、ComposeView では必要になります。
例えば Composition の破棄タイミング。
composeView.setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
これを適切に設定しなければ、Composition が期待どおり破棄されないケースがあります。
Compose アプリでは考えなくてよいことを、ComposeView では考える必要があります。
🧑🏻💻 Fragment は消えていない
ComposeView を使う構成は、多くの場合こうなります。
Fragment
↓
ComposeView
↓
Composable
これは
Fragment を Compose に置き換えた
のではありません。
実際には
Fragment の中へ Compose を埋め込んだ
だけです。
Fragment の責務もライフサイクルも Navigation も、そのまま残っています。
🧑🏻💻 「View を Compose に置き換える」は移行の半分
Compose 化というと、多くの人は View を Composable に書き換えることを思い浮かべます。
しかし、本当に変わるのは UI だけではありません。
Compose First の設計では、
- Fragment が不要になる
- XML が不要になる
- ViewBinding が不要になる
- FragmentManager への依存が減る
- Navigation の考え方が変わる
- State の持ち方も変わる
つまり、アーキテクチャ全体が変わります。
🧑🏻💻 Navigation 3 が示している未来
Navigation 3 のサンプルを見ると、Fragment は登場しません。
Activity
↓
NavDisplay
↓
Composable Screen
画面そのものが Composable になり、状態は Compose の仕組みを中心に管理されます。
ここでは ComposeView は必要ありません。
Compose がアプリの土台になっています。
🧑🏻💻 ComposeView は悪者ではない
もちろん ComposeView が悪いわけではありません。
既存アプリを段階的に Compose へ移行するには、とても重要な仕組みです。
大規模アプリでは、一気に Compose へ移行できるケースはほとんどありません。
だから ComposeView は今でも価値があります。
問題なのは、
ComposeView を使っている状態を「Compose 化が完了した状態」と思ってしまうことです。
🧑🏻💻 本当の Compose 化とは
本当の Compose 化は、単に XML を消すことではありません。
XML
↓
ComposeView
↓
Fragment を減らす
↓
Navigation を Compose 中心へ
↓
State 管理を Compose に合わせる
↓
Single Activity
この変化によって初めて、
Compose のシンプルな設計思想をそのまま活かせるようになります。
🧑🏻💻 おわりに
「ComposeView を使っています。」
この一文だけでは、そのアプリが Compose アプリなのか、View アプリなのかは分かりません。
もし ComposeView が Fragment の中にあり、Fragment Navigation の上で動いているなら、それはまだ View ベースのアプリに Compose を埋め込んでいる状態です。
Compose の本当の価値は、UI を書き換えることではありません。
アーキテクチャそのものをシンプルにできること。
そこまで進んだとき、ようやく「Compose 化した」と言えるのではないでしょうか。
Related Categories : Android・Developmemt・JetpackCompose・KMP・Kotlin・Kotlin Multiplatform Mobile・Newbie・Terrible・Terrible