はじめに
どうも、ikasumi1503です。KotlinのリンターシリーズのDetekt編です。Kotlin開発においてktlintと一緒に使っていきたいツールがDetektではないでしょうか。そこで、本記事ではDetektの簡単な設定方法をまとめていこうと思います。detektでktlintのようにフォーマットをする機能については載せていませんので、ご確認の上お進みください。
導入方法
導入方法を次のステップでまとめていきたいと思います。
- Detektの手動リント
- Detekt Pluginで自動リントをかける
- Github Actions連携
1. Detektの手動リント
ここの部分は公式を参考にやってみます。
プロジェクトのbuild.gradle.ktsを開きましょう。見つからないという方はshiftキーを2回押してなんでも検索によってこのファイルを見つけ出しましょう。
// プロジェクト構成:
your-project/
├─ build.gradle.kts ← ×
├─ settings.gradle.kts
├─ app/
│ └─ build.gradle.kts ← 〇ここです
見つけたら、早速プラグインを入れます。
build.gradle.kts
plugins {
id("io.gitlab.arturbosch.detekt") version("1.23.8")
}
そして、settings.gradle.ktsに次のものがなければ入れていきましょう。私の場合最初からあったのですが、念のため入れていきます。
settings.gradle.kts
repositories {
mavenCentral()
}
maven Central という場所からライブラリを探すよ、という保管先の指定らしいです。
再び戻り、build.gradle.ktsでdetektのふるまいの設定をしていきます。
build.gradle.kts
import io.gitlab.arturbosch.detekt.Detekt
detekt {
toolVersion = "1.23.8"
config.setFrom(rootProject.file("config/detekt/detekt.yml")) // リンタールールの設定ファイル
buildUponDefaultConfig = true // trueで自分で書いたルール以外はデフォルト値を適用
ignoreFailures = true // エラー時ビルドを落とさない
}
// detektの検出エラーの出力方法の設定
// 必要な形式をtrueにしてください。
tasks.withType<Detekt>().configureEach {
jvmTarget = "17" // 筆者の場合は23が指定されてこれがないと動かなかった。根本原因不明です。
reports {
// detektの検出エラーの出力方法の設定
// 必要な形式をtrueにしてください。
xml.required.set(true) // xml形式
html.required.set(true) // html形式
sarif.required.set(true) // sarif形式
md.required.set(true) // md形式
}
}
dependencies {
// これがないとconfig/detekt/detekt.ymlでformat関連の設定してるのにプラグイン不足していると警告が出るので追加する
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.1")
}
これで右上に出ているSync nowをクリックすると、設定が適用されます。次に./gradlew detektGenerateConfig
コマンドを入力するとapp内にconfig/detekt/detekt.yml
が作成されます。このファイルに自分のプロジェクト用のdetektルールを設定していきます。ルール内容については多すぎるため、「こんな設定があればいいな」という都度公式を参照されることを勧めます。
以上の設定が終わったのちに./gradlew detekt
を実行してapp/build/reports/detekt
内にレポートファイルが作成されれば完了です。
2. Detekt Pluginで自動リントをかける
Android StudioのPluginsを開きましょう。
左上のメニュー > File > Settings > Plugins
でDetektと検索するとDetektのプラグインが出てくるのでこちらをインストールしましょう。
そのあとSettings > Tools
から設定画面が開かれるのでこちらに設定をいれていきます。
- Enable background analysis
オンにするとリアルタイムで警告が表示される。
Plugin Option
- Treat detekt findings as errors
Detekt の警告を ビルドエラーとして扱う。 - Redirect detekt output and error channels to IDEs log file
Detekt の出力(ログなど)を IDE のログファイルに書き出す。 - Enable detekt's debug mode
Detekt の 詳細なデバッグ出力をログに記録
Rules
- Build rules upon the default configuration
Detekt の デフォルトルールを有効にした上で、設定ファイルで上書きする方式。 - Enable formatting (ktlint) rules
ktlintベースによるチェックを有効化。スペースや改行などの警告が出るが、自動整形はされない。 - Enable all rules (not recommended)
Detektのすべてのルールを有効にする(非推奨:ノイズが多くなる)。
Files
- Configuration file(s)
Detekt に読み込ませる 設定ファイル(detekt.ymlなど)を追加する場所。
設定が完了したらApplyまたはOKを押しましょう。
編集中にDetektのwarningやerrorが出ていれば完了です。
3. Github Actions連携
PR時にDetektで検知されるとエラー内容をまとめたファイルを作成するようにします。
プロジェクトの.github/workflows
にymlファイルを入れていきます。
ファイル内容は長いので次のレポジトリ内に入れています。あくまで例としてAIに吐き出させたものを使っています。一応私の環境では動作確認済みです。
https://github.com/ikasumi1503/KtlintSample
detekt_example.yml
... プルリクエストしたら、Detektを実行してワークフローのコンソール内で警告内容をXML形式で吐き出しています。
detekt_reviewdog_example.yml
... 一応reviewdogバージョンも出しておきます。プルリクエストしたら警告内容をPRコメントにばらまきます。publicのレポジトリにしかコメントできません。
以上のファイルがmainブランチにないと機能しない点にご注意ください。
おわりに
以上がDetektの簡単な設定方法です。ぜひ試してみてください。