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

Kotlinで例外のスタックトレースを取得するprintStackTrace()の使い方

Kotlinで例外のスタックトレースを取得するprintStackTrace()の使い方
Kotlinで例外のスタックトレースを取得するprintStackTrace()の使い方

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

生徒

「Kotlinでプログラムがエラーになったとき、どこで間違ったのかを調べる方法ってあるんですか?」

先生

「はい、KotlinではprintStackTrace()という機能を使って、エラーの原因を詳しく調べることができますよ。」

生徒

「それってどういうふうに使うんですか?難しそう……」

先生

「では、具体的にどう使うかをやさしく解説していきましょう。」

1. printStackTrace()とは?

1. printStackTrace()とは?
1. printStackTrace()とは?

printStackTrace()(プリント・スタック・トレース)は、プログラムでエラー(例外)が発生したときに、その「原因」や「どの場所でエラーになったのか」を一覧で表示してくれる非常に便利なメソッドです。初心者でもエラーの位置を追いやすくなるため、デバッグには欠かせない仕組みです。

たとえるなら、問題が起きたときに「どの手順でそこにたどり着いたのか」を振り返る道案内のようなものです。階段を降りる途中でつまずいたとき、どの段でつまずいたのかが分かると改善しやすいですよね。プログラムでも同じで、「どの行でつまずいたのか」を教えてくれるのがprintStackTrace()です。

まずは、非常にシンプルなサンプルでどんな出力が得られるのかを見てみましょう。


fun main() {
    try {
        val result = 5 / 0   // わざとエラーを発生させる
    } catch (e: Exception) {
        println("エラーが起きました:${e.message}")
        e.printStackTrace()  // スタックトレースを表示
    }
}

このように、処理中にどこでエラーが発生したのかを順番に表示してくれるため、問題の特定が一段と楽になります。プログラミングに慣れていない段階でも、スタックトレースを読み取る習慣をつけておくと、エラーに対する理解が早く深まるようになります。

2. KotlinでのprintStackTrace()の基本的な使い方

2. KotlinでのprintStackTrace()の基本的な使い方
2. KotlinでのprintStackTrace()の基本的な使い方

printStackTrace() は、単体で急に呼び出すのではなく、基本的には try-catch 構文の中で使います。まず「エラーが起きそうな処理」を try ブロックに書き、実際にエラー(例外)が発生したときに catch ブロックで受け取り、そこで printStackTrace() を呼び出す、という流れになります。

イメージとしては、「この中で失敗するかもしれない処理」を try で囲い、「失敗したらここに飛んでくる」という受け皿が catch です。catch の引数で受け取った例外オブジェクトに対して e.printStackTrace() を呼ぶことで、Kotlin がエラーの内容や発生箇所をまとめて表示してくれます。

以下は、0 で割るというエラー(ゼロ除算)をわざと起こして、printStackTrace() で内容を確認する簡単な例です。


fun main() {
    try {
        // わざと 0 で割り算をしてエラーを発生させる
        val number = 10 / 0
        println("結果:$number")
    } catch (e: ArithmeticException) {
        // ここに処理が飛んでくる
        println("エラーが発生しました:${e.message}")
        // エラーの詳しい情報(スタックトレース)を表示
        e.printStackTrace()
    }
}

このコードを実行すると、次のような出力が得られます。


エラーが発生しました:/ by zero
java.lang.ArithmeticException: / by zero
    at MainKt.main(Main.kt:4)
    at MainKt.main(Main.kt)

1行目のメッセージで「どんなエラーだったか」をざっくり確認でき、その下の java.lang.ArithmeticException から始まる部分に「どのファイルの何行目で失敗したのか」が表示されています。Kotlin で例外が起きたとき、まずはこのように try-catchprintStackTrace() を組み合わせて確認するクセをつけておくと、デバッグがぐっと楽になります。

3. なぜprintStackTrace()が便利なのか?

3. なぜprintStackTrace()が便利なのか?
3. なぜprintStackTrace()が便利なのか?

プログラミングでは、「画面にエラーメッセージは出ているのに、結局どこで失敗しているのか分からない」という状況がよくあります。処理の流れが少し複雑になるだけでも、「どの関数の、どの行でおかしくなったのか?」を目で追うのは大変です。そこで役に立つのがprintStackTrace()で、エラーが発生するまでにたどった経路をまとめて表示してくれるため、原因にまっすぐ近づけます。

たとえば、単にエラーメッセージだけを表示する場合と、スタックトレースを表示する場合を比べてみましょう。


fun main() {
    try {
        val value = 10 / 0
        println("結果:$value")
    } catch (e: Exception) {
        // メッセージだけのパターン
        println("エラー:${e.message}")

        // 詳しく調べたいときはスタックトレースを表示
        e.printStackTrace()
    }
}

