6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ktlint を導入した話

Last updated at Posted at 2021-11-27

はじめに

今更ながら ktlint を導入する機会があったので、その手順などをまとめました。

参考:ktlint とは?

ざっくり、Kotlin Style Guide を元にコードスタイルのチェックをしてくれたり、lint で検出した部分にフォーマットをかけてくれたりしてくれる Kotlin 用の静的コード解析ツールになります。

公式ページ

ktlint HP

サンプルソース

導入

1. 準備

Android Studio: 3.4.1
ktlint: 0.4.0

2. 導入

(ktlint の README のとおり)Gradle へ依存関係の追加と、ktlint を実行するためのタスクを追加します。

app/build.gradle

configurations {
    ktlint
}

dependencies {
    ktlint "com.pinterest:ktlint:0.40.0"
}

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"
}

プロジェクトのルートディレクトリで

$ ./gradlew ktlint

を実行すると結果が出力されます。また、

$ ./gradlew ktlintFormat

を実行すると、lint で検出されたコードにフォーマットをかけてくれます。

Option #1

チェックにひっかかっても途中で終了させないようにするために ignoreExitValue true を設定します。

task ktlint(type: JavaExec, group: "verification") {
    ignoreExitValue true
}

task ktlintFormat(type: JavaExec, group: "formatting") {
    ignoreExitValue true
}

Option #2

ビルド時にフォーマットをしたいので以下も追加します。

app/build.gradle

tasks.whenTaskAdded { task ->
    task.dependsOn ktlintFormat
}

これにより毎回コマンドを実行しなくても、ビルド時にフォーマットしてくれるようになります。コミット後のフォーマットの修正漏れの予防にもなります。

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?