KotlinでSpring Bootプロジェクトを作成する
これは Spring BootとKotlinをはじめよう チュートリアルの第1パートです:
KotlinでSpring Bootプロジェクトを作成する
Spring Bootプロジェクトにデータクラスを追加する
Spring Bootプロジェクトにデータベースのサポートを追加する
データベースアクセスに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プロジェクトを作成します。
IntelliJ IDEAで、File | New | Project を選択します。
左側のパネルの Generators セクションで Spring Boot を選択します。
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のドロップダウンリストからダウンロードできます。

すべてのフィールドが指定されていることを確認し、Next をクリックします。
チュートリアルで必要となる以下の依存関係(dependencies)を選択します。
- Web | Spring Web
- SQL | Spring Data JDBC
- SQL | H2 Database

Create をクリックして、プロジェクトを生成およびセットアップします。
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" // 使用する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関連の成果物がいくつか追加されています。
pluginsブロックには、2つのKotlin成果物があります。kotlin("jvm")プラグインは、プロジェクトで使用されるKotlinのバージョンを定義します。- Kotlin Springコンパイラプラグイン
kotlin("plugin.spring")は、Kotlinクラスにopen修飾子を追加し、Spring Frameworkの機能との互換性を持たせます。
dependenciesブロックには、いくつかのKotlin関連モジュールがリストされています。tools.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の 自動設定(auto-configuration)、コンポーネントスキャン が有効になり、"アプリケーションクラス"上で追加の設定を定義できるようになります。
可変長引数 – args: Array<String>
runApplication() 関数の宣言を確認すると、関数のパラメータに vararg 修飾子 が付いていることがわかります(vararg args: String)。これは、関数に可変個のString引数を渡せることを意味します。
スプレッド演算子 – (*args)
args は、文字列の配列として宣言された main() 関数のパラメータです。文字列の配列があり、その内容を関数に渡したい場合は、スプレッド演算子(配列の前にアスタリスク * を付ける)を使用します。
コントローラーの作成
アプリケーションを実行する準備はできていますが、先にロジックを更新しましょう。
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コントローラーの関数をマークします。
@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アプリケーションを実行する準備が整いました。
DemoApplication.ktファイルで、main()メソッドの横にあるガターの緑色の Run アイコンをクリックします。
ターミナルで
./gradlew bootRunコマンドを実行することもできます。これにより、コンピュータ上でローカルサーバーが起動します。
アプリケーションが起動したら、次のURLを開きます。
texthttp://localhost:8080?name=Johnレスポンスとして "Hello, John!" と表示されるはずです。

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