10.

Kotlin(.kt/.kts)完全ガイド — JetBrains・Android 公式・Null Safety・コルーチン

編集
この記事の要点
  • Kotlin は JetBrains が 2011 年に発表、2016 年に 1.0 リリース。JVM ターゲットを主とする静的型付き言語
  • Google が 2017 年に Android 公式言語として認定、2019 年に「Kotlin First」を宣言
  • ファイル拡張子は .kt(通常のソース)と .kts(スクリプト / Gradle DSL)
  • Null Safety: StringString? を型レベルで区別。NPE を撲滅
  • データクラス data class User(val name: String, val age: Int) で equals / hashCode / toString / copy を自動生成
  • コルーチン(suspend 関数)で軽量非同期。launch / async / flow
  • Gradle の Kotlin DSL(build.gradle.kts)として Java エコシステムのビルド設定にも浸透

概要

Kotlin は、JetBrains(IntelliJ IDEA を作っている会社)が 2011 年 7 月に発表し、2016 年 2 月に 1.0 をリリースした静的型付けプログラミング言語です。「Java の良さを残しつつ、Java の不満点を解決する」という設計思想で生まれ、JVM バイトコードにコンパイルされ Java と 100% 相互運用できることが最大の特徴です。Java のクラスを Kotlin から呼べますし、その逆もできます。さらに JS(Kotlin/JS)・ネイティブ(Kotlin/Native)・WASM 出力にも対応するマルチプラットフォーム言語に発展しました。

普及の決定打は 2017 年 5 月、Google I/O で Android の公式言語に認定されたことです。さらに 2019 年には Google が「Android development is now Kotlin first」と宣言し、新規 Android アプリは Kotlin で書くのが標準となりました。サーバーサイドでも Spring Boot が公式に Kotlin をサポートし、Ktor(JetBrains 製の Web フレームワーク)と並んで採用が拡大しています。

ファイル拡張子は通常のソースが .ktスクリプトモードのソースが .kts です。.kts は Gradle の Kotlin DSL(build.gradle.kts)として広く使われており、Java プロジェクトでも「ビルド設定だけは Kotlin で書く」というスタイルが定着しつつあります。

Kotlin の核心機能は Null Safetyです。型レベルで String(null 不可)と String?(null 許容)を区別し、null 許容型を呼び出す際は ?.(セーフコール)や ?:(エルビス演算子)を使うことを強制します。これにより、Java で頻発する NullPointerException がコンパイル時にほぼ撲滅されます。他にもデータクラス(equals / hashCode / toString / copy 自動生成)・拡張関数コルーチン(軽量非同期)・シールクラススマートキャストなど、現代的な機能が揃っています。

ファイル種類とビルド成果物

拡張子役割
.ktKotlin 通常ソース
.ktsKotlin スクリプト(main 関数不要、トップレベル文が直接実行可)
.classkotlinc でコンパイルされた JVM バイトコード
.jar配布用 JAR(Java と同じ ZIP 形式)
build.gradle.ktsGradle ビルド定義(Kotlin DSL)
settings.gradle.ktsGradle プロジェクト設定

ビルドフロー: main.ktkotlinc.class ファイル群 → .jar → JVM 実行。Android 向けは追加で D8 / R8 が .class を Dalvik バイトコード(.dex)に変換します。

「Hello, World」

// Hello.kt
fun main() {
    println("Hello, World")

    // Null Safety
    val name: String? = null
    println(name?.length ?: "name is null")

    // データクラス
    data class User(val name: String, val age: Int)
    val u = User("Kotlin", 13)
    val u2 = u.copy(age = 14)
    println(u2)   // User(name=Kotlin, age=14)

    // コレクションとジェネリクス
    val nums: List<Int> = listOf(1, 2, 3)
    val doubled = nums.map { it * 2 }
    println(doubled)  // [2, 4, 6]
}
$ kotlinc Hello.kt -include-runtime -d hello.jar
$ java -jar hello.jar
Hello, World

# スクリプトとして直接実行(.kts)
$ kotlinc -script script.kts

パッケージ管理・ビルドツール

Kotlin プロジェクトのビルドは Gradle(Kotlin DSL 推奨)か Maven を使います。依存は Maven Central や JetBrains の自社リポジトリから取得します。Android 開発では Android Studio に統合された Gradle が標準です。

// build.gradle.kts
plugins {
    kotlin("jvm") version "1.9.22"
    application
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
    testImplementation(kotlin("test"))
}

application {
    mainClass.set("HelloKt")
}
gradle build              # ビルド
gradle run                # 実行
gradle test               # テスト

関連言語との比較

項目KotlinJavaSwiftScala
Null 安全あり(String?なしあり(String?あり(Option
実行環境JVM / JS / NativeJVMiOS / macOS ネイティブJVM / JS
非同期コルーチン(suspendVirtual Thread (21+)async / awaitFuture / ZIO / cats-effect
記述量少ない多い少ない少ない
主用途Android / サーバーエンタープライズiOS / macOSビッグデータ / 関数型

注意点・落とし穴

  • プラットフォーム型:Java から呼ばれる型は null 許容かどうか不明な「プラットフォーム型」String! になる。Kotlin 側で安全側に明示する必要がある。
  • コンパイル速度:Java よりも遅め。大規模 Android プロジェクトでは Gradle ビルドが分単位になることもある。
  • 型消去の継承:JVM 上で動く以上、ジェネリクスは Java 同様に型消去(inline fun + reified で部分的に回避可)。
  • コルーチンのキャンセル伝播:構造化並行性(structured concurrency)を理解しないとリーク・取りこぼしが起きる。
  • data class の継承不可:データクラスは final 相当で継承できない(設計意図ではあるが初学者が驚く点)。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Python(.py / .pyc)
  2. JavaScript(.js / .mjs / .cjs)
  3. TypeScript(.ts / .tsx)
  4. Go(.go)
  5. Rust(.rs)
  6. Java(.java / .class / .jar)
  7. C / C++(.c / .h / .cpp / .hpp)
  8. Ruby(.rb)
  9. Swift(.swift)
  10. Kotlin(.kt / .kts)

最近更新/作成されたページ