カテゴリ: Kotlin 更新日: 2026/03/18

Kotlinの例外処理でよくある失敗例とその対策まとめ【初心者必見】

Kotlinの例外処理でよくある失敗例と対策
Kotlinの例外処理でよくある失敗例と対策

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

生徒

「Kotlinでプログラムが突然止まることがあるんですが、どうすればいいですか?」

先生

「それは例外(エラー)が原因かもしれません。Kotlinでは、例外が発生するとプログラムが止まってしまうことがあります。」

生徒

「例外ってどうやって防げばいいんですか?」

先生

「Kotlinにはtry-catchという例外処理の仕組みがあります。それを正しく使えば、エラーに強いプログラムが書けますよ!」

1. Kotlinの例外処理とは?

1. Kotlinの例外処理とは?
1. Kotlinの例外処理とは?

Kotlin(ことりん)では、プログラムの実行中に思わぬ問題が起きたとき、そのまま動作が止まってしまうのを防ぐための仕組みとして「例外処理(れいがいしょり)」が用意されています。例外処理は、エラーが発生してもプログラムを安全に続行させたり、原因を分かりやすく伝えるためのとても重要な考え方です。

エラーが起こる場面は、実は日常的なコードの中にもたくさん潜んでいます。たとえば次のようなケースです:

  • 存在しないファイルを開こうとした
  • 数を0で割ってしまった
  • 空のリストから要素を取り出そうとした
  • 数値に変換できない文字列を扱ってしまった

こうした問題を無視して処理を進めてしまうと、プログラムが突然停止してしまうことがあります。そこで役立つのが、trycatch を使った例外処理です。あらかじめ「エラーが起きたらどうするか」を決めておくことで、落ち着いて対処できるようになります。

まずは、例外が起きるとどうなるのか、簡単なサンプルで見てみましょう。


fun main() {
    val text = "abc"   // 数字に見えない文字列

    try {
        val number = text.toInt()  // ここで例外が発生する
        println(number)
    } catch (e: NumberFormatException) {
        println("文字列を数値に変換できませんでした。入力内容を確認してください。")
    }
}

文字列を数値に変換できませんでした。入力内容を確認してください。

このように、例外処理を使えば「問題が起きてもプログラムは止まらず、適切なメッセージを表示して処理を続ける」ことができます。初心者のうちから例外処理に慣れておけば、後々より安全で読みやすいコードを書けるようになります。

2. よくある失敗例1:例外処理を忘れる

2. よくある失敗例1:例外処理を忘れる
2. よくある失敗例1:例外処理を忘れる

初心者がつまずきやすいポイントのひとつが、「例外が起こる可能性があるのに、何も対策をしていない」というケースです。普段は正常に動いていても、ちょっとした状況の違いで突然エラーになり、プログラム全体が止まってしまいます。特にリスト操作や文字列の変換などは、小さな油断で例外が発生しやすい代表的な場面です。


fun main() {
    val numbers = listOf<Int>()  // 中身が空のリスト
    println(numbers[0])          // 要素がないため例外が発生する
}

このコードは一見シンプルですが、空のリストから要素を取り出そうとした瞬間にエラーになり、実行が強制的に止まってしまいます。プログラムの動きを「安全に続ける」ためには、例外が発生しうる箇所をしっかり囲っておくことが大切です。

そんなときに役立つのが try-catch です。「問題が起きたらどうするか」を事前に決めておくことで、エラーが出ても落ち着いて処理を続行できます。


fun main() {
    val numbers = listOf<Int>()

    try {
        // ここで例外が起きる可能性がある
        println(numbers[0])
    } catch (e: IndexOutOfBoundsException) {
        // 例外が起きたときの代わりの処理
        println("リストが空のため、要素を取得できませんでした。")
    }
}

このように書いておけば、例外が発生してもプログラムが途中で止まる心配はありません。初心者のうちは「どこで例外が起きるのか」が分かりにくいですが、まずは「リスト操作」「数値変換」「ファイル操作」などは特に注意する必要がある、と覚えておくとよいでしょう。例外処理は、プログラムを“壊れにくくする”ための重要な習慣です。

3. よくある失敗例2:catchで全部まとめてしまう

3. よくある失敗例2:catchで全部まとめてしまう
3. よくある失敗例2:catchで全部まとめてしまう

初心者がよくやってしまう失敗のひとつが、「とりあえず全部 Exception で受けてしまう」という書き方です。一見すると楽に感じますが、実際には「どんな原因でエラーが起きたのか」が分かりにくくなり、問題の特定がとても困難になります。特にプログラムが複雑になってくると、原因が不明のまま動き続けてしまう危険もあります。