println("エラー:${e.message}") だけでも「0で割った」といった概要は分かりますが、printStackTrace()を併せて使うと、どのファイルの何行目で例外が発生したのかまで把握できます。特に、関数を何重にも呼び出している場合や、Kotlinで少し大きめのアプリを作っている場合には、「どこからどこまでの流れでエラーにたどり着いたか」を一目で追えることが大きな助けになります。

プログラミング未経験の方にとっても、スタックトレースは「エラーのヒントが詰まったログ」として頼りになる存在です。うまく動かないときに、やみくもにコードをいじるのではなく、まずprintStackTrace()でエラーの手がかりを確認する習慣をつけておくと、Kotlinのデバッグがぐっと効率的になります。

4. スタックトレースって何?

4. スタックトレースって何?
4. スタックトレースって何?

スタックトレースという言葉は聞き慣れないかもしれませんが、これはエラーが起きるまでに通ってきた処理の「足あと一覧」だと思ってください。どの関数からどの関数が呼ばれ、最終的にどこで例外が発生したのかを、上から順番に並べて教えてくれる情報です。

たとえば、あなたが道に迷ったとき、「駅 → コンビニ → 公園」というように自分の通ってきたルートを思い出せると、元の場所に戻りやすくなりますよね。スタックトレースも同じで、「main関数 → Aという処理 → Bという処理」という流れの中で、どこでつまずいたのかを逆順に表示してくれます。

実際に、少しだけ関数を分けたKotlinのサンプルでスタックトレースのイメージを確認してみましょう。


