Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
生徒
「Kotlinのコルーチンで、エラーが発生したときにキャンセルされたりして混乱してます…。どうやってエラー処理するのが正しいんですか?」
先生
「それはCoroutineExceptionHandlerを使うと、うまく例外処理とキャンセルを連携できますよ。非同期処理でのエラーは見えづらいので、ちゃんとキャッチする方法が必要なんです。」
生徒
「CoroutineExceptionHandlerってなんですか?初心者でも使えますか?」
先生
「もちろん!わかりやすく例を交えて解説していきましょう!」
1. 非同期処理と例外の関係とは?
通常のKotlinコードでは、エラーが出たときにtry-catchで対応できますが、非同期処理(コルーチン)ではlaunchの中で発生したエラーがメインスレッドに伝わらないことがあります。
そのため、例外が発生しても気づかずにプログラムが止まることも…。これを防ぐのがCoroutineExceptionHandlerです。
2. CoroutineExceptionHandlerとは?
CoroutineExceptionHandlerは、Kotlinの非同期処理で発生した「予期しないエラー」を安全に処理するための仕組みです。
launchなどでコルーチンを起動したとき、内部でエラーが起きた場合でも、このハンドラーがあれば処理を中断せずに、エラーメッセージを記録したり、他の処理に影響を与えずに済ませたりできます。
3. 基本の使い方を見てみよう
まずはシンプルな例でCoroutineExceptionHandlerを使ってみましょう。
import kotlinx.coroutines.*
fun main() = runBlocking {
val handler = CoroutineExceptionHandler { _, exception ->
println("エラーをキャッチしました: ${exception.message}")
}
val job = launch(handler) {
throw RuntimeException("故意のエラーです")
}
job.join()
}
4. 実行結果の確認
エラーをキャッチしました: 故意のエラーです
このように、コルーチンの中でエラーが起きてもCoroutineExceptionHandlerがちゃんと対応してくれます。
5. キャンセルと例外処理の関係
コルーチンでは、ある1つの処理が失敗すると、他の処理も「キャンセル(中断)」されることがあります。これは構造化同時実行の仕組みによるものです。
でも、すべての処理が巻き添えになるのは困る場合もありますよね。そういうときはsupervisorScopeを使って、エラーが出ても他の処理を止めないようにします。
6. エラーとキャンセルを連携して処理する例
次は、CoroutineExceptionHandlerとsupervisorScopeを組み合わせた例です。
fun main() = runBlocking {
val handler = CoroutineExceptionHandler { _, exception ->
println("ハンドラーで捕捉: ${exception.message}")
}
supervisorScope {
launch(handler) {
delay(300)
throw RuntimeException("エラー発生!")
}
launch {
repeat(5) {
delay(100)
println("処理中... $it")
}
}
}
}
7. 実行結果の確認
処理中... 0
処理中... 1
ハンドラーで捕捉: エラー発生!
処理中... 2
処理中... 3
処理中... 4
このように、片方の処理でエラーが起きても、もう片方の処理はキャンセルされずに続いています。
8. どんなときに使うの?
CoroutineExceptionHandlerは、次のような場面で非常に役立ちます:
- ログにエラーメッセージを出して原因を追いたいとき
- ユーザーにエラー通知を表示したいとき
- エラーが出ても他の処理は続けたいとき
非同期処理の失敗は目に見えにくいため、ハンドラーでしっかり対応することが大切です。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
9. 初心者が覚えておきたい例外処理のポイント
- 非同期処理ではエラーが見えにくい
CoroutineExceptionHandlerでエラー処理を見える化supervisorScopeを使えば、他の処理を止めずに済む- ログ・通知・デバッグにも活用できる
Kotlinの非同期プログラミングで失敗しないためには、例外処理とキャンセル処理を正しく理解し、適切に連携させることがとても重要です。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験