try {
    // いろいろな処理
} catch (e: Exception) {
    println("何かエラーが発生しました")
}

このようにExceptionを受けてしまうと、すべての例外が同じ扱いになってしまい、「数値変換の失敗」なのか「リストの範囲外アクセス」なのかといった違いを判断できなくなります。エラーの種類によって対策が変わるため、できるだけ原因ごとにcatchを書くことが大切です。

では、具体的にどう改善すればよいのでしょうか。たとえば、文字列を数値に変換するときによく起きる例外を例にしてみます。


fun main() {
    val text = "123a"  // 途中に数字でない文字が混ざっている

    try {
        val number = text.toInt()  // 数値変換に失敗する
        println(number)
    } catch (e: NumberFormatException) {
        println("数値に変換できませんでした。入力内容を確認してください。")
    }
}

数値に変換できませんでした。入力内容を確認してください。

このように特定の例外型を指定してcatchを書くことで、「どんな問題が起きたのか」がはっきりし、利用者にも具体的なメッセージを返せます。結果として、原因調査がスムーズになり、初心者でも“エラーに強いコード”に近づけるようになります。

4. よくある失敗例3:finallyの使い忘れ

4. よくある失敗例3:finallyの使い忘れ
4. よくある失敗例3:finallyの使い忘れ

finallyは、エラーが発生しても発生しなくても、最後に必ず実行されるブロックです。リソースの後片付けなどに使われます。

たとえば、ファイルを開いて何か処理をしたあと、きちんと閉じる必要があります。finallyを使うと安全に片付けができます。


import java.io.File

fun main() {
    val file = File("sample.txt")
    var reader = file.bufferedReader()
    try {
        println(reader.readText())
    } catch (e: Exception) {
        println("ファイルの読み込み中にエラーが発生しました。")
    } finally {
        reader.close()
    }
}

最近ではuse関数を使えば、finallyを使わなくても自動的に閉じてくれるのでおすすめです。

5. よくある失敗例4:catchの中で何もしない

5. よくある失敗例4:catchの中で何もしない
5. よくある失敗例4:catchの中で何もしない

初心者にありがちなのが、catchブロックの中を空にしてしまうことです。


try {
    val x = 10 / 0
} catch (e: ArithmeticException) {
}

これだと、エラーが起きても何が起きたのかまったく分かりません。

最低限、printlnでログを出力するようにしましょう。


try {
    val x = 10 / 0
} catch (e: ArithmeticException) {
    println("0で割ることはできません!")
}

6. よくある失敗例5:例外に頼りすぎる

6. よくある失敗例5:例外に頼りすぎる
6. よくある失敗例5:例外に頼りすぎる

例外処理はとても便利ですが、なんでもtry-catchで囲むのは逆効果です。

たとえば、リストが空かどうかをチェックせずにtryで囲むより、事前に条件をチェックする方が安全です。


// 良くない例
try {
    val name = listOf<String>()[0]
} catch (e: IndexOutOfBoundsException) {
    println("名前が取得できませんでした。")
}

// よい例
val names = listOf<String>()
if (names.isNotEmpty()) {
    println(names[0])
} else {
    println("名前リストが空です。")
}

7. Kotlin初心者が例外処理で気をつけるべきポイント

7. Kotlin初心者が例外処理で気をつけるべきポイント
7. Kotlin初心者が例外処理で気をつけるべきポイント

Kotlinの例外処理では、次のような点に注意することで、エラーに強くてわかりやすいプログラムが書けるようになります。

  • 例外が発生しそうな箇所はtry-catchで囲む
  • エラーの種類に応じたcatchを使う
  • catchの中で何かしらの対応やログを出す
  • 必要に応じてfinallyでリソースの後片付けを行う
  • 事前の条件チェックで回避できるエラーは例外に頼らない

これらを意識すれば、初心者でもKotlinの例外処理を正しく使えるようになります。

まとめ

まとめ
まとめ

