Android向けKotlin: 構文の基礎と機能

著者: IT Sectr 公開日: 2026-02-10 読了時間: 8 分

Kotlin はJetBrainsによる静的型付けプログラミング言語で、JVM上で動作し、2017年からGoogleがAndroid開発向けに公式サポートしています。KotlinはJavaと完全互換性があり、簡潔な構文と組み込みのnull安全性を備えています。Kotlin Documentation — 言語と標準ライブラリの完全ガイド。

重要ポイント

  • Kotlin — JetBrainsによる静的型付けJVM言語、簡潔な構文とnull安全性を備える
  • Null safety — コンパイラがnullable(String?)とnon-null(String)を区別し、NullPointerExceptionを排除
  • Data classes — equals、hashCode、toString、copy、componentNの自動生成
  • Extension functions — 継承なしで既存クラスに静的呼び出しでメソッドを追加
  • Coroutines — スレッドをブロックせずsuspend関数で逐次スタイルの非同期プログラミング

Kotlinとは?

Kotlin はJetBrains(IntelliJ IDEAの開発元)によって作成され、Apache 2.0ライセンスの下で2016年にリリースされた静的型付けプログラミング言語です。KotlinはJVMバイトコード、JavaScript、およびネイティブコード(Kotlin/Native経由)にコンパイルされます。主な適用分野はAndroid開発、サーバーサイドアプリケーション、クロスプラットフォームプロジェクトです。

GoogleはGoogle I/O 2017でKotlinをAndroid開発の公式言語と宣言しました。Google(Android Developer Blog、2026)によると、Google Playの新規プロジェクトの85%以上がKotlinを使用しています。この言語はサーバーサイド開発(Spring Boot、Ktor)やマルチプラットフォームプロジェクト(Kotlin Multiplatform Mobile)でも積極的に使用されています。

KotlinはJavaと完全互換です — 同じプロジェクト内でKotlinからJavaコードを、またその逆を呼び出すことができます。ビルドツール(Gradle、Maven)は両方の言語をサポートしており、開発を中断することなくJavaからKotlinへ段階的に移行できます。

Android向けにKotlinがJavaより人気な理由

主な理由: 簡潔さ — Kotlinは同じタスクに対してJavaより平均40%少ないコード行数で済みます。Null安全性 — コンパイラはチェックなしでのnullable型の使用を禁止します。関数型機能 — 高階関数、ラムダ、拡張関数、コルーチンによりコードがより表現力豊かで安全になります。

構文の基礎

基本的なKotlin構文は簡潔さと明確さを兼ね備えています。変数はval(不変)とvar(可変)で宣言します。コンパイラは型推論を使用しますが、明示的な型宣言もサポートされています。関数はfunキーワードで宣言します。

kotlin
package com.example.intro

// 定数と変数
val appName: String = "KotlinApp"  // 不変
var version = 1.0  // 可変、型推論

// 式本体を持つ関数
fun sum(a: Int, b: Int) = a + b

// String templates
fun greet(name: String) = "こんにちは、$name! バージョン ${appName}_$version"

// Default and named arguments
fun createUser(
    name: String,
    age: Int = 18,
    email: String? = null
)

When式はJavaのswitchを置き換え、より柔軟です:型チェック、範囲、条件、breakなしの分岐をサポートします。コンパイラはenumおよびsealedクラスの網羅性をチェックします。スマートキャストはisチェック後に自動的に型を変換し、明示的なキャストを不要にします。

kotlin
fun analyzeValue(value: Any) = when (value) {
    is String -> "長さ${value.length}の文字列"  // スマートキャスト
    is Int -> "整数: $value"
    in 1..10 -> "1-10の範囲の数値"
    else -> "不明な型"
}

Null安全性とエルビス演算子

Null安全性はKotlinの主要機能で、コンパイル時にNullPointerExceptionを排除します。Kotlinでは、型はデフォルトでnullになりません。nullを許可するには、型に?を追加します: String?。コンパイラはすべてのnullable値の明示的なチェックを要求します。

