こんにちは。 エキサイト株式会社の三浦です。
皆さんは、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がなくなった…?」と混乱してしまうこともあると思います。
ぜひこの情報を参考にしてもらえれば幸いです。