fun main() {
    try {
        startProcess()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

fun startProcess() {
    calculate()
}

fun calculate() {
    val result = 10 / 0  // ここでエラー(ゼロ除算)
    println("結果:$result")
}

このプログラムを実行すると、スタックトレースには「どの関数の、どの行で例外が発生したか」が次々と表示されます。一番上の行には発生した例外の種類(例:java.lang.ArithmeticException)とメッセージが、その下の行にはcalculate関数の何行目か、さらにその下にはstartProcess関数、そしてmain関数…というように、呼び出し元が順番に並びます。

この「上から順にたどると、エラーに至るまでの流れがわかる」という性質のおかげで、スタックトレースはデバッグの強力な手がかりになります。特に、複数の関数が連携しているKotlinプログラムでは、「どこで例外が投げられたか」だけでなく、「そこに至るまでにどんな処理があったのか」まで確認できるため、原因調査がぐっとやりやすくなります。

5. printStackTrace()の応用例:複数の処理をチェック

5. printStackTrace()の応用例:複数の処理をチェック
5. printStackTrace()の応用例:複数の処理をチェック

実際のプログラムでは、1つの処理だけで完結することは少なく、複数の関数やデータ操作が重なって進んでいきます。そのため、どこでエラーが発生したのかを正確に追うには、スタックトレースの情報がとても役立ちます。ここでは、初心者でもつまずきやすい「配列の要素を誤って取り出すケース」を例に、どのようにprintStackTrace()が助けになるのかを見ていきましょう。


fun main() {
    val numbers = listOf(10, 20, 30)

    try {
        checkIndex(numbers)
    } catch (e: Exception) {
        println("エラーが発生しました:${e.message}")
        e.printStackTrace()   // エラーの足跡を詳しく表示
    }
}

fun checkIndex(list: List<Int>) {
    println("値を取り出します…")
    //リストに存在しないインデックスを指定してしまう
    val value = list[3]  
    println("取得した値:$value")
}

この例では、checkIndex()関数内で誤ったインデックスを指定しているため、IndexOutOfBoundsException が発生します。スタックトレースを確認すると、「main関数 → checkIndex関数 → list[3] の行」というように、エラーまでの流れが階段状に表示されます。

特に初心者の方は、エラー箇所を見つけるのに時間がかかることが多いですが、スタックトレースを読むことで「どの処理が原因なのか」がすぐに分かるようになります。複数の関数を呼び出すアプリを作り始めた頃に、もっとも頼りになる技術の一つと言えるでしょう。

6. エラーの種類ごとに使い分ける方法

6. エラーの種類ごとに使い分ける方法
6. エラーの種類ごとに使い分ける方法

catchブロックでは、エラーの種類に応じてprintStackTrace()を使い分けることもできます。


try {
    val num = "あいう".toInt()
} catch (e: NumberFormatException) {
    println("数字に変換できませんでした。")
    e.printStackTrace()
}

このように、エラーの内容に応じて説明を分けてからスタックトレースを表示すれば、より親切なプログラムになります。

7. 開発中以外はprintStackTrace()の使いすぎに注意

7. 開発中以外はprintStackTrace()の使いすぎに注意
7. 開発中以外はprintStackTrace()の使いすぎに注意

printStackTrace()はとても便利ですが、本番環境(ユーザーが使う状態)でそのまま出力してしまうと、内部情報を見せすぎてしまうことがあります。

そのため、開発中やテストのときにはたくさん使ってよいですが、アプリとして公開するときには注意しましょう。ログファイルにだけ出力する、ユーザーには見せない、といった工夫が大切です。

まとめ

まとめ
まとめ

Kotlinで例外処理を行うときに欠かせないのが、例外の発生個所や原因を詳しく知るための手がかりとなるprintStackTraceという仕組みです。例外が発生するとプログラムは途中で止まってしまいますが、printStackTraceを利用すれば、どの処理で問題が起きたのか、どの関数を通ってエラーが発生したのかを順番にたどれるため、原因の特定がとても容易になります。とくに初心者の段階では、エラーの意味やどこの行で失敗しているのかが分からず困ってしまうことが多いため、スタックトレースの仕組みを理解しておくことは大きな助けになります。

ふだんプログラムを実行していると、計算ミスや入力値の間違い、配列の範囲外アクセスなど、思いがけないトラブルに出会うことがよくあります。そのような時に役立つのが、try構文とcatch構文を組み合わせた例外処理であり、その内部でprintStackTraceを使うことで、問題の原因を具体的に知ることができます。たとえばゼロで割り算をしてしまった場合にも、スタックトレースがあればどの行で計算が行われ、どの時点で例外が発生したかがはっきり分かります。単にエラーのメッセージだけを見るよりも情報量が多く、プログラム全体の流れを追いかけながら冷静に原因を探れるのが大きな特徴です。

また、スタックトレースはエラーだけでなく、プログラムが複雑な構造を持っているときにも役に立ちます。関数が多くネストしている場合や、複数のファイルに処理が分かれているプロジェクトでも、スタックトレースを読むことで、プログラムがどうやって現在の地点に辿り着いたのかが分かります。これはまるで自分の足跡を記録してくれている地図のようなもので、問題を深掘りして調査する際には非常に心強い材料となります。

実際の開発現場では、例外の原因を迅速に突き止めることが求められるため、printStackTraceは開発者にとって欠かせない存在です。複数人で開発を進める場合などは、後から読み返したときにも理解しやすいログを残しておくことが重要で、例外の位置や処理の流れを明確に残すスタックトレースはその役割を果たしてくれます。ただし、本番環境では内部情報をそのまま利用者に見せてしまうと危険な場合があるため、ログ出力の仕組みを整えることも必要です。

次のサンプルは、printStackTraceの基本的な使い方を振り返るためのものです。初心者でもわかりやすい形で例外を確認できる構成になっており、応用的な場面でも活用できる考え方が身につきます。

例外のスタックトレースを確認するサンプルコード


fun main() {
    try {
        val data = listOf("りんご", "みかん", "ぶどう")
        val item = data[5]
        println(item)
    } catch (e: Exception) {
        println("例外が発生しました:${e.message}")
        e.printStackTrace()
    }
}

このようなコードは配列の範囲外を参照してしまう典型的な例ですが、printStackTraceを使うことでどの行で誤りが起きたのか、エラーの種類が何であるのかを瞬時に理解できます。例外の内容を深く理解することで、なぜエラーが起きたのかを正しく判断でき、解決までの時間が短縮されます。さらに、複数のエラーが連続して発生するような難しい状況でも、スタックトレースがあればエラー発生の順序や原因が明確になるため、より正確な修正が可能になります。

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

生徒

「先生、スタックトレースって最初は難しそうに感じましたが、読み方が分かると実はすごく便利なんですね。」

先生

「その通りですよ。どこでエラーが起きたのかを具体的に教えてくれるので、原因調査がとても早くなります。printStackTraceは、エラーの地図のような存在ですね。」

生徒

「たしかに、どの行で間違えたのかが分かると修正しやすいですし、プログラムの流れもイメージしやすかったです。ほかの例外でも同じように使えるんですか?」

先生

「もちろんです。配列の範囲外、ゼロ除算、型変換の失敗など、どんな例外でもスタックトレースが役に立ちますよ。慣れてくるとトラブルに強いプログラムが書けるようになります。」

生徒

「よかったです。もっと練習して、例外処理がしっかり書けるようになりたいです!」

先生

「ええ、その調子です。例外処理はプログラムの信頼性を高める大切な技術ですから、今日学んだことをどんどん実践していきましょう。」

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

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

※ Amazon広告リンク

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

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

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

KotlinでprintStackTrace()とは何をするメソッドですか?

KotlinにおけるprintStackTrace()は、例外が発生したときに、エラーの詳細やどの処理で問題が起きたかを出力してくれるメソッドです。デバッグやバグの原因調査に非常に役立ちます。
関連セミナーのご案内

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

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

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

具体的な体験内容と環境

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

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

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

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

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

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

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

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

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

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

セミナー画像

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

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説