1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Detektの簡単な設定をまとめてみた

Last updated at Posted at 2025-05-24

はじめに

どうも、ikasumi1503です。KotlinのリンターシリーズのDetekt編です。Kotlin開発においてktlintと一緒に使っていきたいツールがDetektではないでしょうか。そこで、本記事ではDetektの簡単な設定方法をまとめていこうと思います。detektでktlintのようにフォーマットをする機能については載せていませんので、ご確認の上お進みください。

導入方法

導入方法を次のステップでまとめていきたいと思います。

  1. Detektの手動リント
  2. Detekt Pluginで自動リントをかける
  3. 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のプラグインが出てくるのでこちらをインストールしましょう。
image.png

そのあとSettings > Tools から設定画面が開かれるのでこちらに設定をいれていきます。
image.png

  • 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が出ていれば完了です。

image.png

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の簡単な設定方法です。ぜひ試してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?