第13回|Jetpack Compose③:状態管理とイベント制御[AI]
⚙️ 準備と環境設定
前回の記事では、Jetpack Composeの基本コンポーネントであるButtonやTextFieldの使い方を紹介しました。第13回では、Composeにおける「状態管理」と「イベント制御」に焦点を当て、rememberやmutableStateOfを活用した実践的な例を解説します。
![第13回|Jetpack 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以上
- Gemini AIプラグイン有効化済み
- Composeプロジェクトが作成済み
これらの環境が整っていれば、AIによる補完やコード生成もスムーズに利用できます。
🤖 Geminiによる支援の使い方
2. 状態管理のAI補完例
Geminiに「Jetpack ComposeでTextFieldの状態を管理してButton押下で表示するUIを生成」と入力するだけで、rememberとmutableStateOfを用いた状態管理コードを自動生成できます。
// Geminiへのプロンプト例
"Composeでユーザー入力を保持し、ButtonクリックでTextを更新するUIを生成"
AI生成コードは、状態の初期化やイベント処理の雛形を自動補完してくれるため、初心者でも実践的なUIを簡単に作成可能です。
💡 Kotlinでの実装例
3. 状態管理とイベント制御の基本例
@Composable
fun StateAndEventExample() {
var inputText by remember { mutableStateOf("") }
var displayText by remember { mutableStateOf("ここに入力内容が表示されます") }
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Top
) {
TextField(
value = inputText,
onValueChange = { inputText = it },
label = { Text("入力してください") },
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(16.dp))
Button(
onClick = { displayText = inputText },
modifier = Modifier.align(Alignment.CenterHorizontally)
) {
Text("表示")
}
Spacer(modifier = Modifier.height(16.dp))
Text(
text = displayText,
style = MaterialTheme.typography.bodyLarge
)
}
}
この例では、TextFieldの入力内容をinputTextとして保持し、ButtonクリックでdisplayTextに反映しています。rememberとmutableStateOfを使うことで、Composeの状態が画面再描画に適切に反映されます。
4. 複数状態の管理例
@Composable
fun MultiStateExample() {
var username by remember { mutableStateOf("") }
var password by remember { mutableStateOf("") }
var loginMessage by remember { mutableStateOf("") }
Column(modifier = Modifier.padding(16.dp)) {
TextField(
value = username,
onValueChange = { username = it },
label = { Text("ユーザー名") },
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(8.dp))
TextField(
value = password,
onValueChange = { password = it },
label = { Text("パスワード") },
modifier = Modifier.fillMaxWidth(),
visualTransformation = PasswordVisualTransformation()
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {
loginMessage = if (username == "admin" && password == "1234") {
"ログイン成功!"
} else {
"ユーザー名またはパスワードが違います"
}
}) {
Text("ログイン")
}
Spacer(modifier = Modifier.height(16.dp))
Text(text = loginMessage, style = MaterialTheme.typography.bodyLarge)
}
}
この例では、複数の状態(username, password, loginMessage)を管理し、Button押下時の条件分岐で表示内容を切り替えています。Gemini AIで生成すると、状態変数やButtonのonClick処理の基本構造が自動作成されます。
🧩 FirebaseまたはCloudとの連携
5. 入力内容をFirestoreに保存する例
@Composable
fun FirestoreStateExample(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("コメント送信")
}
}
}
Geminiを活用すれば、Compose UIコードにFirebase Firestore操作を追加する際の雛形を自動生成できます。非同期処理やエラーハンドリングもAI提案で補完されるため、初学者でも安心です。
📘 まとめ
第13回では、Jetpack Composeにおける状態管理とイベント制御を学びました。rememberやmutableStateOfを使用することで、TextFieldやButtonなどのUIコンポーネントの状態を簡単に管理できます。Gemini AIを活用することで、状態管理やイベント処理の雛形を効率よく生成でき、レビュー後に実践的なUIを構築できます。次回は、リスト表示やLazyColumnを用いた動的UIの実装に進みます。
「※本ブログはこの一文以外は、AIによる記載です。内容にウソが含まれている可能性がありますので、ご注意ください。写真もAIで作成しています。」