Upgrade to Pro — share decks privately, control downloads, hide ads and more …

これから始めるJetpack Compose

Avatar for Hokuto.Handa Hokuto.Handa
July 11, 2025
17

これから始めるJetpack Compose

宮城アプリ開発勉強会 2025 Android編

Avatar for Hokuto.Handa

Hokuto.Handa

July 11, 2025

Transcript

  1. 旧XMLベースの場合 xml <TextView android:id="@+id/helloTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello Compose!" /> kotlin

    val helloTextView: TextView = findViewById(R.id.helloTextView) helloTextView.text = "Hello Compose!" • UIはXMLとコードで別々に管理する必要がある • Viewの紐付けや初期化が手間…!
  2. Jetpack Composeの場合 kotlin @Composable fun Greeting() { Text(text = "Hello

    Compose!") } • UIがKotlinコードだけで完結 • findViewById不要でシンプル ←Jetpack Composeを使ったUI部品(Composable)を作るアノテーション ←中で他のComposableを呼び出せる
  3. Recomposition(再描画) @Composable fun Counter() { var count by remember {

    mutableStateOf(0) } Button(onClick = { count++ }) { Text("Clicked $count times") // countの値が変わると再描画される } }
  4. UIテストが始めやすい @get:Rule val composeTestRule = createComposeRule() @Test fun testHelloComposeIsDisplayed() {

    composeTestRule.setContent { MainScreen() } composeTestRule .onNodeWithText("Hello Compose") .assertExists() } • ComposeTestRuleにComposableを 渡すだけでテストできる • Activity等も基本不要
  5. ナビゲーションが管理しやすい • ComposableからComposableへ (Fragmentなどの立ち上げ不要) • 画面遷移ロジックが Kotlinで一元管 理できる • 画面遷移が

    navController.navigate("route") で シンプル kotlin @Composable fun AppNavGraph() { val navController = rememberNavController() NavHost(navController, startDestination = "home") { composable("home") { HomeScreen(onNext = { navController.navigate("detail") }) } composable("detail") { DetailScreen() } ….
  6. Navigation 3 (Nav3) • 2025年5月にalpha版としてリリースされ た Jetpack Compose専用のナビゲーショ ンライブラリ •

    BackStack を自分で管理 • 詳しくは公式のブログ記事を参照 val backStack = remember { mutableStateListOf<Any>(Home) } NavDisplay( backStack = backStack, onBack = { backStack.removeLastOrNull() }, entryProvider = { route -> when (route) { is Home -> NavEntry(route) { Column { Text("Welcome to Nav3") Button(onClick = { backStack.add(Product("123")) }) { Text("Click to navigate") } } } is Product -> NavEntry(route) { Text("Product ${route.id}") }...
  7. XMLベースのアプリから移行がしやすい xml <LinearLayout (略) <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

    kotlin override fun onCreateView(...): View { // (略) val composeView = view.findViewById<ComposeView>(R.id.compose_vie w) composeView.setContent { MaterialTheme { Text("Compose!") // ←ここだけComposable } }...
  8. 使い方いろいろ... • コード変換 • コードについて説明する • 改善案の提案 • 単体テストのシナリオを生成する(プレビュー) •

    ドキュメントを生成する(プレビュー) • etc… ※ https://developer.android.com/studio/preview/gemini/features から抜粋
  9. エージェントモード • Android Studio Narwhal Feature Drop Canary 4 以降から追加された

    • 目的を伝えると、Geminiがコード修正を提案 • 提案された変更を確認 → 採用 or 拒否
  10. まとめ Jetpack Composeは… • 宣言的UIで書きやすい • Previewが便利 • 段階移行やUIテストもやりやすい •

    困ったらGeminiに聞ける • 興味が出たら→公式のチュートリアルなどが充実しているので ぜひ触ってみてください!