kotlin
// Nullable型とNon-null型
val nonNull: String = "常に非null"
val nullable: String? = null  // 許可

// セーフコール — nullでない場合のみ実行
val length: Int? = nullable?.length

// エルビス演算子 — デフォルト値
val text: String = nullable ?: "Default text"

// Let — non-null値でブロックを実行
nullable?.let { value ->
    println("値: $value")
}

セーフコール演算子(?.)は、演算子の前のオブジェクトがnullの場合はnullを返し、そうでない場合はメソッド/プロパティを呼び出します。エルビス演算子(?:)は左辺がnullの場合にデフォルト値を提供します。Not-nullアサーション(!!)は値がnullの場合にNullPointerExceptionをスローします — 値が100%存在する確信がある場合のみ使用してください。

プラットフォーム型 — 呼び出されたJavaコードからの型で、Kotlinがnullableまたはnon-nullとマークできないものです。型はString!(感嘆符付き)として表示されます。Javaコードを扱う際のnull安全性は開発者の責任です。

データクラスと分解

Kotlinのデータクラスは、equals()、hashCode()、toString()、copy()、componentN()を自動生成します。これによりJavaモデル(POJO)のボイラープレートが不要になり、コードがよりクリーンになります。data classの宣言はJavaの20-30行ではなく1行で済みます。

kotlin
data class User(
    val id: Long,
    val name: String,
    val email: String,
    val age: Int? = null
)

// 使用法
val user = User(1, "アンナ", "anna@example.com")
val updatedUser = user.copy(age = 25)

// 分解
val (id, name) = user
println("ユーザー #$id: $name")

分解を使用すると、data classを1行で変数に分解できます。これはペア、トリプル、その他の複合値を扱う際に便利です。分解はデータクラス、標準コレクション(List、Map)、およびoperator fun componentN()を持つ任意のクラスでサポートされています。

拡張関数

拡張関数は、継承なしで既存のクラスに新しいメソッドを追加するためのKotlinの仕組みです。拡張はレシーバパラメータを持つ静的メソッドにコンパイルされるため、継承は不要で仮想ディスパッチもサポートされません。

kotlin
// Stringの拡張関数
fun String.isEmail(): Boolean {
    return this.contains("@") && this.contains(".")
}

// 拡張プロパティ
val String.isPhoneNumber: Boolean
    get() = this.matches(Regex("^\\+?[\\d-]{10,15}$"))

// コレクションのジェネリック拡張
fun List<Int>.sumOfEvens(): Int {
    return this.filter { it % 2 == 0 }.sum()
}

// 使用法
println("test@mail.com".isEmail())  // true

拡張はAndroid SDKやライブラリで広く使用されています。例えば、Android KTXのActivity拡張はActivity、Fragment、Viewなどのクラスに対する拡張関数です。拡張はファイルのトップレベル関数として、またはクラスのメンバー拡張として宣言できます。

非同期プログラミングのためのコルーチン

コルーチンはKotlinにおける非同期プログラミングの仕組みで、逐次スタイルでノンブロッキングなコードを記述できます。コルーチンはsuspend関数でスレッドをブロックせずに実行を一時停止し、操作完了後に再開します。これはRxJavaのコールバックチェーンやAsyncTaskの代替です。

kotlin
import kotlinx.coroutines.*

// Suspend関数 — 一時停止可能
suspend fun fetchUserData(userId: Int): User {
    // delay — suspend関数、スレッドをブロックしない
    delay(500)
    return User(userId, "User $userId", "user@example.com")
}

// コルーチンで起動
fun loadData() {
    CoroutineScope(Dispatchers.Main).launch {
        val user = fetchUserData(1)  // ここで一時停止
        updateUI(user)  // メインスレッドで再開
    }
}

Dispatchersはコルーチンのスレッドプールを決定します: Dispatchers.Main(UIスレッド)、Dispatchers.IO(ネットワーク/ディスク操作)、Dispatchers.Default(CPU負荷の高いタスク)。構造化された並行性により、コルーチンはスコープ完了後にアクティブなままにならず、メモリリークを防ぎます。

