
こんにちは。 エキサイト株式会社の三浦です。
皆さんは、Checkstyleを使っていますか?
Javaのコードが指定したコード規約に即しているかをチェックしてくれるツールで、これによってコードの品質を保つことができます。
Gradleからタスクを実行したりして違反が無いかを確認できるのですが、実際に使ってみて、初見だと少しハマりそうな部分があったので、その部分について書いていこうと思います。
Checkstyleとは
Checkstyleは、Javaがコード規約に即しているかをチェックしてくれるツールです。
公式では以下のように説明されています。
Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking Java code to spare humans of this boring (but important) task. This makes it ideal for projects that want to enforce a coding standard.
人の目でわざわざチェックしていくのが面倒で、しかもプログラマチックに解決できるコード規約周りのチェックをしてくれるので、簡単にコードの品質を保つことができるようになります。
Gradleであれば、以下のように設定できます。
build.gradle
plugins {
// ...
id 'checkstyle'
// ...
}
// 今回はマルチプロジェクト構成なので、 `subprojects` に細かい設定を追記
subprojects {
apply plugin: 'checkstyle'
checkstyle {
configFile = rootProject.file("path/to/xxx.xml") // ここに、使用したいコード規約の設定をXML形式で作る
toolVersion = "10.0"
sourceSets = [project.sourceSets.main]
}
// ...
}
この設定をすれば checkstyleMain というGradleタスクが使えるようになるので、後はそれを実行すればチェックしてくれるようになります。

とても簡単で非常に便利なのですが、全くコードを変更せずにもう一回実行すると、以下のような表示になってしまいます。

先程まで出ていたはずのWarningが全く出てこなくなってしまいました。 これはどういうことなのでしょうか?
2回目以降のCheckstyle実行
実はGradleには、入出力の結果が全く同じ場合、タスクを実行せずにスキップするという機能があります。
2回目の実行時に UP-TO-DATE という文字列が出ていますが、これはスキップされたことを表しているのです。
つまり、一度 checkstyleMain を実行してしまうと、コードを変更しない限りもう一度コマンドライン上からWarningを確認することができないのです。
当然ですが、1回目しか確認できないのは大きな問題です。
ではどうすれば良いかというと、実は checkstyleMain を実行すると、その結果をHTMLファイルとして以下のパスに出力してくれます。
build/reports/checkstyle/main.html
ブラウザで開くと以下のようになっているので、これを見れば良いというわけです。


ページ内リンク等も適切に貼られているので、慣れてしまえば特にストレスなく確認できるでしょう。
まとめ
知ってしまえば簡単なことですが、初めてCheckstyleを触ると「さっきまで出ていたはずのWarningがなくなった…?」と混乱してしまうこともあると思います。
ぜひこの情報を参考にしてもらえれば幸いです。