Skip to content

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

これは Spring BootとKotlinをはじめよう チュートリアルの第1パートです:


ステップ1 KotlinでSpring Bootプロジェクトを作成する
ステップ2 Spring Bootプロジェクトにデータクラスを追加する
ステップ3 Spring Bootプロジェクトにデータベースのサポートを追加する
ステップ4 データベースアクセスにSpring Data CrudRepositoryを使用する

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

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

始める前に

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

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

Spring Bootプロジェクトの作成

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

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

  2. 左側のパネルの Generators セクションで Spring Boot を選択します。

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

    • Name: demo

    • Language: Kotlin

    • Type: Gradle - Kotlin

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

    • Package name: com.example.demo

    • JDK: Java JDK

      このチュートリアルでは Amazon Corretto version 23 を使用しています。 JDKがインストールされていない場合は、ドロップダウンリストからダウンロードできます。

    • Java: 17

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

    Spring Bootプロジェクトの作成

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

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

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

    Spring Bootプロジェクトのセットアップ

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

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

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

    Spring Bootプロジェクトのセットアップ

    生成された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" // 使用するKotlinのバージョン
    kotlin("plugin.spring") version "1.9.25" // Kotlin Springプラグイン
    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-h2console")
    implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-webmvc")
    implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlinリフレクションライブラリ、Springでの動作に必要
    implementation("tools.jackson.module:jackson-module-kotlin") // JSONを扱うためのKotlin用Jackson拡張
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-data-jdbc-test")
    testImplementation("org.springframework.boot:spring-boot-starter-webmvc-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

kotlin {
    compilerOptions {
        freeCompilerArgs.addAll("-Xjsr305=strict", "-Xannotation-default-target=param-property") // `-Xjsr305=strict` はJSR-305アノテーションの厳密モードを有効にします
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

見ての通り、GradleビルドファイルにはKotlin関連の成果物がいくつか追加されています。

  1. plugins ブロックには、2つのKotlin成果物があります。

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

    • tools.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の 自動設定(auto-configuration)コンポーネントスキャン が有効になり、"アプリケーションクラス"上で追加の設定を定義できるようになります。

プログラムの開始点 – main()

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

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

可変長引数 – args: Array<String>

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

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

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

コントローラーの作成

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

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
@RequestParam アノテーション

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

したがって、アプリケーションのルートにアクセスし、/?name=<your-value> のように "name" という名前のリクエストパラメータを指定すると、そのパラメータ値が index() 関数の呼び出し時の引数として使用されます。

単一式関数 – index()

index() 関数には文が1つしかないため、単一式関数(single-expression function) として宣言できます。

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

関数の戻り値型の型推論

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

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

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

Hello, $name! という式は、Kotlinでは 文字列テンプレート(String template) と呼ばれます。

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

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

アプリケーションの実行

Springアプリケーションを実行する準備が整いました。

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

    Spring Bootアプリケーションの実行

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

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

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

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

    レスポンスとして "Hello, John!" と表示されるはずです。

    Springアプリケーションのレスポンス

次のステップ

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

次の章に進む