Kotlinの例外処理について学んできた内容を振り返ると、例外は単なるエラーではなく「プログラムが安全に処理を続けるための重要な仕組み」であることがよく分かります。特に初心者がつまずきやすいポイントとして、例外処理を書かないままコードを実行してしまったり、例外を一括で受け取って原因を曖昧にしたり、catchの中で何も処理しないままにしたりする問題が挙げられます。例外処理はプログラムの安全性や可読性に直結するため、ただ囲むだけではなく、意味のある対応を記述することが大切です。 Kotlinではtry-catch-finallyという基本的な構造を使い、発生し得る問題に応じて適切なcatchを配置するのが基本の書き方です。また、ファイルやネットワークなど外部リソースを扱う場合には、finallyで必ずリソースを閉じる処理を書くことが重要になります。さらに最近ではuse関数を活用することで、自動的にリソースを閉じる仕組みが整い、より簡潔で保守性の高いプログラムを書くことができます。 一方で、例外に頼りすぎることは推奨されません。たとえば、リストが空かどうかをチェックせずにIndexOutOfBoundsExceptionを利用して「取得できなかったらcatchで処理すればいい」という書き方は、実装意図を曖昧にし、後から読む人に誤解を与える可能性があります。条件分岐で事前にチェックできる内容は例外に頼らず、例外はあくまで「予測困難なエラー」に備えるために使うことが望ましいです。そのため、設計段階で「どこで例外が発生するのか」「防げるものか」「キャッチすべきか」を整理しながら書く姿勢が重要です。 Kotlinの例外処理は単なるエラー制御にとどまらず、プログラムの品質や信頼性を左右する基盤となっています。たとえばウェブアプリケーションでログイン処理中にサーバーエラーが発生したとき、例外処理によってユーザーに丁寧なメッセージを返すことができれば、サービスの使いやすさが向上します。逆に例外を放置すると、画面が真っ白になったりアプリが強制終了したりと、ユーザー体験が大きく損なわれる可能性があります。このように例外処理は実践的なアプリケーション開発において欠かせない技術と言えるでしょう。 以下では、複数の例外を条件別に処理しつつ、finallyとuseを併用した実践的なサンプルコードを紹介します。実際の開発現場でもよく使われる構造を再現した例になっていますので、ぜひ参考にしてみてください。

複数の例外を使い分けた実践サンプルコード


import java.io.File

fun main() {
    val file = File("data.txt")

    try {
        file.bufferedReader().use { reader ->
            val text = reader.readText()
            val number = text.toInt()
            println("変換した数値: $number")
        }
    } catch (e: NumberFormatException) {
        println("ファイルの内容が数値ではありませんでした。")
    } catch (e: java.io.FileNotFoundException) {
        println("指定したファイルが見つかりません。")
    } catch (e: Exception) {
        println("予期しない問題が発生しました。")
    } finally {
        println("処理を終了します。")
    }
}

この例では、ファイルの読み込みから数値変換までの複数工程において起こり得る例外を種類ごとに分けて処理しています。また、useを使うことで、finallyでcloseを明示しなくてもリソース管理が自動的に行われるため、コード全体が簡潔で安全になっています。こうした工夫を積み重ねることで、実践的で信頼性の高いプログラムが書けるようになります。

先生と生徒の振り返り会話

生徒

「例外処理って難しいイメージがあったけど、種類ごとにcatchを分けたり、useで処理を簡潔にできるのは便利ですね!」

先生

「そうですね。例外処理は単にエラーを防ぐだけでなく、プログラムをより扱いやすくするための仕組みなんです。」

生徒

「例外に頼りすぎず、事前に条件チェックするのも大事なんですね。」

先生

「その通りです。例外は最後の手段として使い、まずは避けられるエラーを防ぐ設計をすることが大切です。」

生徒

「今日の例をアプリ開発でも試してみます!」

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

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

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Kotlinの例外処理とは何ですか?初心者向けに簡単に説明してほしいです

Kotlinの例外処理とは、プログラム実行中に起きるエラーを適切に処理して、アプリが突然止まらないようにする仕組みです。存在しないファイルを開いたり、0で割ったり、空のリストからデータを取り出したりすると例外が発生します。これらをtry-catchで受け止めることで、安全にプログラムを続けることができます。

Kotlinでプログラムが急に止まる原因は何が多いですか?

Kotlinでプログラムが突然止まる主な原因は、例外(エラー)が発生することです。例えば、ファイルが見つからない、数値に変換できない文字列を扱った、空のリストの要素を取り出そうとしたなどが代表的なケースです。例外処理を忘れることでプログラムが強制終了してしまうことが多いです。
関連セミナーのご案内

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

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

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

具体的な体験内容と環境

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

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

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

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

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

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

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

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

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

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

セミナー画像

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinで依存関係管理を始めよう!Gradle/Mavenの基本設定と導入手順
New2
Kotlin
Kotlinのreturnラベルを完全解説!初心者でもわかるクロスラインreturnの基本
New3
Kotlin
Kotlinでファイルアクセスを安全に管理する方法を徹底解説 初心者でも理解できるファイル読み書きとセキュリティ対策
New4
Go言語
Go言語の構造体を使った設計パターン集(DTO・VOなど)
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.5
Java&Spring記事人気No5
Kotlin
KotlinのRoomでコルーチン対応!suspend関数とFlowの使い方をやさしく解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.7
Java&Spring記事人気No7
Kotlin
Kotlinの文字列の部分取得!substring・take・dropの基本
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方