Skip to content

KotlinでSpring Bootプロジェクトを作成する

これは「Spring BootとKotlin入門」チュートリアルの最初のパートです:


First step Spring BootプロジェクトをKotlinで作成する
Second step Spring Bootプロジェクトにデータクラスを追加する
Third step Spring Bootプロジェクトにデータベースサポートを追加する
Fourth step Spring Data CrudRepositoryを使用してデータベースにアクセスする

チュートリアルの最初のパートでは、IntelliJ IDEAのプロジェクトウィザードを使用して、GradleでSpring Bootプロジェクトを作成する方法を説明します。

NOTE

このチュートリアルでは、Gradleをビルドシステムとして使用する必要はありません。Mavenを使用する場合でも、同じ手順に従うことができます。

始める前に

IntelliJ IDEA Ultimate Editionの最新バージョンをダウンロードしてインストールします。

TIP

IntelliJ IDEA Community Editionまたは別のIDEを使用している場合、Webベースのプロジェクトジェネレーターを使用してSpring Bootプロジェクトを生成できます。

Spring Bootプロジェクトの作成

IntelliJ IDEA Ultimate Editionのプロジェクトウィザードを使用して、Kotlinで新しいSpring Bootプロジェクトを作成します:

  1. IntelliJ IDEAで、File | New | Projectを選択します。

  2. 左側のパネルで、New Project | Spring Bootを選択します。

  3. New Projectウィンドウで、以下のフィールドとオプションを指定します:

    • Name: demo
    • Language: Kotlin
    • Type: Gradle - Kotlin

    TIP

    このオプションは、ビルドシステムとDSLを指定します。

    • Package name: com.example.demo
    • JDK: Java JDK

    NOTE

    このチュートリアルでは、Amazon Correttoバージョン23を使用します。

    JDKがインストールされていない場合は、ドロップダウンリストからダウンロードできます。

    • Java: 17

    Create Spring Boot project

  4. すべてのフィールドを指定したことを確認し、Nextをクリックします。

  5. チュートリアルで必要となる以下の依存関係を選択します:

    • Web | Spring Web
    • SQL | Spring Data JDBC
    • SQL | H2 Database

    Set up Spring Boot project

  6. Createをクリックしてプロジェクトを生成および設定します。

    TIP

    IDEは新しいプロジェクトを生成して開きます。プロジェクトの依存関係のダウンロードとインポートには時間がかかる場合があります。

  7. その後、Projectビューで以下の構造を確認できます:

    Set up Spring Boot project

    生成されたGradleプロジェクトは、Mavenの標準ディレクトリレイアウトに対応しています:

    • main/kotlinフォルダ配下には、アプリケーションに属するパッケージとクラスがあります。
    • アプリケーションのエントリポイントは、DemoApplication.ktファイルのmain()メソッドです。

プロジェクトのGradleビルドファイルを確認する

build.gradle.ktsファイルを開きます。これはGradle Kotlinビルドスクリプトであり、アプリケーションに必要な依存関係のリストが含まれています。

このGradleファイルはSpring Bootの標準ですが、kotlin-spring Gradleプラグイン (kotlin("plugin.spring")) を含む必要なKotlinの依存関係も含まれています。

すべてのアートファクトと依存関係の説明を含む完全なスクリプトは以下の通りです:

