はじめに
この記事は、webアプリ開発のバックエンドを構築するときに、
spring initializr の Dependencies に何を入れて始めればよいかわからない
私の悩みを解決するものです。
前提条件
やりたいこと
- TDDをしながら、webアプリ開発を行う
- spring initializr を使ってバックエンドを構築する
技術スタック
- Kotlin
- Spring Boot
- PostgreSQL
spring initializr の Dependencies に何を入れる?
色んなプロダクトの build.gradle.kts の dependencies を眺めてみて、だいたいここら辺かなと・・・。
Spring Web
Build web, including RESTful, applications using Spring MVC.
Uses Apache Tomcat as the default embedded container.
(google翻訳)
Spring MVC を使用して、RESTful を含む Web アプリケーションを構築します。
Apache Tomcat をデフォルトの組み込みコンテナとして使用します。
Spring Data JPA
Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate.
(google翻訳)
Spring Data と Hibernate を使用した Java Persistence API で SQL ストアにデータを永続化します。
PostgreSQL Driver
A JDBC and R2DBC driver that allows Java programs to connect to a PostgreSQL database using standard, database independent Java code.
(google翻訳)
Java プログラムが標準のデータベースに依存しない Java コードを使用して PostgreSQL データベースに接続できるようにする JDBC および R2DBC ドライバー。
H2 Database
Provides a fast in-memory database that supports JDBC API and R2DBC access, with a small (2mb) footprint.
Supports embedded and server modes as well as a browser based console application.
(google翻訳)
JDBC API と R2DBC アクセスをサポートする高速なインメモリ データベースを、小さい (2MB) フットプリントで提供します。
埋め込みモードとサーバー モード、およびブラウザ ベースのコンソール アプリケーションをサポートします。
Spring Boot DevTools
Provides fast application restarts, LiveReload, and configurations for enhanced development experience.
(google翻訳)
アプリケーションの高速な再起動、LiveReload、および開発エクスペリエンスを強化するための構成を提供します。
dependencies に何が入るのか?
build.gradle.kts の dependencies に何が入るのか検証してみたいと思います。
spring initializr の Dependencies 以外の設定
- Project: Gradle - Kotlin
- Language: Kotlin
- Spring Boot: 3.2.2
- Project Metadata
- Packaging: Jar
- Java: 17
a. 何も入れないとき
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
b. Spring Web のみを入れたとき(a.と比較)
dependencies {
- implementation("org.springframework.boot:spring-boot-starter")
+ implementation("org.springframework.boot:spring-boot-starter-web")
+ implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
c. Spring Data JPA のみを入れたとき(a.と比較)
dependencies {
- implementation("org.springframework.boot:spring-boot-starter")
+ implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
d. PostgreSQL Driver のみを入れたとき(a.と比較)
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
+ runtimeOnly("org.postgresql:postgresql")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
e. H2 Database のみを入れたとき(a.と比較)
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
+ runtimeOnly("com.h2database:h2")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
f. Spring Boot DevTools(a.と比較)
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
+ developmentOnly("org.springframework.boot:spring-boot-devtools")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
上記の検証でわかったこと
1. spring initializr の Dependencies に何も選択していなくても、
spring-boot-starter
、kotlin-reflect
、spring-boot-starter-test
が入っている
2. Spring Web
と Spring Data JPA
を入れたときに、
spring-boot-starter
は入らない
[理由]
spring-boot-starter-web
と spring-boot-starter-data-jpa
には、spring-boot-starter
の機能を含んでいるから
ふ〜ん。。。
たぶんあとから追加でほしくなる
色んなプロダクトを眺めていたときに、よく使われていそうだなと感じたもの
MockK
Kotlin用のモックライブラリ
Flyway
DBのスキーマやデータのバージョン管理を行うツール
結論
spring initializr の Dependencies には
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- H2 Database
- Spring Boot DevTools
を入れる!
テストを書いててモックが必要になったら MockK
を、
DBのバージョン管理がしたくなったら Flyway
を入れて開発を進めたいと思います〜!
さいごに
ここまでやる必要あったのか??と思いつつも、ずっと気になっていたことが検証できてスッキリしました🥳