Navigation Compose
Navigation Compose の概念Navigation Compose は、従来の Android の Navigation Component を Jetpack Compose 向けに最適化した仕組みです。
NavController を使って「どの画面を表示しているか」を管理する。
NavHost の中に複数の「ルート(画面パス)」を登録する。
navController.navigate("memo/123") のようにして画面を切り替える。
バックスタックが管理されるので、戻る操作や状態復元が自動でやりやすい。
つまり、**Composeアプリで公式に推奨されている「画面遷移と状態管理の仕組み」です。
Navigation Compose を導入する場合
メリット
公式推奨・拡張性が高い(複数画面が自然に扱える)。
戻る操作が自動管理される(バックスタック対応)。
引数付きの遷移が自然
(例:memo/{memoId} をルートにして、特定のメモを直接開く)。
他画面との連携が楽
(設定画面、検索画面などを追加する場合も同じ仕組みで統一できる)。
状態復元に強い(画面回転やプロセスキル後も再現しやすい)。
デメリット
学習コストがある
(NavHost・NavController の理解が必要)。
小規模アプリだとややオーバーエンジニアリング気味になる。
依存関係が増える
(androidx.navigation:navigation-compose が必要)。
------------------------------------------------
これに対してNavigation Composeを使わずに、例:MainScreen 内で状態切り替えする場合は、
when (uiState.currentScreen) {
Screen.Tree -> TreeScreen(...)
Screen.Memo -> MemoScreen(...)
}
メリット
シンプル
(追加ライブラリ不要、学習コストも低い)。
小規模アプリ向き
(画面が2〜3枚程度なら十分)。
状態を ViewModel に持たせれば一応問題なく動く。
デメリット
戻る操作を自前で管理する必要がある。
例:BackHandler { uiState.currentScreen = Screen.Tree } を書く。
引数付き遷移が面倒(例:memoId を持ち回る必要あり)。
画面が増えると複雑化しやすい。
バックスタックがないので、履歴的な遷移が必要になると破綻する。
なので
学習用や小規模
→ まずは MainScreen内の状態切り替えで十分。
将来的に画面が増える予定(設定、検索、タグ管理など)
→ 最初から Navigation Compose を導入しておく方が安心。
例えると、
Navigation Composeは「Android公式のしっかりしたルーターシステム」。
MainScreen 内の状態切り替えは「シングルファイルで頑張る簡易ルーター」。
といった感じです。