Kotlin + Gradle 環境に Ktlint を簡単に導入する方法

# Ktlint とは
Ktlint とは、Kotlin コードの静的解析および自動フォーマットツールです。
Kotlin のコードスタイルガイドラインに基づいて、コードのフォーマットや品質をチェックし、一貫性のあるコードを維持するために使います。
CI/CD パイプラインに組み込んで、コードがリポジトリにプッシュされる前にルール違反を検出し、自動修正することも可能です。

# 前提条件
**[Spring Initializr](https://start.spring.io/) で下記のように設定したプロジェクトがあることを前提とします**
※ 2025-03 現在の情報を元に記載しています。
```
Project: Gradle - Kotlin
Language: Kotlin
Spring Boot: 3.4.3
Packaging: Jar
Java: 21
```
上記以外はデフォルトのままで OK。

# ktlint の導入
### Gradle プラグインの選定
[Ktlint > Installation > Integrations > Gradle integration](https://pinterest.github.io/ktlint/latest/install/integrations/#gradle-integration) を参照すると、いくつかのプラグインが紹介されていますが、今回は **`jlleitschuh/ktlint-gradle`** を使用します。
選定理由は以下のとおりです。
- Kotlin に特化しており、シンプルな構成で導入しやすい
- Gradle の公式プラグインレジストリに登録されているため、信頼性が高い
- 定期的にメンテナンスされており、最新の Gradle や Kotlin に対応している


### build.gradle.kts に下記の設定を追加する
```kotlin
plugins {
    id("org.jlleitschuh.gradle.ktlint") version "12.2.0"   // 最新バージョンを指定
}

ktlint {
    version.set("1.5.0")   // 最新バージョンを指定
    verbose.set(true)

    reporters {
        reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE)
    }
}
```

#### プラグインのバージョンを指定する
最新バージョンは、[github.com/jlleitschuh/ktlint-gradle](https://github.com/jlleitschuh/ktlint-gradle) から確認できます。

#### Ktlint のバージョンを指定する
最新バージョンは、[pinterest.github.io/ktlint](https://pinterest.github.io/ktlint/latest/) から確認できます。

#### 設定ごとのデフォルト値
詳細は[KtlintExtension](https://github.com/JLLeitschuh/ktlint-gradle/blob/main/plugin/src/main/kotlin/org/jlleitschuh/gradle/ktlint/KtlintExtension.kt) から確認できます。  

| 設定名             | デフォルト値 | 説明                        |
|-----------------| --- |---------------------------|
| version         | 1.0.1 | ktlint のバージョン             |
| relative      | false | レポートに相対パスを有効にするかどうか       |
| verbose         | false | ktlint の実行結果を詳細に表示するかどうか  |
| debug           | false | デバッグモードを有効にするかどうか         |
| android         | false | Android プロジェクトかどうか        |
| outputToConsole | true | ktlint の結果をコンソールに出力するかどうか |
| coloredOutput | true | コンソール出力にカラーを有効にするかどうか     |
| outputColorName | AUTO | ターミナル出力する色の指定             |
| ignoreFailures | false | 警告があってもビルドを続行するかどうか       |
| enableExperimentalRules | false | 実験的なルールを有効にするかどうか         |
| reporters | [ReporterType.PLAIN] | 出力レポーターの形式を指定する         |  

[ReporterType.PLAIN]： PLAIN（標準テキスト）形式
(人間が読みやすい形式 で違反を表示)
[ReporterType.CHECKSTYLE]： Checkstyle 形式
(CI/CD パイプラインやツール（SonarQube, Jenkins など）で解析しやすい)

※ 2025-03 現在の情報を元に記載しています。最新情報は各公式ドキュメントを参照してください。

### ktlint の実行
Gradle タスクを実行することで、ktlint が実行されます。
```shell
./gradlew ktlintFormat   # コードを自動フォーマット
./gradlew ktlintCheck   # コードのスタイルチェック
```

# おわりに
これまで Ktlint の導入方法が分からず後回しにしていましたが、今回しっかりと向き合い、無事に導入することができました。
一度設定してしまえば、次のプロジェクトまで触れる機会が少ないため、忘れないうちに記事としてまとめました。
同じように Ktlint の導入で悩んでいる方の参考になれば幸いです。

# 参考
- [Ktlint](https://ktlint.github.io/)
- [Ktlint > Gradle integration](https://pinterest.github.io/ktlint/latest/install/integrations/#gradle-integration)
- [github.com/jlleitschuh/ktlint-gradle](https://github.com/jlleitschuh/ktlint-gradle)
- [KtlintExtension](https://github.com/JLLeitschuh/ktlint-gradle/blob/main/plugin/src/main/kotlin/org/jlleitschuh/gradle/ktlint/KtlintExtension.kt)