Yasu Log
Android

【Android】コードスタイルをチェックする ktlint の導入方法

この記事でわかること

  • ktlint の導入・実行方法
  • Android Studio のコードスタイル設定方法
  • 自動で ktlint を実行する方法

ktlint について

ktlint は、Kotlinkotlinlang.org)と AndroidAndroid Kotlin Style Guide)で推奨されているコーディング規約を元に、コードスタイルをチェックするライブラリ。

以下のような、規約通りになっていないコードを教えてくれる。

Kotlin style guide より引用(https://developer.android.com/kotlin/style-guide)
if (string.isEmpty())
    return  // WRONG!

if (string.isEmpty()) {
    return  // Okay
}

if (string.isEmpty()) return  // WRONG
else doLotsOfProcessingOn(string, otherParametersHere)

if (string.isEmpty()) {
    return  // Okay
} else {
    doLotsOfProcessingOn(string, otherParametersHere)
}

ktlint の導入

app/build.gradle に以下を追加する。

// 追加
configurations {
  ktlint
}

// 追加 : コードスタイルチェック
task ktlint(type: JavaExec, group: "verification") {
  description = "Check Kotlin code style."
  mainClass.set("com.pinterest.ktlint.Main")
  classpath = configurations.ktlint
  args "src/**/*.kt", "--color", "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
}

// 追加
check.dependsOn ktlint

// 追加 : コードフォーマット
task ktlintFormat(type: JavaExec, group: "formatting") {
  description = "Fix Kotlin code style deviations."
  mainClass.set("com.pinterest.ktlint.Main")
  classpath = configurations.ktlint
  args "-F", "src/**/*.kt"
}

dependencies {
  // 追加
  ktlint "com.pinterest:ktlint:0.43.1"
}

ktlint の実行

app/build.gradle のタスク、または、./gradlew コマンドで ktlint を実行する。

タスクで実行

左側の ▶︎ を選択すると実行できる。

コマンドで実行

$ ./gradlew ktlint
$ ./gradlew ktlintFormat

 

Android Studio でコードスタイルを設定する

ktlintREADME.md で、コーディング規約に沿ったコードスタイルを設定する方法が紹介されているので、設定すると ktlint のチェックに引っかからないようになる。

自動で ktlint を実行する方法

毎回手動で ktlint を実行するのは手間だったり、忘れる可能性があるので、

  • ローカルでコミットしたとき
  • Githubpushpull request などのイベントが発生したとき

に、ktlint が実行されるように設定してみたいと思う。

ローカルでコミットしたとき

ローカルでコミットしたとき ktlint を実行するには、コミット時にスクリプトを実行できる pre-commit を使用する。

以下のコマンドを実行すると、[project name]/.git/hooks/pre-commit ファイルが作成される。

コミット時に ktlint が実行されて、ktlint に引っかかった状態だとコミットができなくなる。

# ktlintがインストールされているかチェック。インストールされてなければ、brew install ktlint
$ ktlint --version
0.40.0

$ ktlint --install-git-pre-commit-hook

 

すでに pre-commit ファイルが存在する場合は、以下を pre-commit ファイルに追記する。

git diff --name-only --cached --relative | grep '\.kt[s"]\?$' | xargs ktlint --relative .
if [ $? -ne 0 ]; then exit 1; fi

 

pre-commit ファイルが不要になったときは、rm .git/hooks/pre-commit でファイルを削除するか、上記の pre-commit のスクリプトを削除する。

Github でイベントが発生したとき

[project name]/.github/workflows/ に、Github Action を実行する YAML ファイルを作成する。

今回は ktlint.yaml というファイル名で作成する。

ktlint.yaml は、main ブランチで pushpull request のイベントが発生したときに実行される。workflow_dispatch で、手動での実行も可能。

ktlint.yml

name: ktlint

on:
  push:
    branches:
      - main

  pull_request:
    branches:
      - main

  workflow_dispatch:

jobs:
  ktlint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run ktlint
        run: ./gradlew ktlint

 

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


Scroll Up