🐥
Androidプロジェクトにdetektを導入する
はじめに
本記事ではGroovyで書いていきます。
Android Studio 4.2 でプロジェクトを作ったので、初期状態でGradleやKotlinバージョンなどがdetekt導入の必要要件を満たしていました。
上記要件を満たしていない場合は、それぞれバージョンを上げる必要があります。
プロジェクトルートにdetektを追加
buildscript {
...
dependencies {
...
// detekt
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.17.1"
...
}
}
対象のモジュールにdetektを追加
plugins {
...
id 'io.gitlab.arturbosch.detekt'
...
}
なお、DSLを使わない書き方は以下。
...
apply plugin: 'io.gitlab.arturbosch.detekt'
...
試しにdetektで検査をしてみる
プロジェクトルートにて実行。
$ ./gradlew detekt
すると、下記のように出力された。ビルド失敗し、エラーの箇所と内容などが具体的に表示された。
$ ./gradlew detekt
> Task :app:detekt FAILED
naming - 5min debt
PackageNaming - [MainActivity.kt] at /{your_path}/adding_detekt_sample/app/src/main/java/com/example/adding_detekt_sample/MainActivity.kt:1:1
style - 10min debt
NewLineAtEndOfFile - [MainActivity.kt] at /{your_path}/adding_detekt_sample/app/src/main/java/com/example/adding_detekt_sample/MainActivity.kt:1:1
NewLineAtEndOfFile - [ExampleUnitTest.kt] at /{your_path}/adding_detekt_sample/app/src/test/java/com/example/adding_detekt_sample/ExampleUnitTest.kt:1:1
Overall debt: 15min
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:detekt'.
> Build failed with 3 weighted issues.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 7s
1 actionable task: 1 executed
detekt実行結果の意味
上記お試しで表示されたdetektに関する出力の意味は以下。
内容 | 意味 |
---|---|
naming - 5min debt | ネーミングの検査項目で問題があった。修正に5分要する。 |
PackageNaming - 〜〜 | 〜〜のファイルの○行×列にPackageNamingの問題があった。 |
Overall debt: 15min | 全ての負債を修正するのに15分要する。 |
> Build failed with 3 weighted issues. | ビルド失敗し、エラーの合計比重は3だった。 |
検査項目設定のファイルを追加
下記コマンドを実行。
$ ./gradlew detektGenerateConfig
すると下記のパスに、各検査項目を設定できるymlファイルが追加される。
<project-root>/config/detekt/detekt.yml
この時ファイルに書かれている設定がdetektのデフォルト設定となる。
ymlファイルの中身はこんな感じ。
build:
maxIssues: 0
excludeCorrectable: false
weights:
# complexity: 2
# LongParameterList: 1
# style: 1
# comments: 1
config:
validation: true
warningsAsErrors: false
# when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]'
excludes: ''
...
先ほど試しに行った検査は、上記ymlの設定、つまりデフォルト設定で実行された。
このymlをいじっていくと、各々の好きな内容でコード解析(検査)できる。
終わりに
実際にmaxIssues
や各検査項目を設定していき、情報を追記する予定です。
さらに最終的に、CIで自動的に検査を回す方法まで書けたらいいなと思っています。
Discussion