Kotlin SpringBoot -- Part 00 アプリを作成して起動する
Tags: kotlin, springboot
Published: 2022-08-07 22:29:00


## why

Kotlin x Spring で Clean Architecture で REST API を作成して、テストを書きたくなった

https://qiita.com/kawasaki_dev/items/1a188878eb6928880256

これを参考にやっていく。

--- 

## ゴール

* `/persons` の CRUD API がクリーンなアーキテクチャで設計されている
  * 全て package が分けられている
* Domain, Gateway, Usecase, これらに Unit テストがある
* API E2E, EndtoEnd テストが書かれている
* postgres DB に接続されている

---

## Spring Initializer で Web でアプリ作成

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0opzg7efkcqvqx53x0ux.png)
 

https://start.spring.io/

このサイトで雛形が作れるらしい。

https://qiita.com/kawasaki_dev/items/1a188878eb6928880256#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E9%9B%9B%E5%BD%A2%E3%82%92%E4%BD%9C%E6%88%90

記事の通りに

springboot という artifact 名にして

言語を Kotlin にして

Project ビルダー？は Groovey を選択。

Spring Web ( MVC も REST も作れるらしい基礎? )
Thymleaf ( HTML を出すためのテンプレートエンジン )
Spring Data JPA ( SQL ラッパー )
H2 Database ( MySQL とかを簡単に作れるやつかな？ )

これらの依存性を追加

Java は記事の 11 から 17 にする。
Springboot は 2.7.2 にした。

https://start.spring.io/#!type=gradle-project&language=kotlin&platformVersion=2.7.2&packaging=jar&jvmVersion=17&groupId=com.example&artifactId=springboot&name=springboot&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.springboot&dependencies=web,thymeleaf,data-jpa,h2

この URL を叩けば同じ構成で作成できる。
クエリにバージョンなどが入っているようだ。

Genarate ボタンを押すと
zip になって DL できる。
Ktor と同じみたい。

---

## IntelliJ で開いてプロジェクト起動

現在なにか開いていたら Close Project してから
新たに何も開いていない状態から開く。
そうしないと

 ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4mhirc9kzsu4uzdccxm.png)
 
モジュールのなにも読み込まれない状態になってしまう。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nqnr5tv8x479q4natx1e.png)

全て閉じて見覚えのある JetBrains の画面から開くと
無事に読み込まれて
Spring が起動できた。

```kotlin
fun main(args: Array<String>) {
	runApplication<SpringbootApplication>(*args)
	println("kt")
}
```

> 
2022-08-08 07:22:40.110  INFO 1036058 --- [           main] c.e.springboot.SpringbootApplicationKt   : Started SpringbootApplicationKt in 2.191 seconds (JVM running for 2.55)
kt

print を挟めばちゃんとプリントされる。

---

## gradle の設定ファイルで依存ライブラリをみる

https://spring.pleiades.io/guides/tutorials/spring-boot-kotlin/

build.gradle.kts をみると
依存しているライブラリがわかる

```kotlin
plugins {
	id("org.springframework.boot") version "2.7.2"
	id("io.spring.dependency-management") version "1.0.12.RELEASE"
	kotlin("jvm") version "1.6.21"
	kotlin("plugin.spring") version "1.6.21"
	kotlin("plugin.jpa") version "1.6.21"
}
```

plugins をみると基本的なライブラリがわかる

* Spring Boot 2.7.2
* JVM, spring のプラグイン, JPA, これらの 1.6.21

基礎ライブラリとしてこれらを使っていることが書いてある。

```kotlin
dependencies {
	implementation("org.springframework.boot:spring-boot-starter-data-jpa")
	implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	runtimeOnly("com.h2database:h2")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
}
```

* JPA
* ThymeLeaf
* Web
* H2 Database

これらが拡張ライブラリとして入っていることが確認できた。

JPA, Thymleaf, H2, これらのバージョンはここでは見れないらしい。

---

## まとめ

Kotlin で Springboot のアプリを作るには
Spring Initializer で作成&DL して
ローカルで解凍して
何も開いていない IntelliJ で開く
これだけで作成できる。

---

## 今後

https://spring.pleiades.io/guides/tutorials/spring-boot-kotlin/

Kotlin Spring のガイドラインを読む

https://qiita.com/kawasaki_dev/items/1a188878eb6928880256#%E5%8F%82%E8%80%83%E6%83%85%E5%A0%B1

MVC での CRUD を試してみる

REST で CRUD を試してみる

テストを Gauge/Selenide に変更してみる