kotlin
// async/awaitによる並列実行
suspend fun loadDashboard(): Dashboard = coroutineScope {
    val user = async { fetchUserData(1) }
    val orders = async { fetchOrders(1) }
    val stats = async { fetchStats() }
    
    Dashboard(user.await(), orders.await(), stats.await())
}

Kotlin vs Java: 比較

新しいAndroidプロジェクトにおけるKotlinとJavaの選択は、基本的なアーキテクチャ上の決定です。Kotlinはよりモダンな構文と組み込みの安全機構を提供し、Javaはより広い開発者プールと成熟したライブラリを持っています。

特徴KotlinJava
Null安全性組み込み(nullable/non-null)組み込みなし(@Nullableアノテーション)
コード量Java比−40%ボイラープレート(getters/setters)
データクラスdata class(1行)Lombok付きまたは手動のPOJO
非同期処理コルーチン(suspend/await)CompletableFuture、RxJava
拡張関数組み込みユーティリティクラス経由のみ
スマートキャストisチェック後明示的キャスト(Type)obj
後方互換性Javaと100%

パフォーマンスはKotlinとJavaで同等です — 両方ともJVMバイトコードにコンパイルされます。Kotlinはコルーチンとインライン化でわずかなオーバーヘッドが発生することがありますが、モバイルアプリケーションでは無視できるレベルです。GoogleとJetBrainsはKotlinに積極的に投資しています: Kotlin Multiplatform、Kotlin/Wasm、K2コンパイラのパフォーマンス改善など。

よくある質問

KotlinはJavaとどう違うのですか?

KotlinはJavaより40%短い — ボイラープレートが少ない。Kotlinはnull安全性、データクラス、拡張関数、コルーチン、スマートキャスト、when式を追加。Javaと完全互換: 両言語ともJVM上で動作し、同じプロジェクトで競合なく使用できます。

Kotlinのnull安全性はどのように機能しますか?

型はデフォルトでnon-nullです。nullableの場合は?: String?を使用します。コンパイラはnullable値への直接アクセスを禁止します。セーフコール(?.)はnullレシーバでnullを返します。エルビス演算子(?:)はデフォルト値を設定します。!! — 例外の可能性がある強制アンラップ。

Kotlinのコルーチンとは?

コルーチンは軽量スレッドで、非同期コードを逐次的に記述できます。suspend関数はスレッドをブロックせずに一時停止します。launchとasyncはCoroutineScopeでコルーチンを開始します。ネットワークリクエストにはDispatchers.IO、UI更新にはDispatchers.Main。

Kotlinのデータクラスとは?

data classは自動的にequals()、hashCode()、toString()、copy()、componentN()を生成します。例: data class User(val name: String, val age: Int)。val (name, age) = userによる分解。Java 14+のrecordに似ていますが、追加のcopy()メソッドがあります。

拡張関数(extension functions)はどのように機能しますか?

拡張関数は既存のクラスにメソッドを追加します: fun String.isEmail(): Boolean。コンパイラはこれらをレシーバパラメータ付きの静的呼び出しに置き換えます。継承は不要です。拡張はAndroid KTXで広く使用されています: view.showToast()、activity.viewModels()。

まとめ

  • Kotlin — JetBrainsによる静的型付けJVM言語、2017年からAndroidの公式言語
  • Null安全性 — nullable/non-null型、セーフコール(?.)、エルビス(??)、nullableを安全に扱うletブロック
  • データクラス — equals、hashCode、toString、copyの自動生成と分解
  • 拡張関数 — 継承なしで任意のクラスにメソッド追加、静的呼び出しにコンパイル
  • コルーチン — suspend関数、launch/async、Dispatchersによる逐次スタイルの非同期コード
  • Javaとの比較 — −40%のコード、null安全性、スマートキャスト、when式、100%のJava互換性
  • Kotlin Multiplatform — KotlinはAndroidだけでなく、iOS(KMM)やサーバー(Ktor、Spring)でも使用

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください