Kotlinのファイル表現の拡張子について

採用はこちら

Kotlinにおけるファイル表現と拡張子は、単に「.kt.kts か」という違いにとどまらず、コードの実行方式・ビルドプロセス・GradleやIDEとの関係まで含めて理解しておくと、実務での設計判断が格段にしやすくなります。

本記事では、Kotlinの主な拡張子 → 役割 → 内部的な扱い → 実務での使い分けという流れで、体系的に解説します。

目次

Kotlinで使われる主な拡張子一覧

まずは全体像を整理します。

拡張子名称主な用途
.ktKotlin Source File通常のKotlinソースコード
.ktsKotlin Scriptスクリプト・設定ファイル
.javaJava Source FileKotlinと混在可能
.classJava Bytecodeコンパイル後の成果物
.jarJava Archive実行・配布単位

実務で日常的に扱うのは .kt.kts がほとんどです。

.kt ファイル(Kotlin Source File)

.kt の役割

.ktKotlinの標準的なソースコードファイルです。

package com.example.app

class User(val name: String)

fun main() {
    println("Hello Kotlin")
}

主な特徴

  • コンパイルされて利用される
  • パッケージ宣言が可能
  • クラス・関数・インターフェース・enum などすべて定義可能
  • JVM / Android / Multiplatform / Native / JS すべてで利用される

ファイル名とクラス名の関係

Kotlinでは ファイル名とクラス名が一致している必要はありません

UserModels.kt
 ├─ class User
 ├─ class Admin
 └─ fun createUser()

これはJavaと大きく異なる点です。

この仕様の利点

  • ファイルを「責務単位」でまとめられる
  • 1ファイル=1クラスという制約がない
  • 小さな関連ロジックを自然に集約できる

Kotlinでは、ファイルそのものが1つの論理的な単位として扱われます。

トップレベル宣言(Kotlinらしさ)

.kt の大きな特徴のひとつが、トップレベル関数・プロパティです。

fun calculateTax(price: Int): Int {
    return (price * 0.1).toInt()
}
  • クラス定義は不要
  • ユーティリティ関数や定数定義に向いている

JVM上での扱い

トップレベル宣言は、コンパイル時に ファイル名を基にしたクラスにまとめられます。

TaxUtils.kt → TaxUtilsKt.class

Javaからは次のように参照されます。

TaxUtilsKt.calculateTax(100);

@file:JvmName("TaxUtils") を使えば、生成されるクラス名を制御することも可能です。

.kts ファイル(Kotlin Script)

.kts とは何か?

.ktsKotlin Script と呼ばれる形式で、Kotlinのスクリプト実行機構を利用して動作します。

println("Hello Script")
  • main() 関数は不要
  • 上から順に記述されたコードが評価される
  • 主に 設定ファイルや補助的な処理 に使われる

※ スクリプトであっても、内部的にはKotlinコンパイラが関与します。「完全なインタプリタ実行」ではありません。

主な利用シーン

Gradle Kotlin DSL

build.gradle.kts
settings.gradle.kts
plugins {
    kotlin("jvm") version "1.9.0"
}

現在、GradleではGroovy DSL(.gradle)に代わり、Kotlin DSL(.gradle.kts)を採用するプロジェクトが増えています

簡易スクリプト・自動化

kotlinc -script sample.kts
  • ファイル操作
  • API 呼び出し
  • 簡単なデータ変換や検証

.kt.kts の違い

項目.kt.kts
主用途アプリ本体設定・補助処理
実行ビルド成果物として実行スクリプト実行
main関数必要不要
IDE補完完全制限あり
テストしやすい向かない

アプリケーション本体は .kt、設定やスクリプト用途は .ktsという使い分けが基本です。

KotlinとJavaのファイル混在

Kotlinプロジェクトでは .kt.java を同一プロジェクト内で共存させることができます。

src/main/java
 ├─ LegacyUtil.java
 └─ NewLogic.kt
  • KotlinからJavaを呼び出せる
  • JavaからKotlinも参照できる
  • GradleやIDEがビルド順序を自動的に解決

既存Javaコードを段階的にKotlinへ移行する際にも、この仕組みが活用されます。

コンパイル後に生成される拡張子

.class

Kotlin(JVM)は最終的に Javaバイトコード(.class にコンパイルされます。

User.kt → User.class
Utils.kt → UtilsKt.class

.jar

kotlinc Main.kt -include-runtime -d app.jar
java -jar app.jar
  • 実行・配布単位
  • Kotlinランタイムを含めるかどうかを選択可能

実務での拡張子使い分け指針

アプリケーション開発(Web / Android / Backend)

src/
 └─ main/
     └─ kotlin/
         ├─ controller.kt
         ├─ service.kt
         └─ model.kt

基本はすべて .kt

ビルド設定・補助ツール

build.gradle.kts
scripts/
 └─ migrate.kts

.kts を活用

注意点・よくある誤解

.kts をアプリ本体に使う

  • IDE補完やテストが弱い
  • ビルド・運用に不向き

本体ロジックには非推奨

ファイル名=クラス名という前提

  • Kotlinでは不要
  • 「責務単位ファイル」を意識した設計が推奨

まとめ

  • .kt
    コンパイルされるKotlinの標準ソース
  • .kts
    スクリプト実行されるKotlin
  • Kotlinではファイル名とクラス名は一致不要
  • トップレベル宣言により、柔軟な設計が可能

Kotlinの拡張子は「どのように実行・利用されるか」を表している

これを理解しておくことで、プロジェクト構成・Gradle設計・保守性が一段レベルアップします。

以上、Kotlinのファイル表現の拡張子についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次