Kotlinのカバレッジ計測ツール入門|初心者向けJaCoCoの使い方をわかりやすく解説
生徒
「先生、Kotlinのテストってちゃんとやってるつもりなんですが、全部のコードをテストできてるのか不安です…」
先生
「それなら、カバレッジ計測ツールを使ってみましょう。コードがどこまでテストされているかを可視化できますよ。」
生徒
「へぇ~。カバレッジってなんですか?」
先生
「『どのくらいのコードがテストで実行されたか』をパーセンテージで見られる指標のことです。では、Kotlinで使えるカバレッジツールJaCoCoの基本から学んでいきましょう!」
1. カバレッジとは?テストの見える化をしよう
カバレッジ(Coverage)とは、Kotlinのプログラムの中で、テストによってどれだけのコードが実行されたかを表す指標です。
たとえば100行のコードがあって、そのうち60行だけがテストによって実行されたなら、カバレッジは60%になります。
この数値を確認することで、テストが不十分な箇所を見つけやすくなり、バグを防ぐことにつながります。
2. JaCoCoとは?Kotlinでも使えるカバレッジ測定ツール
JaCoCo(ジャココ)は、JavaやKotlinで書かれたコードのカバレッジを自動で測定してくれるツールです。
無料で使える上、Gradleと簡単に連携できるため、Kotlinのプロジェクトでもよく使われています。
3. GradleにJaCoCoを設定する方法
KotlinのプロジェクトでJaCoCoを使うには、build.gradle.ktsに以下のような設定を追加します。
plugins {
kotlin("jvm") version "1.9.0"
jacoco
}
jacoco {
toolVersion = "0.8.10"
}
jacocoプラグインを有効にすることで、Kotlinのビルドに自動でカバレッジ計測が組み込まれます。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
4. JaCoCoでカバレッジを出力する方法
カバレッジのレポートを出力するには、Gradleで次のコマンドを実行します。
./gradlew test jacocoTestReport
このコマンドを実行すると、Kotlinのテストが実行されたあとに、HTML形式のカバレッジレポートが自動で作成されます。
5. カバレッジレポートの見方
レポートは通常、以下の場所にHTMLファイルとして保存されます。
build/reports/jacoco/test/html/index.html
このHTMLファイルをブラウザで開くと、各クラスや関数がどれくらいテストでカバーされているかが色分けされて表示されます。
- 緑色:テストで実行されたコード
- 赤色:テストされていないコード
6. 実際にテストを書いてカバレッジを確認してみよう
ここでは簡単なKotlin関数をテストし、その結果をJaCoCoで確認する例を紹介します。
class Calculator {
fun add(a: Int, b: Int): Int = a + b
fun subtract(a: Int, b: Int): Int = a - b
}
次に、この関数に対するテストを用意します。
import kotlin.test.Test
import kotlin.test.assertEquals
class CalculatorTest {
private val calculator = Calculator()
@Test
fun testAdd() {
assertEquals(5, calculator.add(2, 3))
}
}
上記のテストではadd関数だけが実行されるため、subtract関数の部分は赤く表示されます。
7. カバレッジを上げるにはどうすればいい?
カバレッジを100%に近づけるためには、すべての関数・条件分岐に対してテストを書く必要があります。
ただし、100%を目指しすぎて無理やりなテストを書くと逆効果になることもあります。
ポイントは、重要な処理・バグが起きやすい部分をしっかりとテストすることです。
8. Kotlin初心者がJaCoCoを使うメリット
JaCoCoを使うと、自分の書いたテストがどのくらいコードをカバーしているのかを数字と色でわかりやすく確認できます。
まだテストに慣れていないKotlin初心者にとっても、「どこをテストすればいいか」が視覚的にわかるので、学習にも最適なツールです。
JaCoCoを導入するだけで、Kotlinのテストの質がグッと上がりますよ。