KotlinでSpring Bootプロジェクトを作成する
これは「Spring BootとKotlin入門」チュートリアルの最初のパートです:
Spring BootプロジェクトをKotlinで作成する
Spring Bootプロジェクトにデータクラスを追加する
Spring Bootプロジェクトにデータベースサポートを追加する
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プロジェクトを作成します:
IntelliJ IDEAで、File | New | Projectを選択します。
左側のパネルで、New Project | Spring Bootを選択します。
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
すべてのフィールドを指定したことを確認し、Nextをクリックします。
チュートリアルで必要となる以下の依存関係を選択します:
- Web | Spring Web
- SQL | Spring Data JDBC
- SQL | H2 Database
Createをクリックしてプロジェクトを生成および設定します。
TIP
IDEは新しいプロジェクトを生成して開きます。プロジェクトの依存関係のダウンロードとインポートには時間がかかる場合があります。
その後、Projectビューで以下の構造を確認できます:
生成された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" // 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関連のアーティファクトが追加されています:
plugins
ブロックには、2つのKotlinアーティファクトがあります:kotlin("jvm")
– プロジェクトで使用するKotlinのバージョンを定義するプラグインkotlin("plugin.spring")
– Kotlinクラスにopen
修飾子を追加してSpring Frameworkの機能と互換性を持たせるための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の自動設定、コンポーネントスキャンを有効にし、独自の「アプリケーションクラス」に追加の設定を定義できるようにします。
プログラムのエントリポイント – main()
可変長引数 – args: Array<String>
runApplication()
関数の宣言を確認すると、関数のパラメータが可変長引数 (`vararg`) 修飾子でマークされていることがわかります: vararg args: String
。 これは、関数に任意の数のString引数を渡すことができることを意味します。
スプレッド演算子 – (*args)
args
はmain()
関数のパラメータで、Stringの配列として宣言されています。 Stringの配列があり、その内容を関数に渡したい場合は、スプレッド演算子(配列の前にアスタリスク *
を付ける)を使用します。
コントローラの作成
アプリケーションは実行準備ができていますが、まずそのロジックを更新しましょう。
Springアプリケーションでは、Webリクエストを処理するためにコントローラが使用されます。 DemoApplication.kt
ファイルと同じパッケージ内に、MessageController
クラスを持つMessageController.kt
ファイルを次のように作成します:
// 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コントローラの関数をマークします:
@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
アプリケーションの実行
Springアプリケーションが実行準備ができました:
DemoApplication.kt
ファイルで、main()
メソッドの横にあるガターの緑色の実行アイコンをクリックします:TIP
ターミナルで
./gradlew bootRun
コマンドを実行することもできます。これにより、コンピュータ上でローカルサーバーが起動します。
アプリケーションが起動したら、以下のURLを開きます:
texthttp://localhost:8080?name=John
応答として「Hello, John!」が表示されるはずです:
次のステップ
チュートリアルの次のパートでは、Kotlinのデータクラスと、それらをアプリケーションでどのように使用できるかについて学びます。