カテゴリ: Kotlin 更新日: 2025/12/14

Kotlinのコルーチンフロー(Flow)の基本と使い方を初心者向けに解説!非同期処理の第一歩

Kotlinのコルーチンフロー(Flow)の基本と使い方
Kotlinのコルーチンフロー(Flow)の基本と使い方

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

生徒

「KotlinのFlowって聞いたんですけど、どういうものなんですか?」

先生

Flowは、Kotlinの非同期処理の中で使われる仕組みのひとつで、時間をかけて複数の値を順番に送るための仕組みなんですよ。」

生徒

「非同期処理ってなんだか難しそうですね…」

先生

「大丈夫、まずはFlowの基本から順番に見ていきましょう!」

1. KotlinのFlow(フロー)とは?

1. KotlinのFlow(フロー)とは?
1. KotlinのFlow(フロー)とは?

Flow(フロー)は、Kotlinで非同期(ひどうき)に値を連続して取り扱うためのしくみです。非同期とは、「同時に複数のことを行う仕組み」のことです。例えば、スマホで音楽を聞きながらゲームをするような状態をイメージするとわかりやすいです。

通常の関数はすぐに1つの結果を返しますが、Flowを使うと時間差でいくつもの値を順番に「流す(emit)」ことができます。

2. なぜFlowが必要なの?

2. なぜFlowが必要なの?
2. なぜFlowが必要なの?

スマホアプリやWebアプリでは、ボタンを押したらサーバーからデータを取得したり、ネットワーク越しに結果を受け取るといった「待つ」処理が多くあります。こうした処理を一度にまとめて書くと、アプリが固まってしまうことがあります。

そこで登場するのが非同期処理。Flowは、非同期で複数の値を安全に順番に処理したいときにとても便利な仕組みです。

3. Flowの基本的な使い方

3. Flowの基本的な使い方
3. Flowの基本的な使い方

ここでは、簡単なFlowのサンプルコードを見てみましょう。時間差で1〜3の数字を順番に出力するコードです。


import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun main() = runBlocking {
    numberFlow().collect { value ->
        println("受け取った値: $value")
    }
}

fun numberFlow(): Flow<Int> = flow {
    emit(1)
    delay(500)
    emit(2)
    delay(500)
    emit(3)
}

このコードでは、emit関数を使って1つずつ値を送っています。delayは「少し待つ」ための関数です。500ミリ秒(0.5秒)ずつ待って、次の値を流しています。

4. 実行結果

4. 実行結果
4. 実行結果

上記のコードを実行すると、下記のように値が時間を空けて出力されます。


受け取った値: 1
受け取った値: 2
受け取った値: 3

5. FlowとListの違いって何?

5. FlowとListの違いって何?
5. FlowとListの違いって何?

Listは一気に全てのデータを持っている配列のようなものですが、Flowは「順番に、時間差で、あとから値がやってくる」のが特徴です。

たとえば、配達で考えると、Listは最初に荷物が全部届く感じ、Flowは1つずつ時間をかけて順番に荷物が届く感じです。

6. Flowでよく使う関数:collectとmap

6. Flowでよく使う関数:collectとmap
6. Flowでよく使う関数:collectとmap

Flowで出てきた値を受け取るにはcollectを使います。これは「受け取る」という意味です。

また、出てきた値に加工を加えるにはmapを使います。たとえば、数字を2倍にしたいときは以下のように書きます。


fun main() = runBlocking {
    numberFlow().map { it * 2 }.collect { value ->
        println("2倍の値: $value")
    }
}

7. Flowの背後にある「コルーチン」とは?

7. Flowの背後にある「コルーチン」とは?
7. Flowの背後にある「コルーチン」とは?

Flowは、Kotlinの「コルーチン(coroutine)」という仕組みの上で動いています。コルーチンとは、簡単に言うと「軽いスレッド」のようなもので、普通のスレッドよりもメモリやCPUを使わずに効率的に動きます。

この仕組みにより、Flowは重くなりがちな非同期処理をサクサク動かすことができるのです。

8. Flowはどんな場面で使える?

8. Flowはどんな場面で使える?
8. Flowはどんな場面で使える?

例えば、次のような場面でFlowはよく使われます:

  • 天気アプリで数秒ごとに天気を更新する
  • チャットアプリで新しいメッセージをリアルタイムに受信する
  • ニュースアプリでスクロールに合わせて記事を読み込む

このように、Flowは「少しずつ、ゆっくり流れてくるデータ」にぴったりな道具です。

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

9. Flowの注意点と制限

9. Flowの注意点と制限
9. Flowの注意点と制限

Flowは便利な反面、以下のような注意点もあります:

  • メインスレッド(画面を操作する部分)で直接重たい処理をしない
  • collectしないとFlowは始まらない(怠惰評価)
  • 例外が発生したときはcatchでちゃんと処理する

初心者のうちは「collectしないと値が出てこない」という点が特につまずきやすいので注意しましょう。

関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New2
Go言語
Go言語の構文ルールまとめ!インデント・セミコロンなど最初に知っておくポイント
New3
Kotlin
KotlinのwithTimeoutでタイムアウト処理を設定しよう!初心者にもわかる非同期の安全な止め方
New4
Go言語
Go言語のマップの順序保証がない理由と扱い方の工夫をやさしく解説!初心者でもわかる基本知識
人気記事
No.1
Java&Spring記事人気No1
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語
Go言語でREST APIを作る設計と実装パターン完全ガイド!初心者でもわかるAPI開発
No.3
Java&Spring記事人気No3
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのsettings.gradleファイルを完全解説!初心者でもわかるプロジェクト設定の基本
No.5
Java&Spring記事人気No5
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.6
Java&Spring記事人気No6
Go言語
Go言語のトランザクション処理を完全解説!Begin・Commit・Rollbackを初心者向けにやさしく理解
No.7
Java&Spring記事人気No7
Go言語
Swiftの変数と定数の使い方を完全ガイド!初心者でもわかる基本文法
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo installコマンドの役割とインストール先の仕組みを徹底解説!