2026年5月23日土曜日

SpringBoot のプロジェクトにフォーマッターとリンターを導入する

SpringBoot のプロジェクトにフォーマッターとリンターを導入する

概要

フォーマッタは spotless でリンターは checkstyle + spotless を使います
googleJavaFormat は Java26 では使えないので eclipse を使います

環境

  • macOS 26.4.1
  • openjdk 26.0.1
  • SpringBoot 4.0.6
  • gradle 9.5.1
  • VSCode 1.121.0
  • MySQL 9.6.0

build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '4.0.6'
	id 'io.spring.dependency-management' version '1.1.7'

	id 'checkstyle'
	id 'com.diffplug.spotless' version '6.25.0'
}

checkstyle {
	toolVersion = '10.12.0'
}

spotless {
	java {
		eclipse()
		target 'src/**/*.java'
	}
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(26)
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-webmvc'
	developmentOnly 'org.springframework.boot:spring-boot-docker-compose'
	runtimeOnly 'com.mysql:mysql-connector-j'
	testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
	testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
	testImplementation 'org.springframework.boot:spring-boot-testcontainers'
	testImplementation 'org.testcontainers:testcontainers-junit-jupiter'
	testImplementation 'org.testcontainers:testcontainers-mysql'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
	useJUnitPlatform()
}

追記しているのは以下の部分だけです

plugins {
	id 'java'
	id 'org.springframework.boot' version '4.0.6'
	id 'io.spring.dependency-management' version '1.1.7'

	id 'checkstyle'
	id 'com.diffplug.spotless' version '6.25.0'
}

checkstyle {
	toolVersion = '10.12.0'
}

spotless {
	java {
		eclipse()
		target 'src/**/*.java'
	}
}

config/checkstyle/checkstyle.xml

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
  "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
  "https://checkstyle.org/dtds/configuration_1_3.dtd">

<module name="Checker">
  <module name="TreeWalker">
    <module name="UnusedImports"/>
  </module>
</module>

実行

spotless はフォーマットしてリントもします

  • ./gradlew spotlessApply
  • ./gradlew spotlessCheck

最後の stylecheck でもリントします

  • ./gradlew checkstyleMain

vscode 側の設定

保存時にフォーマットしたい場合には settings.json に以下を追記します

{
  "editor.formatOnSave": true
}

全部一気に lint する場合

build.gradle に以下を追記します

tasks.register('format') {
	dependsOn 'spotlessApply'
}

tasks.register('lint') {
	dependsOn 'spotlessCheck', 'checkstyleMain'
}
  • ./gradlew format
  • ./gradlew lint

最後に

SpringBoot のプロジェクトにフォーマッタとリンタを導入してみました

VSCode で Extention Pack for Java を使っている場合は LSP がフォーマットしてくれますがそれはあくまでも VSCode 側のフォーマッタなので別途 CI などでチェックする場合には spotless などを使いましょう

0 件のコメント:

コメントを投稿