KotlinのRoomでコルーチン対応!suspend関数とFlowの使い方をやさしく解説
生徒
「KotlinのRoomでデータベースを使うとき、非同期処理って必要ですか?」
先生
「うん、Roomではデータベース操作に時間がかかることがあるから、アプリが固まらないようにコルーチンで非同期処理をするのが基本なんです。」
生徒
「コルーチンって何ですか?難しそう…」
先生
「大丈夫!コルーチンは、簡単にいうと“待っている間に他の作業をする”ような仕組みだよ。Roomでは、suspend関数やFlowと一緒に使うから、実際の使い方を順番に見ていこう!」
1. Roomでコルーチンを使う理由とは?
Roomのデータベース操作は時間がかかることがあります。たとえば、何千件ものデータを読み込むときなど、アプリが一瞬止まったように感じることもあります。
そこでKotlinのコルーチンを使うと、画面表示とは別の流れで処理を行えるので、スムーズな操作を保てます。
2. suspend(サスペンド)とは?
suspend(サスペンド)関数とは、「一時停止できる関数」のことです。重い処理を一時中断して、あとで続きを再開できるのが特徴です。
Roomでは、データの追加・更新・削除などに使うのが一般的です。
3. Flow(フロー)とは?
Flowは、データの流れを非同期で受け取る仕組みです。LiveDataと似ていますが、Kotlinの標準ライブラリとして使え、より柔軟な操作ができます。
Roomでは、「データをリアルタイムで監視したい」ときに使います。
4. KotlinでRoomのDAOにsuspend関数とFlowを使う方法
では、KotlinのRoomで、suspendとFlowを使う具体例を見てみましょう。
① エンティティ(データの形)を定義
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "tasks")
data class Task(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val title: String,
val isDone: Boolean
)
② DAOにsuspendとFlowを使った関数を定義
import androidx.room.*
import kotlinx.coroutines.flow.Flow
@Dao
interface TaskDao {
@Insert
suspend fun insertTask(task: Task)
@Update
suspend fun updateTask(task: Task)
@Delete
suspend fun deleteTask(task: Task)
@Query("SELECT * FROM tasks ORDER BY id DESC")
fun getAllTasks(): Flow<List<Task>>
}
ポイント:データを追加・更新・削除するときはsuspend、データを受け取るときはFlowを使います。
5. ViewModelやUIでの使い方
Flowを受け取るには、collect関数を使って監視します。例として、ViewModelでデータを取得するコードは以下のようになります。
class TaskViewModel(private val dao: TaskDao) : ViewModel() {
val taskList: Flow<List<Task>> = dao.getAllTasks()
fun addTask(title: String) {
viewModelScope.launch {
dao.insertTask(Task(title = title, isDone = false))
}
}
}
6. suspendとFlowを使うと何がうれしいの?
- アプリが固まりにくい:重い処理を非同期で実行できる
- コードがシンプルになる:非同期でも読みやすい
- リアルタイム表示ができる:Flowで自動的に更新
つまり、見た目がサクサク動くアプリを作るのに欠かせない技術なんです。
7. 注意点:Flowはコレクションするまで動かない
Flowは定義しただけでは動きません。画面側やViewModel側でcollectしてはじめてデータが流れます。
また、suspend関数はlaunchやwithContextの中で呼び出す必要があるため、必ずコルーチンの範囲で使うようにしましょう。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
8. KotlinのRoomで非同期処理を行うならコルーチンが基本!
今のKotlin開発では、Roomとコルーチンはセットで使うのが標準です。昔はAsyncTaskという仕組みが使われていましたが、今はsuspendとFlowでシンプルに書けるようになりました。
最初はむずかしく感じるかもしれませんが、Roomでコルーチン対応しておけば、アプリが軽くて快適になります。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験