KotlinでSpring Bootプロジェクトを作成する
これは、Spring BootとKotlin入門チュートリアルの最初のパートです。
KotlinでSpring Bootプロジェクトを作成する
Spring Bootプロジェクトにデータクラスを追加する
Spring Bootプロジェクトのデータベースサポートを追加する
データベースアクセスに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プロジェクトを作成します。
- IntelliJ IDEAで、File | New | Projectを選択します。
- 左側のパネルで、New Project | Spring Bootを選択します。
- 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"}
すべてのフィールドが指定されていることを確認し、Nextをクリックします。
チュートリアルに必要な以下の依存関係を選択します。
- Web | Spring Web
- SQL | Spring Data JDBC
- SQL | H2 Database
- Createをクリックしてプロジェクトを生成およびセットアップします。
IDEは新しいプロジェクトを生成して開きます。プロジェクトの依存関係のダウンロードとインポートには時間がかかる場合があります。
- その後、Project viewで以下の構造を確認できます。
生成されたGradleプロジェクトは、Mavenの標準ディレクトリレイアウトに対応しています。
main/kotlin
フォルダーの下には、アプリケーションに属するパッケージとクラスがあります。- アプリケーションのエントリポイントは、
DemoApplication.kt
ファイルのmain()
メソッドです。
プロジェクトのGradleビルドファイルを確認する
build.gradle.kts
ファイルを開きます。これはGradle Kotlinビルドスクリプトであり、アプリケーションに必要な依存関係のリストが含まれています。
このGradleファイルはSpring Bootの標準ですが、kotlin-spring Gradleプラグイン (kotlin("plugin.spring")
) を含む必要な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関連のアーティファクトが追加されています。
plugins
ブロックには2つのKotlinアーティファクトがあります。
kotlin("jvm")
– プロジェクトで使用するKotlinのバージョンを定義するプラグインkotlin("plugin.spring")
– Spring Frameworkの機能と互換性を持たせるために、Kotlinクラスにopen
修飾子を追加するKotlin Springコンパイラプラグイン
dependencies
ブロックには、いくつかのKotlin関連モジュールがリストされています。
com.fasterxml.jackson.module:jackson-module-kotlin
– Kotlinクラスおよびデータクラスのシリアライズとデシリアライズのサポートを追加するモジュールorg.jetbrains.kotlin:kotlin-reflect
– Kotlinリフレクションライブラリ
- 依存関係セクションの後には、
kotlin
プラグインの設定ブロックが表示されます。 ここでは、さまざまな言語機能を有効または無効にするために、コンパイラに追加の引数を追加できます。
Kotlinコンパイラのオプションの詳細については、を参照してください。
生成されたSpring Bootアプリケーションを確認する
DemoApplication.kt
ファイルを開きます。
// 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の自動構成、コンポーネントスキャンを有効にし、その「アプリケーションクラス」に追加の構成を定義できるようにします。
可変引数 – args: Array<String>
runApplication()
関数の宣言を確認すると、関数のパラメータがvararg
修飾子でマークされていることがわかります。vararg args: String
です。 これは、関数に可変数のString
引数を渡すことができることを意味します。
スプレッド演算子 – (*args)
args
は、main()
関数へのパラメータであり、String
の配列として宣言されています。 String
の配列があり、その内容を関数に渡したい場合は、スプレッド演算子(配列の前にアスタリスク*
を付ける)を使用します。
コントローラーを作成する
アプリケーションを実行する準備ができていますが、まずそのロジックを更新しましょう。
Springアプリケーションでは、Webリクエストを処理するためにコントローラーが使用されます。 DemoApplication.kt
ファイルと同じパッケージに、MessageController.kt
ファイルを以下のMessageController
クラスとともに作成します。
// 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コントローラーの関数をマークします。
@RequestParamアノテーション
関数パラメータname
は@RequestParam
アノテーションでマークされています。このアノテーションは、メソッドパラメータがWebリクエストパラメータにバインドされるべきであることを示します。
したがって、ルートでアプリケーションにアクセスし、/?name=<your-value>
のように「name」というリクエストパラメータを提供すると、そのパラメータ値がindex()
関数を呼び出すための引数として使用されます。
単一式関数 – index()
index()
関数には1つのステートメントしか含まれていないため、単一式関数として宣言できます。
これは、中括弧を省略でき、本文が等号=
の後に指定されることを意味します。
関数の戻り値の型の型推論
index()
関数は、戻り値の型を明示的に宣言していません。代わりに、コンパイラは等号=
の右側のステートメントの結果を見て、戻り値の型を推論します。
Hello, $name!
式の型はString
であるため、関数の戻り値の型もString
です。
文字列テンプレート – $name
アプリケーションを実行する
Springアプリケーションの実行準備が整いました。
DemoApplication.kt
ファイルで、main()
メソッドの横にあるガターの緑色のRunアイコンをクリックします。ターミナルで
./gradlew bootRun
コマンドを実行することもできます。これにより、ローカルサーバーがコンピューター上で起動します。
アプリケーションが起動したら、以下のURLを開きます。
texthttp://localhost:8080?name=John
「Hello, John!」という応答が表示されるはずです。
次のステップ
チュートリアルの次のパートでは、Kotlinのデータクラスについて、そしてそれらをアプリケーションでどのように使用できるかを学びます。