ktlintをAndroid Studio上で自動で実行してフォーマットしてくれるようにする
モチベーション
ktlintいいのだけど、pushしてからCIが回ってコメントついてから修正するよりも、事前に手元でわかるのであればわかるようにしたい。
とはいえ、毎回手元でktlintを実行するのはちょっとだるいので出来れば自動でいい感じになおして欲しい。 理想はAndroid Studioの方でktlintに沿ってないコードを書いた時に警告が表示されて、option + enterで自動でなおってほしい。しかし、そんなプラグインは現状調べた限りではなさそう。
やること
File Watchersを導入してktlintコマンドを使って定期的に実行する。
1. ktlintコマンドのインストール
brew tap shyiko/ktlint && brew install shyiko/ktlint/ktlint
2. File Watchersをインストール
pluginの部分で、 File Watchers
と検索してインストールするだけ
3. File Watchersの設定
以下のように設定する。
ポイントはAdvanced Optionsのところのチェックをすべて外すとよいかもしれない。
一番上の Auto-save edited files to trigger the watcher
の部分にチェックが入っていると、ファイルを編集してauto saveが発動されたタイミングでktlintが実行されてしまう。
これはちょっと修正して考えている間に勝手にファイルがフォーマットされてちょっとうざいのと、ktlintが発動してフォーマット中にファイルを編集すると、メモリ上にあるやつと、フォーマットした結果のファイル、どっちが正しいの?というダイアログが毎回出てきてつらい。
弱点
この方法は完璧ではない。
- ktlintが発動して、完了するまでが長い。6秒くらいかかる。一瞬で終わって欲しい。
- 僕はターミナルからgit commitするからいいのだけど、IDEでCommit Changesしてる人は、command + kで出したタイミングでktlintが発動するので、コミットした後にフォーマットされてしまう。ターミナルからでも6秒くらいかかるので、一瞬でgit commitしてしまうと、commit後にフォーマットになってしまう。
- ktlintのコマンドインストールしないといけない。そもそも、Android Studioでいい感じにやってほしい気持ち。
その他
やってもよさそうなこと
https://github.com/shyiko/ktlint#option-1-recommended
こちらにのっている、おすすめの設定の適用をする。
ktlint --apply-to-idea-project --android
以下のファイルが生成されるため、これをgit管理しとくといいかもしれない。
./.idea/codeStyles/codeStyleConfig.xml ./.idea/codeStyles/Project.xml ./.idea/inspectionProfiles/profiles_settings.xml ./.idea/inspectionProfiles/ktlint.xml ./.idea/workspace.xml
しかし、codeStyleConfigなどはすでに設定してたりするとバッティングしそう。
やってもいいかなと思ったけど、僕はやる気になれなかった事。
ktlint --install-git-pre-commit-hook
これでpre-commitに追加してくれて、commit前にチェックしてくれる。 しかしながら、これはcommitする時にちょっと処理が遅くなりそうなのと、エラーを出すだけで、自動でformatしてくれなかったのでやめた。 もうちょい様子をみて、やるかどうかは考える。
所感
もうちょっといい感じにAndroid Studioが何かしてくれたらいいなぁと思いつつ、自分で出来そうな事を考えてみた。 Androidアプリ開発は基本的にはAndroid Studioを使って開発する人が多いと思うので、それ前提で考えられるのがいいな。もっといい方法をご存知だったらどなたか教えてください。
ktlint、jvmで動いてそうだから実行が遅いのかな?