AndroidアプリプロジェクトにKtlintを導入する
KtlintはKotlinのプロジェクトで広く使われている静的解析ツールです。定義されたルールに基づいてソースコードのスタイルを検証します。自動で正しいスタイルにフォーマットすることもできます。
Ktlintを普段の業務で利用しているAndroidエンジニアは多いと思いますが、自分で一から設定する機会は意外と少ないのではないでしょうか。私も今回初めて個人のAndroidプロジェクトに導入したので、その際に調べたことを記事にまとめます。
KtlintとGradleプラグイン
KtlintはPinterestがOSSとして開発したツールです。
ただし、Quick startを見るとわかるように、これ自体は単独で動作させるコマンドラインツールです。Androidプロジェクトで利用するには、Gradleプラグインを使うと便利です。
KtlintのGradleプラグインはGradle integrationにいくつか紹介されています。広く使われているのがJLLeitschuh/ktlint-gradleで、プラグインを追加するだけでGradleのタスクが使えて便利です。今回もこれを使います。
余談ですが、私はKtlintのことを、JetBrainsが開発しているKotlinの公式ツールだと思い込んでいました。そのため今回自分で調べ始めた当初は、いくら調べても公式の情報が出てこないことに困惑しました。そのうえPinterestやJLLeitschuh/ktlint-gradleなど複数のリポジトリが見つかり、どれが本物???と戸惑いました。
プロジェクトに導入する
ではJLLeitschuh/ktlint-gradleをAndroidのプロジェクトに導入する手順を説明します。といってもREADMEのHow to useに書いてある通りです。以下のように依存を定義してプラグインを導入するだけで、Gradleのタスクを実行できるようになります。
[versions]ktlint = "12.1.2"
[plugins]ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }plugins { alias(libs.plugins.ktlint)}実行してみる
コードのチェックを実行するには、ktlintCheckを実行します。
./gradlew ktlintCheck例えば以下のようにif節とelse節の書き方が統一されていないコードがあると、改行が必要だと指摘してくれます。
if (flag) { println("Hello")} else { println("Bye") }

また、ktlintFormatを実行すると自動でフォーマットしてくれます。
./gradlew ktlintFormat先ほどのコードは下記のようにフォーマットされます。
if (flag) { println("Hello")} else { println("Bye")}Androidプロジェクトに合わせて設定する
このように簡単に導入できるJLLeitschuh/ktlint-gradleですが、デフォルト設定のままAndroidのプロジェクトで利用すると、期待とは異なる結果になってしまう部分があります。そのため、少し設定を変更します。
デフォルト設定の問題点
例えば以下のようなコンポーザブル関数があるとしましょう。
@Composablefun SampleComposable() { Text( text = "Hello", modifier = Modifier .fillMaxWidth() .padding(8.dp) )}このコードに対してktlintFormatを実行すると、以下のようにModifierが改行されて余分なインデントが追加されてしまいます。Jetpack Composeのコードではあまり見かけないスタイルで、違和感を感じますね。
@Composablefun SampleComposable() { Text( text = "Hello", modifier = Modifier .fillMaxWidth() .padding(8.dp), )}また、「Function name should start with a lowercase letter …」というエラーも出ます。コンポーザブル関数の名前は大文字から始めるのが一般的なので、このエラーは困ります。
.editorconfigファイルに設定を記述
上記のような問題点を解決するために、設定を変更します。プロジェクトのルートディレクトリに.editorconfigファイルを作成し、設定を記述します。

.editorconfigの記述例は下記のようになります。
[*.{kt,kts}]ktlint_code_style = android_studioktlint_function_naming_ignore_when_annotated_with=Composablektlint_code_styleは全体的なコーディングスタイルの設定です。android_studioを指定すると、Androidプロジェクトで見慣れたスタイルが適用されます。上記の例で紹介したようにModifierが勝手に改行されることもなくなります。その他、1行当たりの最大文字数や、トレイリングカンマをつけるかどうかなど、いろいろ違いがあります。具体的な違いはKtlintのルールの説明に書いてあります。
ktlint_function_naming_ignore_when_annotated_withは、特定のアノテーションが付与された関数に対して、関数の命名規則を無視する設定です。ktlint_code_styleを設定しただけではコンポーザブル関数の名前に関するエラーが消えないので、追加で設定しています。
Ktlintで定義されているルールの一覧はStandard rulesにまとまっているので、必要に応じて.editorconfigに設定を追加してください。
以上、AndroidのプロジェクトでKtlintを導入する方法についてまとめました。