kotlin
// build.gradle.kts
plugins {
    kotlin("jvm") version "1.9.25" // The version of Kotlin to use
    kotlin("plugin.spring") version "1.9.25" // The Kotlin Spring plugin
    id("org.springframework.boot") version "3.4.5"
    id("io.spring.dependency-management") version "1.1.7"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin") // Jackson extensions for Kotlin for working with JSON
    implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlin reflection library, required for working with Spring
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

kotlin {
    compilerOptions {
        freeCompilerArgs.addAll("-Xjsr305=strict") // `-Xjsr305=strict` enables the strict mode for JSR-305 annotations
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

ご覧の通り、GradleビルドファイルにはいくつかのKotlin関連のアーティファクトが追加されています:

  1. pluginsブロックには、2つのKotlinアーティファクトがあります:

    • kotlin("jvm") – プロジェクトで使用するKotlinのバージョンを定義するプラグイン
    • kotlin("plugin.spring") – Kotlinクラスにopen修飾子を追加してSpring Frameworkの機能と互換性を持たせるためのKotlin Springコンパイラプラグイン
  2. dependenciesブロックには、いくつかのKotlin関連モジュールがリストされています:

    • com.fasterxml.jackson.module:jackson-module-kotlin – Kotlinクラスとデータクラスのシリアライズおよびデシリアライズのサポートを追加するモジュール
    • org.jetbrains.kotlin:kotlin-reflect – Kotlinリフレクションライブラリ
  3. 依存関係セクションの後には、kotlinプラグインの設定ブロックがあります。 ここでは、さまざまな言語機能を有効または無効にするために、コンパイラに追加の引数を追加できます。

Kotlinコンパイラオプションの詳細については、を参照してください。

生成されたSpring Bootアプリケーションの確認

DemoApplication.ktファイルを開きます:

kotlin
// DemoApplication.kt
package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}
クラスの宣言 – class DemoApplication

パッケージ宣言とインポート文の直後に、最初のクラス宣言 class DemoApplication を確認できます。

Kotlinでは、クラスにメンバー(プロパティや関数)が含まれていない場合、クラス本体({})を省略できます。

@SpringBootApplicationアノテーション

@SpringBootApplicationアノテーションは、Spring Bootアプリケーションにおける便利なアノテーションです。 これはSpring Bootの自動設定コンポーネントスキャンを有効にし、独自の「アプリケーションクラス」に追加の設定を定義できるようにします。

プログラムのエントリポイント – main()

main()関数はアプリケーションのエントリポイントです。

これはDemoApplicationクラスの外部でトップレベル関数として宣言されています。main()関数はSpringのrunApplication(*args)関数を呼び出して、Spring Frameworkでアプリケーションを開始します。

可変長引数 – args: Array&lt;String&gt;

runApplication()関数の宣言を確認すると、関数のパラメータが可変長引数 (`vararg`) 修飾子でマークされていることがわかります: vararg args: String。 これは、関数に任意の数のString引数を渡すことができることを意味します。

スプレッド演算子 – (*args)

argsmain()関数のパラメータで、Stringの配列として宣言されています。 Stringの配列があり、その内容を関数に渡したい場合は、スプレッド演算子(配列の前にアスタリスク * を付ける)を使用します。

コントローラの作成

アプリケーションは実行準備ができていますが、まずそのロジックを更新しましょう。

Springアプリケーションでは、Webリクエストを処理するためにコントローラが使用されます。 DemoApplication.ktファイルと同じパッケージ内に、MessageControllerクラスを持つMessageController.ktファイルを次のように作成します:

kotlin
// MessageController.kt
package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController

@RestController
class MessageController {
    @GetMapping("/")
    fun index(@RequestParam("name") name: String) = "Hello, $name!"
}
@RestControllerアノテーション

SpringにMessageControllerがRESTコントローラであることを伝えるために、@RestControllerアノテーションでマークする必要があります。

このアノテーションは、DemoApplicationクラスと同じパッケージにあるため、このクラスがコンポーネントスキャンによって認識されることを意味します。

@GetMappingアノテーション

@GetMappingは、HTTP GET呼び出しに対応するエンドポイントを実装するRESTコントローラの関数をマークします:

kotlin
@GetMapping("/")
fun index(@RequestParam("name") name: String) = "Hello, $name!"
@RequestParamアノテーション

関数パラメータname@RequestParamアノテーションでマークされています。このアノテーションは、メソッドパラメータがWebリクエストパラメータにバインドされるべきであることを示します。

したがって、アプリケーションをルートでアクセスし、「name」というリクエストパラメータ(例: /?name=<your-value>)を提供した場合、そのパラメータ値はindex()関数を呼び出すための引数として使用されます。

単一式関数 – index()

index()関数は1つのステートメントのみを含むため、単一式関数として宣言できます。

これは、中括弧を省略し、等号 = の後に本体を指定できることを意味します。

関数の戻り値の型推論

index()関数は戻り値の型を明示的に宣言していません。代わりに、コンパイラは等号 = の右側のステートメントの結果を見て、戻り値の型を推論します。

Hello, $name!式の型はStringであるため、関数の戻り値の型もStringです。

文字列テンプレート – $name

Hello, $name!式はKotlinでは文字列テンプレートと呼ばれます。

文字列テンプレートは、埋め込み式を含む文字列リテラルです。

これは文字列結合操作の便利な代替手段です。

アプリケーションの実行

Springアプリケーションが実行準備ができました:

  1. DemoApplication.ktファイルで、main()メソッドの横にあるガターの緑色の実行アイコンをクリックします:

    Run Spring Boot application

    TIP

    ターミナルで./gradlew bootRunコマンドを実行することもできます。

    これにより、コンピュータ上でローカルサーバーが起動します。

  2. アプリケーションが起動したら、以下のURLを開きます:

    text
    http://localhost:8080?name=John

    応答として「Hello, John!」が表示されるはずです:

    Spring Application response

次のステップ

チュートリアルの次のパートでは、Kotlinのデータクラスと、それらをアプリケーションでどのように使用できるかについて学びます。

次の章に進む