KotlinのLiveDataとViewModelの基本!初心者でもわかる状態管理のベストプラクティス
生徒
「画面を回転させたり戻ったりすると、表示されていたデータが消えちゃうのですが…これってどうにかできないんですか?」
先生
「そうですね、画面の状態(データ)をちゃんと管理するには、ViewModelとLiveDataを使うのが効果的です。」
生徒
「ViewModel?LiveData?なんだか難しそうな名前ですね…」
先生
「名前はカタカナですが、実はとっても便利で、アプリの品質も上がりますよ。ゆっくり一緒に学んでいきましょう。」
1. ViewModelとは?画面のデータを守る仕組み
ViewModel(ビューモデル)は、KotlinでAndroidアプリを開発する際に、画面に表示するデータを保存しておく場所です。
普通、スマホの画面を回転させたり、画面を戻ったりすると、データは初期化されてしまいます。これを防ぐために、ViewModelが使われます。
ViewModelは、画面(ActivityやFragment)とは別の場所にあるため、画面が一度消えても、データはそのまま残ります。
2. LiveDataとは?データの変化を自動で監視
LiveData(ライブデータ)は、データの中身が変わったときに、自動で通知してくれる仕組みです。
たとえば、数値や文字が変化したときに、自動で画面に反映したいときに使います。
LiveDataは「監視(observe)」する機能を持っていて、データの変化にすぐ反応できるのが特徴です。
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を使う方法
次に、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)
以下は、シンプルなレイアウトファイルの一例です。
<?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を使うメリットとは?
ViewModelとLiveDataを使うことで、次のようなメリットがあります。
- 画面回転や再生成でもデータを保持できる
- コードがすっきりして読みやすくなる
- データの変化を自動で反映できる
- エラーやバグが減りやすくなる
初心者のうちからこの書き方に慣れておくと、あとで複雑なアプリを作るときにもとても役立ちます。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
7. 使い方のポイントと注意点
ViewModelを使うときは、ViewModelProviderを通してインスタンスを取得する必要があります。直接作らないようにしましょう。
また、LiveDataは値の変更をするときはvalueを使い、変更されたことを画面に伝えるためにobserveを忘れずに書いてください。
KotlinのAndroidアプリ開発では、状態管理(ステート管理)はとても重要です。画面に表示される値が正しく保たれているかが、アプリの信頼性に直結します。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験