Y&S SoftWareのホームページ
使いかってのいいソフトウェアを開発します

コルーチン (coroutine)

コルーチン (coroutine) は Kotlin が持っている 軽量な並行処理の仕組み です。

🔹 簡単にいうと

「重い処理を待っている間もアプリを止めない仕組み」

たとえばデータベースアクセスやネットワーク通信は時間がかかりますよね?
もしそれをメインスレッドで実行すると画面がフリーズします。

コルーチンを使うと、時間のかかる処理を「中断」しながら待てるので、アプリは止まらず動き続けられます。

🔹 Java のスレッドとの違い

Java の Thread は重くて、たくさん作るとメモリや CPU を消費します。

Kotlin の Coroutine は「軽量スレッド」のようなもので、数千個以上同時に走らせても軽いです。

🔹 基本用語

suspend 関数

コルーチンの中でしか呼べない関数

実行中に「一時停止」して他の処理に CPU を渡せる

CoroutineScope

コルーチンの「入れ物」

例: GlobalScope, lifecycleScope, viewModelScope

launch / async

コルーチンを開始するための関数

launch → 戻り値なし

async → 戻り値(Deferred)あり


ポイント
1. Unit をキーにする

画面が表示されたとき「一度だけ」コルーチンを走らせたいとき。
→ 初期データのロードなどに便利。

LaunchedEffect(Unit) {
viewModel.loadData()
}

2. key を渡す

key が変わるたびに再実行される。
→ 依存する値が変わったら再ロードしたいときに使う。

LaunchedEffect(folderId) {
viewModel.loadNotes(folderId) // folderIdが変わるたびに実行
}

3. 直接 suspend 関数を呼べる

普通の @Composable では suspend fun は呼べない。

でも LaunchedEffect の中なら呼べるので、
ViewModel の suspend fun を安全に呼び出せる。

💡 よくある用途

画面表示時にデータをロード

パラメータが変わったときにAPIを呼び直す

Snackbarやアニメーションの表示制御

👉 まとめると:

LaunchedEffect = 「Composable のライフサイクルにくっついたコルーチン起動装置」
UIが生きている間だけコルーチンが動き、キーが変わると自動的にキャンセル・再起動される

1. 基本構造
LaunchedEffect(aaa) {
// 処理A
}

// 処理B


LaunchedEffect(aaa) の中は コルーチン です

その外(処理B)は 通常の Compose のコード です

2. 実行タイミング

処理B は、LaunchedEffect が呼ばれた瞬間に「普通に」実行されます

処理A は、LaunchedEffect によって 別のコルーチンとして非同期で開始 されます

つまり:

処理B が 先に同期的に実行される

その後、並行して 処理A がコルーチンで進行する

3. UI はどうなる?

処理A が重い処理でも、コルーチンなので UI スレッドをブロックしません

したがって UI は継続して描画され、ユーザーは止まらない画面を見られます

例えば delay(1000) を入れても、UI はフリーズせず「待っている間も描画更新」ができます

4. 簡単な例
@Composable
fun MyScreen() {
LaunchedEffect(Unit) {
println("処理A開始")
delay(2000) // 2秒待機
println("処理A終了")
}

println("処理B")
Text("Hello UI")
}


実行順序はこんなイメージ:

処理B
処理A開始
... (2秒待つ間もUIは動く)
処理A終了

となります。