N-LAB

Spring Boot 3 × Java 21にGradleでCheckStyleを適用する

投稿日: 2023年12月31日


目標

  1. GradleのTasks > otherからcheckstyleMainの実行
  2. 問題ツールウィンドウでCheckstyleの解析結果確認


条件

・Spring Boot: 3.2
・Java: 21 (amazon corretto 21)
・Gradle: 8.5
・Checkstyle: 10.12.5
・IntelliJ IDEA: 2023.3.2
※ IntelliJ IDEAはバージョン2023.3よりJava 21がサポートされたため、2023.3以降のバージョンをインストールしてください。

目次

  1. IntelliJ IDEAのJava 21初期設定
  2. Checkstyleプラグインのインストール
  3. Gradleの設定
  4. Checkstyleの実行


IntelliJ IDEAのJava 21初期設定

1. メニューバーのIntelliJ IDEAから設定をクリックします。左サイドメニューからビルド、実行、デプロイ > コンパイラー > Java コンパイラーをクリックします。プロジェクトのバイトコードバージョンを21に設定して適用をクリックします。
java compiler configure
2. 左サイドメニューからビルド、実行、デプロイ > ビルドツール > Gradleをクリックします。Gradle JVMにインストールしているJavaのバージョン (Java 21)を指定して適用をクリックします。OKをクリックします。
gradle configure
※ 本記事ではamazon corretto 21を利用しています。

3. メニューバーのファイルからプロジェクト構造をクリックします。左サイドメニューからプロジェクト設定 > プロジェクトをクリックします。SDKにインストールしているJavaのバージョン (Java 21)を指定します。言語レベルに「21-レコードパターン、switchのパターンマッチング」を設定して適用をクリックします。OKをクリックします。
project configure

Checkstyleプラグインのインストール


1. 以下のURLよりコーディング規約が記載されたxmlをダウンロードして任意の場所に保存します。自作したxmlがあればそちらで代用可能です。
https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml

2. プロジェクトのルート配下にconfigディレクトリを新規作成します。configディレクトリの中にcheckstyleディレクトリを新規作成します。checkstyleディレクトリの中に先ほどダウンロードしたxmlファイルを配置します

<root>
└── src
└── config
    └── checkstyle           
        └── checkstyle.xml

※ 本記事ではダウンロードしたxmlをcheckstyle.xmlにファイル名を変更しています。

3. メニューバーのIntelliJ IDEAから設定をクリックします。左サイドメニューからプラグインをクリックします。CheckStyle-IDEAをインストールします。
install plugin
4. IntelliJ IDEAを再起動します。メニューバーのIntelliJ IDEAから設定をクリックします。左サイドメニューからツール > Checkstyleをクリックします。Checkstyle versionに10.12.5を設定します。Configuration File欄にある+をクリックします。
add xml
5. Descriptionに任意の名前を設定します。ラジオボタンのUse a local Checkstyle fileを選択します。Browseボタンをクリックし、手順2で配置したxml (root/config/checkstyle/checkstyle.xml) を指定します。Nextをクリックします。

6. Nextをクリックします。
go to next step
7. Finishをクリックします。
rules file has been validated
8. Configuration File欄に3行目が追加されているので、チェックをつけてOKをクリックします。
confirm configuration file path

Gradleの設定

1. build.gradleのpluginsに以下を追加して保存します。

plugins {
    id 'checkstyle'
}


2. IntelliJ IDEAを再起動します。GradleのTasksのotherにcheckstyleMainとcheckstyleTestが表示されていることを確認します
add gradle task
※この時点でcheckstyleMainを実行すると以下のエラーが出るので次の手順3を実施します。

Execution failed for task ':checkstyleMain'.
> A failure occurred while executing org.gradle.api.plugins.quality.internal.CheckstyleAction
   > An unexpected error occurred configuring and executing Checkstyle.
      > Unable to create Root Module: config {/project_dir/config/checkstyle/checkstyle.xml}, classpath {null}.


3. build.gradleに以下を追加して保存します。

checkstyle {
    configFile = file("${rootProject.projectDir}/config/checkstyle/checkstyle.xml")
    toolVersion = "10.12.5"
    sourceSets = [project.sourceSets.main]
}


Checkstyleの実行

1. プロジェクトの任意の場所にJavaファイル (Test.java) を作成して以下の内容で保存します。

public class Test {
}


2. GradleのTasks > otherからcheckstyleMainを実行します。以下のようにTest.javaに対する解析が実行されWarnが表示されていることを確認します。

 'checkstyleMain' を実行中...

> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes

> Task :checkstyleMain
Checkstyle rule violations were found. See the report at: file:///your_project_dir/build/reports/checkstyle/main.html
Checkstyle files with violations: 1
Checkstyle violations by severity: [warning:1]

BUILD SUCCESSFUL in 2s
3 actionable tasks: 2 executed, 1 up-to-date
[ant:checkstyle] [WARN] 
/foo/src/main/java/bar/Test.java:1:1: Javadoc コメントがありません。 [MissingJavadocType]
'checkstyleMain' の実行を完了しました。


3. 問題ツールウィンドウにも同様の内容が表示されていることを確認します。
checkstyle warning exist
4. Test.javaを以下の内容で修正して、保存します。

/**
 * Test class.
 */
public class Test {
}


5. GradleのTasks > otherからcheckstyleMainを実行します。解析結果として、エラーや警告が何も表示されていないことを確認します。

'checkstyleMain' を実行中...

Starting Gradle Daemon...
Gradle Daemon started in 591 ms
> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :checkstyleMain

BUILD SUCCESSFUL in 5s
3 actionable tasks: 2 executed, 1 up-to-date
'checkstyleMain' の実行を完了しました。


6. 問題ツールウィンドウからも先ほど検出されたWarnの内容が表示されていないことを確認します。
checkstyle warning disappeared

以上で全ての手順は完了になります