なぜ Compose は XML より「考えること」が増えたのか

― 宣言的UIがエンジニアに突きつけた現実 ―

※ChatGPTを使用して記事を作成しています。

Jetpack Compose を触り始めたとき、多くのエンジニアがこう感じます。

「XMLよりコード量は減ったはずなのに、なぜか頭が疲れる」
「昔より“設計”を考えさせられている気がする」

これは気のせいではありません。
Compose は、意図的に「考えること」を増やすUIフレームワークだからです。

この記事では、

  • なぜ XML 時代より思考量が増えたのか
  • それが「悪い変化」なのか
  • どう向き合うと楽になるのか

を整理していきます。

XML 時代は「考えなくてよかった」のか?

まず前提として、XML + View 時代を振り返ってみます。

XML が隠してくれていたもの

XML レイアウトでは、私たちは多くのことを考えずに済んでいました

  • View の生成タイミング
  • 状態がいつ View に反映されるか
  • 画面回転時の再生成
  • setText / setVisibility の呼び忘れ

これらは、

  • Android フレームワーク
  • ライフサイクル
  • 暗黙の View 状態

にかなりの部分を委ねていました。

極端に言えば、

「とりあえず setText すれば画面は変わる」

という世界です。

Compose が壊した「暗黙の前提」

Compose に移行すると、次のような疑問に必ずぶつかります。

  • なぜ値を変えても UI が更新されない?
  • remember はいつ必要?
  • 再コンポーズって何が起きてるの?
  • 状態はどこに持つのが正解?

これは Compose が“暗黙の魔法”をほぼすべて捨てた結果です。

宣言的UIの本質:「UIは状態の結果である」

Compose の大原則は、非常にシンプルです。

UI = State の写像

つまり、

  • UI を直接操作する
  • View に命令を送る

という発想が存在しません。

代わりに問われるのは、

  • この UI は どんな状態から描かれているか
  • その状態は どこで管理されるべきか
  • 状態が変わったとき、UI は どう再計算されるか

です。

ここで初めて、エンジニアは気づきます。

「あれ、UIってこんなに設計が必要だったっけ?」

Compose は「責任」をエンジニアに返してきた

Compose が増やしたのは、処理量ではありません。
責任の所在を明確にしただけです。

XML 時代

  • 状態の保存 → なんとなくフレームワーク
  • 再描画 → View が勝手にやってくれる
  • UI 更新 → setXXX すればOK

Compose 時代

  • 状態の保存 → 自分で決める
  • 再描画 → 再コンポーズとして明示される
  • UI 更新 → State を更新するしかない

Compose はこう言っています。

「UI の整合性は、あなたが設計してください」

「考えることが増えた」と感じる正体

多くの場合、違和感の正体はこれです。

❌ 以前は考えなくて済んだことを、考えさせられている

  • 状態の単一責任
  • UI とロジックの境界
  • 再利用可能なコンポーネント設計

⭕ 実は昔から存在していた問題

  • setText し忘れて表示がズレる
  • 画面回転で状態が消える
  • if 文だらけの View 操作

Compose はそれらを隠さず、真正面から見せてくるだけです。

Compose は「難しくなった」のではない

ここが一番誤解されがちな点です。

Compose は、

  • 複雑になった
  • 上級者向けになった

のではありません。

「雑に書けなくなった」だけです。

雑な状態管理
雑な責務分離
雑な UI 操作

これらは XML 時代でも問題でしたが、
Compose では 即座に破綻として表面化します。

楽になる考え方:UIを“計算結果”として扱う

Compose を楽にする一番のコツはこれです。

UI を「操作対象」ではなく
「状態から計算される結果」として見る

  • Text を変更する → ❌
  • textState を変更する → ⭕
  • 表示を切り替える → ❌
  • isVisibleState を変える → ⭕

この視点に切り替わった瞬間、
remember / State hoisting / 再コンポーズ が一本の線でつながります。

まとめ:Compose が増やしたのは「思考」ではなく「誠実さ」

Compose は、エンジニアにこう迫っています。

「UIの責任を、ちゃんと引き受けませんか?」

それは確かに、楽ではありません。
でもその代わりに、

  • 予測可能な UI
  • テストしやすい構造
  • 壊れにくい設計

を手に入れられます。

「考えることが増えた」と感じたなら、
それは 一段レベルが上がったサインかもしれません。

タイトルとURLをコピーしました