Ktlint
KtlintはKotlin用のlinter。
本記事ではビルド設定(Gradle)に組み込んで使用する。
app/build.gradleに設定を追加する
configurations {
ktlint
}
dependencies {
...
// バージョンは本家を確認すること https://github.com/pinterest/ktlint
ktlint "com.pinterest:ktlint:0.48.2"
}
// lintタスクを追加
task ktlint(type: JavaExec, group: "verification") {
description = "Check Kotlin code style."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "src/**/*.kt"
}
check.dependsOn ktlint
// フォーマットタスクを追加
task ktlintFormat(type: JavaExec, group: "formatting") {
description = "Fix Kotlin code style deviations."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "-F", "src/**/*.kt"
}
args
に指定しているパスはプロジェクトの環境に合わせる。
実行
IntelliJ IDEA・Android Studioで実行
build.gradleを開くとtask ktlint
、task ktlintFormat
の行の左に再生ボタン▶が表示されているのでクリックする。
コマンドで実行
以下のコマンドでコードチェックを実行する。
$ ./gradlew ktlint
lint定義に従って自動修正するには以下のコマンドを実行する。
$ ./gradlew ktFormat
Github Actionsでプルリクエストやマージ時にKtlintを実行する
Githubでプルリクエスト作成時やmasterへのマージ時にチェックするには以下のようにGithub Actionsで./gradlew ktlint
を実行すればよい。
name: Ktlint
on:
pull_request:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out
uses: actions/checkout@v3
- name: Run ktlint
run: ./gradlew ktlint
.editorconfig で特定ルールを disable にする
ktlintでチェックされるルールのうち、プロジェクトで不要なルールは.editorconfig
で無効化できる。
プロジェクトのルートディレクトリに.editorconfig
を作成し以下のように記述する。
[*.{kt,kts}]
ktlint_standard_ルール名 = disabled
ktlintの標準ルールを無視するにはktlint_standard_
に続いてルール名を書く。
ルール名はコマンドラインで失敗させると確認できる。
$ ./gradlew ktlint
...
> Task :app:ktlint FAILED
/path/to/project/FirstFragment.kt:23:10: Missing trailing comma before ")" (trailing-comma-on-call-site)
Summary error count (descending) by rule:
trailing-comma-on-call-site: 1
FAILURE: Build failed with an exception.
...
上記の場合は(trailing-comma-on-call-site)
とあるのでktlint_standard_
をつけてktlint_standard_trailing-comma-on-call-site
となる。
[*.{kt,kts}]
ktlint_standard_trailing-comma-on-call-site = disabled
.editorconfig
を作成して再びktlintを実行すると上記で検出された違反は無視されて成功する。
$ ./gradlew ktlint
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
See https://docs.gradle.org/7.3.3/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 3s
1 actionable task: 1 executed
標準ルールの一覧と名前は以下のサイトから確認できる。
≫ Ktlint Standard rules
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/