Ktlint を Git Hooks に入れてみた
CATS Productivity Team のわさびーふです。
はじめに
このブログ自体を Hugo で作っているんですけど、先日、それらの Lint に同僚が Git Hooks で設定してくれていて、「やっぱり Ktlint でも ESLint でも Lint は Git Hooks でやるのが便利だなぁ」と思ったので記事にしました。
内容は以下の通りです。
- Ktlint とは
 - Git Hooks とは
 - Husky で Git Hooks を設定する
 - Gradle plugin で Git Hooks を設定する
 
Ktlint とは
https://github.com/pinterest/ktlint
Ktlint とは、Kotlin 向けに Lint と Format 機能を備えたツールです。
例えば、自分の書いた Kotlin コードが 公式のコーディング規約に則っているかをチェックし、修正することができます。
以下は、Ktlint でチェックできるスタイルの一例です。
data class C(
    val a: Any,
    val b: Any = 0,
    val c: Any
) {}
data class C(val a: Any,
             val b: Any = 0,
             val c: Any) {
}
Git Hooks とは
git の様々なタイミングで任意のスクリプトなどを実行できる仕組みです。
自分の .git/hooks 以下の覗いてみてくだい。
特に何もしていない場合には、そこには pre-push.sample や pre-commit.sample があるかと思います。
例えば、pre-push というファイルを作り、そこに動作させたいスクリプトを書くと git push 前に動作させることができます。
Husky で Git Hooks を設定する
https://github.com/typicode/husky
husky は npm で管理されているので、npm install を行います。
npm install husky --save-dev
設定は簡単で、package.json の  husky.hooks.pre-push/pre-commit に追加するだけです。
{
  "private": true,
  "name": "android",
  "author": "cats",
  "husky": {
    "hooks": {
      "pre-push": "./gradlew ktlintFormat"
    }
  },
  "devDependencies": {
    "husky": "^4.2.1"
  }
}
% git commit -m ""
husky > pre-commit (node v13.7.0)
Configuration on demand is an incubating feature.
> Configure project :app
...
...
BUILD SUCCESSFUL in 16s
Gradle plugin で Git Hooks を設定する
Gradle でやりたい場合は、すたぜろさんが作っていたのを使いましょう。
https://github.com/STAR-ZERO/gradle-githook
最後に
Git Hooks にさえ登録できれば手段については、チームメンバーと相談してみてください。 割と私は Android プロジェクトでも package.json や Gemfile を置いたりするので、チームによって使いやすいツールは様々かもしれません。
おしまい