カテゴリ: Kotlin 更新日: 2025/11/15

KotlinのLiveDataとViewModelの基本!初心者でもわかる状態管理のベストプラクティス

KotlinのLiveDataとViewModelの基本!状態管理のベストプラクティス
KotlinのLiveDataとViewModelの基本!状態管理のベストプラクティス

先生と生徒の会話形式で理解しよう

生徒

「画面を回転させたり戻ったりすると、表示されていたデータが消えちゃうのですが…これってどうにかできないんですか?」

先生

「そうですね、画面の状態(データ)をちゃんと管理するには、ViewModelLiveDataを使うのが効果的です。」

生徒

「ViewModel?LiveData?なんだか難しそうな名前ですね…」

先生

「名前はカタカナですが、実はとっても便利で、アプリの品質も上がりますよ。ゆっくり一緒に学んでいきましょう。」

1. ViewModelとは?画面のデータを守る仕組み

1. ViewModelとは?画面のデータを守る仕組み
1. ViewModelとは?画面のデータを守る仕組み

ViewModel(ビューモデル)は、KotlinでAndroidアプリを開発する際に、画面に表示するデータを保存しておく場所です。

普通、スマホの画面を回転させたり、画面を戻ったりすると、データは初期化されてしまいます。これを防ぐために、ViewModelが使われます。

ViewModelは、画面(ActivityやFragment)とは別の場所にあるため、画面が一度消えても、データはそのまま残ります。

2. LiveDataとは?データの変化を自動で監視

2. LiveDataとは?データの変化を自動で監視
2. LiveDataとは?データの変化を自動で監視

LiveData(ライブデータ)は、データの中身が変わったときに、自動で通知してくれる仕組みです。

たとえば、数値や文字が変化したときに、自動で画面に反映したいときに使います。

LiveDataは「監視(observe)」する機能を持っていて、データの変化にすぐ反応できるのが特徴です。

3. ViewModelでLiveDataを使う基本コード

3. ViewModelでLiveDataを使う基本コード
3. ViewModelでLiveDataを使う基本コード

まずは、ViewModelクラスを作成して、LiveDataを使ってみましょう。


class MyViewModel : ViewModel() {
    val count = MutableLiveData<Int>()

    init {
        count.value = 0
    }

    fun increment() {
        count.value = (count.value ?: 0) + 1
    }
}

MutableLiveDataは、値の変更ができるLiveDataです。最初に0を入れておき、「カウントアップ」ボタンを押すと、値が1ずつ増えるようにしています。

4. ActivityでViewModelとLiveDataを使う方法

4. ActivityでViewModelとLiveDataを使う方法
4. ActivityでViewModelとLiveDataを使う方法

次に、ActivityでこのViewModelを使って、データの変化を画面に表示してみましょう。


class MainActivity : AppCompatActivity() {
    private lateinit var viewModel: MyViewModel
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

        viewModel.count.observe(this) { value ->
            binding.textView.text = "現在のカウント: $value"
        }

        binding.button.setOnClickListener {
            viewModel.increment()
        }
    }
}

observeを使って、LiveDataの値が変わったときに、自動でTextViewを更新しています。これで、画面を回転してもカウントがリセットされません。

5. レイアウトファイルの例(activity_main.xml)

5. レイアウトファイルの例(activity_main.xml)
5. レイアウトファイルの例(activity_main.xml)

以下は、シンプルなレイアウトファイルの一例です。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:padding="24dp">

    <TextView
        android:id="@+id/textView"
        android:text="現在のカウント: 0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

    <Button
        android:id="@+id/button"
        android:text="カウントアップ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"/>
</LinearLayout>

6. ViewModelとLiveDataを使うメリットとは?

6. ViewModelとLiveDataを使うメリットとは?
6. ViewModelとLiveDataを使うメリットとは?

ViewModelとLiveDataを使うことで、次のようなメリットがあります。

  • 画面回転や再生成でもデータを保持できる
  • コードがすっきりして読みやすくなる
  • データの変化を自動で反映できる
  • エラーやバグが減りやすくなる

初心者のうちからこの書き方に慣れておくと、あとで複雑なアプリを作るときにもとても役立ちます。

7. 使い方のポイントと注意点

7. 使い方のポイントと注意点
7. 使い方のポイントと注意点

ViewModelを使うときは、ViewModelProviderを通してインスタンスを取得する必要があります。直接作らないようにしましょう。

また、LiveDataは値の変更をするときはvalueを使い、変更されたことを画面に伝えるためにobserveを忘れずに書いてください。

KotlinのAndroidアプリ開発では、状態管理(ステート管理)はとても重要です。画面に表示される値が正しく保たれているかが、アプリの信頼性に直結します。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