第14回|Compose④:ナビゲーションの導入[AI]
⚙️ 準備と環境設定
Jetpack Composeを用いたアプリ開発では、複数画面を遷移するためにNavigation Composeを活用します。第14回では、Composeでの画面遷移の基本から、NavControllerを用いた複数画面管理までを解説します。
![第14回|Compose④:ナビゲーションの導入[AI] 1 Android Studio Otter](https://zesys.net/blog/wp-content/uploads/2025/11/ChatGPT-Image-2025年11月10日-18_51_43-300x200.png)
1. 開発環境の確認
- Android Studio Otter 2025.2.1
- Kotlin 1.9以上、Jetpack Compose 2.0以上
- Navigation Compose 2.6.0以上
- Gemini AIプラグイン有効化済み
- Composeプロジェクトが作成済み
Navigation Composeを利用するには、プロジェクトのbuild.gradleに依存関係を追加しておきます。
dependencies {
implementation "androidx.navigation:navigation-compose:2.6.0"
}
🤖 Geminiによる支援の使い方
Geminiに「Composeで複数画面遷移を行うナビゲーションコードを生成」と入力すると、NavHostやNavControllerの雛形コードを自動生成できます。AI提案では、引数付き画面遷移や戻る処理も補完されるため、初心者でも安全に画面遷移を実装可能です。
// Geminiへのプロンプト例
"Jetpack ComposeでHome画面からDetail画面へ遷移するナビゲーションコードを生成"
💡 Kotlinでの実装例
3. 基本的な画面遷移
@Composable
fun NavExampleApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("detail") { DetailScreen() }
}
}
@Composable
fun HomeScreen(navController: NavHostController) {
Column(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("ホーム画面")
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = { navController.navigate("detail") }) {
Text("詳細画面へ")
}
}
}
@Composable
fun DetailScreen() {
Column(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("詳細画面")
}
}
この例では、NavHostでホーム画面から詳細画面への遷移を管理しています。NavControllerをrememberNavController()で保持し、Button押下でnavigate()を呼び出すだけで簡単に画面遷移が可能です。
4. 引数付き画面遷移の例
@Composable
fun NavWithArgsApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "home") {
composable("home") { HomeScreenWithArgs(navController) }
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { backStackEntry ->
val itemId = backStackEntry.arguments?.getInt("itemId") ?: 0
DetailScreenWithArgs(itemId)
}
}
}
@Composable
fun HomeScreenWithArgs(navController: NavHostController) {
Column(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(onClick = { navController.navigate("detail/42") }) {
Text("ID付き詳細画面へ")
}
}
}
@Composable
fun DetailScreenWithArgs(itemId: Int) {
Column(
modifier = Modifier.fillMaxSize().padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("詳細画面: ID = $itemId")
}
}
この方法により、画面遷移時にパラメータを渡すことが可能です。Gemini AIは引数付き遷移のコード例も生成できるため、複雑な画面構成でも効率よく開発できます。
🧩 FirebaseまたはCloudとの連携
5. 画面遷移とFirestore連携
例えば、ユーザーが詳細画面でコメントを送信する場合、Firestoreへの保存処理を画面遷移に組み込むことができます。
@Composable
fun DetailScreenWithFirestore(userId: String) {
val db = FirebaseFirestore.getInstance()
var comment by remember { mutableStateOf("") }
Column(modifier = Modifier.padding(16.dp)) {
TextField(
value = comment,
onValueChange = { comment = it },
label = { Text("コメント入力") }
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {
db.collection("comments").document(userId)
.set(mapOf("comment" to comment))
.addOnSuccessListener { println("保存成功") }
.addOnFailureListener { println("保存失敗") }
}) {
Text("コメント送信")
}
}
}
ナビゲーションとFirestore操作を組み合わせることで、ユーザーが画面遷移中に入力したデータをクラウドに安全に保存できます。Gemini AIを利用すれば、Firestoreとの非同期処理も簡単に雛形生成できます。
📘 まとめ
第14回では、Jetpack Composeでのナビゲーション導入を学びました。NavHostとNavControllerを使うことで、ホーム画面から詳細画面への基本遷移、引数付き遷移、Firestore連携まで効率的に実装可能です。Gemini AIの支援を活用すると、遷移処理や引数管理、非同期処理の雛形コードを自動生成でき、開発速度と正確性を大幅に向上できます。
「※本ブログはこの一文以外は、AIによる記載です。内容にウソが含まれている可能性がありますので、ご注意ください。写真もAIで作成しています。」