Skip to content

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

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


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

チュートリアルの最初のパートでは、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. 左側のパネルで、New Project | Spring Bootを選択します。
  3. New Projectウィンドウで、以下のフィールドとオプションを指定します。
  • Name: demo
  • Language: Kotlin
  • Type: Gradle - Kotlin
 > このオプションは、ビルドシステムとDSLを指定します。
 >
 {style="tip"}
  • Package name: com.example.demo
  • JDK: Java JDK
 > このチュートリアルでは、**Amazon Corretto version 23**を使用します。
 > JDKがインストールされていない場合、ドロップダウンリストからダウンロードできます。
 >
 {style="note"}
  • Java: 17
 > Java 17がインストールされていない場合、JDKドロップダウンリストからダウンロードできます。
 >
 {style="tip"}

Spring Bootプロジェクトの作成

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

  2. チュートリアルに必要な以下の依存関係を選択します。

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

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

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

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

  1. その後、Project viewで以下の構造を確認できます。

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-starter-data-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin") // JSONを扱うためのKotlin用Jackson拡張
    implementation("org.jetbrains.kotlin:kotlin-reflect") // Kotlinリフレクションライブラリ。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`はJSR-305アノテーションの厳格モードを有効にする
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

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

  1. pluginsブロックには2つのKotlinアーティファクトがあります。
  • kotlin("jvm") – プロジェクトで使用するKotlinのバージョンを定義するプラグイン
  • kotlin("plugin.spring") – Spring Frameworkの機能と互換性を持たせるために、Kotlinクラスにopen修飾子を追加するKotlin Springコンパイラプラグイン
  1. dependenciesブロックには、いくつかのKotlin関連モジュールがリストされています。
  • com.fasterxml.jackson.module:jackson-module-kotlin – Kotlinクラスおよびデータクラスのシリアライズとデシリアライズのサポートを追加するモジュール
  • org.jetbrains.kotlin:kotlin-reflect – Kotlinリフレクションライブラリ
  1. 依存関係セクションの後には、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<String>

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

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

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

コントローラーを作成する

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

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

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

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

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

@GetMappingアノテーション

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

kotlin
@RequestParamアノテーション

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

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

単一式関数 – index()

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

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

関数の戻り値の型の型推論

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

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

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

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

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

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

アプリケーションを実行する

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

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

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

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

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

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

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

    「Hello, John!」という応答が表示されるはずです。

    Springアプリケーションの応答

次のステップ

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

次の章に進む