Kotlinの非同期処理でエラーを安全に扱う!初心者でもわかるtry-catchの基本
生徒
「Kotlinの非同期処理って便利そうだけど、失敗したときのエラーってどうやって処理するんですか?」
先生
「いい質問ですね。Kotlinではtry-catchを使ってエラー処理ができます。非同期処理でも同じように使えるんですよ。」
生徒
「普通のtry-catchと何が違うんですか?」
先生
「非同期処理では、suspend関数やlaunchなどを使っているので、書き方に少し工夫が必要です。順番に見ていきましょう!」
1. Kotlinの非同期処理とエラーの関係
Kotlinでは、非同期処理を行うときにコルーチン(Coroutine)をよく使います。これは、時間がかかる処理を別のスレッドで実行するためのしくみです。たとえば、ネットからデータを取ってくる、ファイルを読み書きするなどが該当します。
こういった処理は、途中で失敗することがあります。たとえば、ネットがつながっていなかったり、ファイルが見つからなかったりしたときです。そのときに、try-catchでエラーをうまく処理しないと、アプリが強制終了してしまいます。
2. 非同期処理でのtry-catchの基本形
まずは、非同期処理をtry-catchで包む基本的な例を見てみましょう。
import kotlinx.coroutines.*
fun main() = runBlocking {
try {
val result = fetchData()
println("取得結果:$result")
} catch (e: Exception) {
println("エラーが発生しました:${e.message}")
}
}
suspend fun fetchData(): String {
delay(1000)
throw RuntimeException("通信に失敗しました")
}
3. 実行結果
上のコードを実行すると、以下のようなエラー処理がされます。
エラーが発生しました:通信に失敗しました
4. launchとasyncの違いに注意しよう
Kotlinの非同期処理ではlaunchとasyncという2つの方法があります。これらはエラー処理のタイミングが違うので注意が必要です。
- launch:エラーはコルーチンの中で発生するので、
CoroutineExceptionHandlerなどを使う必要があります。 - async:
await()を呼んだときにエラーが発生するので、try-catchで包めばOKです。
5. asyncでのエラー処理の実例
次に、asyncを使って非同期処理を行い、try-catchでエラーを扱う例です。
fun main() = runBlocking {
val deferred = async {
riskyOperation()
}
try {
val result = deferred.await()
println("成功:$result")
} catch (e: Exception) {
println("非同期処理でエラー:${e.message}")
}
}
suspend fun riskyOperation(): String {
delay(500)
throw IllegalStateException("処理中に問題が発生しました")
}
6. launchでのエラー処理には注意が必要
launchを使うと、try-catchだけではエラーを補足できません。別の方法で対処が必要ですが、ここではlaunchにtry-catchを書いても効かない例を紹介します。
fun main() = runBlocking {
launch {
try {
throwException()
} catch (e: Exception) {
println("キャッチできると思いきや、これは動きません")
}
}
delay(1000)
}
suspend fun throwException() {
delay(200)
throw RuntimeException("例外発生")
}
このコードは、例外がキャッチされずプログラムがクラッシュしてしまう可能性があります。launchを使うときはCoroutineExceptionHandlerを使う必要がありますが、それは別の記事で詳しく扱います。
7. 非同期処理とtry-catchを組み合わせるポイント
Kotlinで非同期処理を行うときにエラーを安全に扱うには、次のポイントを押さえておきましょう。
- エラーが発生する可能性がある箇所は、
try-catchで囲む async+await()のときにtry-catchを使うlaunchはCoroutineExceptionHandlerが必要(今回は扱いません)- メッセージ表示やログ出力で、原因を分かりやすく伝える
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
8. よくあるエラー例と対策
初心者がKotlinの非同期処理でつまずきやすいポイントも紹介しておきます。
- awaitを忘れる:
asyncで処理を書いたあとにawait()を呼ばないと結果が取得できません。 - catchブロックが空:何も処理を書かないと、何が起きたのか分かりません。エラーメッセージを表示しましょう。
- Exception以外をcatchしようとする:エラー型が違うとキャッチできないので、
Exception型でまとめて受け取るのが無難です。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験