🐱 うさねこ教室 Python と可観測性の教室

ビルドツールと依存管理

🐱 この章の目次

なぜビルドツールが必要か

Python では python main.py で即座に実行できますが、JVM ではコンパイルが必要です。 ソースファイルが増えるとコンパイル順序や依存関係の管理が複雑になるため、ビルドツール が不可欠です。 Python の pyproject.toml + uv に相当するのが、JVM の Gradle や Maven です。

Gradle(Kotlin DSL)

現在の JVM 開発で最も使われているビルドツールが Gradle です。 build.gradle.kts(Kotlin DSL)でビルド設定と依存関係を宣言します。 Python の pyproject.toml に近い役割ですが、コンパイルやパッケージングのライフサイクルも管理します。

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

repositories {
    mavenCentral()  // PyPI に相当
}

dependencies {
    implementation("io.ktor:ktor-server-core:2.3.0")  // pip install に相当
    testImplementation(kotlin("test"))
}

application {
    mainClass.set("MainKt")
}
# 比較: pyproject.toml
[project]
name = "myapp"
dependencies = ["fastapi>=0.100.0"]

[tool.uv]
dev-dependencies = ["pytest>=7.0"]

ビルドライフサイクル

Gradle のビルドは段階的に実行されます。

./gradlew build    # compile → test → package を一括実行
./gradlew test     # テストのみ実行
./gradlew run      # アプリケーション実行
GradlePython 相当
compile不要(インタプリタ)
testpytest
jar(パッケージ)python -m build
mavenCentral()PyPI

JVM ビルドが複雑な理由

コンパイルが必要なため、ソースとバイナリの整合性を常に保つ必要があります。 クラスパス の管理(どの .class.jar を参照するか)は Python の sys.path より厳密です。 マルチモジュールプロジェクトでは、モジュール間の依存関係をビルドツールが解決します。