【Java 環境構築】Windows+Scoop+VSCode で開発環境を構築する の続き的な記事です。
VSCode で Java の静的解析をするために SonarQube for IDE1 と checkstyle を導入してみます。
だいたいは公式に沿う形で書いていて、細かい補足を所々入れています。
SonarQube for IDE
SonarQube はこちらの拡張機能をインストールすると、設定不要ですぐに使えます。
SonarQube サーバーとは違い、軽量版の静的解析ツールとして機能するのが前提のため、レポート機能だったり、SonarQube Plugin を用いた解析などはできません。
基本的な使い方
インストールすると、すぐに警告が出てきました。
「System.out
ではなくて、 Logger で出力しましょう」という警告です。
波線のところにマウスポインタをホバーすると上のスクショのように詳細が表示されます。
View Problem (Alt+F8)
をすると、左に水色の丸ボタンが出てくるので、そこから次のアクション候補が選べます。
Quick Fix の SonarQube: Show issue details ...
を選ぶと VSCode 内で解説ページが表示されます。これは便利!
指摘箇所の一覧
SonarQube から指摘を受けている箇所については、ステータスバーの右側のアイコンで指摘件数を把握できます。また、PROBLEMS
タブで一覧表示され、クリックで指摘箇所に移動できます。
ルール一覧
ルールの一覧も VSCode 内で確認可能です。
コマンドパレット(F1)
にて Show: SonarQube View
をすると、以下のようにルールが表示されます。
ルールのカスタマイズ
コード上の指摘を受けている波線にて、Quick Fix からSonarQube: Deactivate rule ...
を選ぶと、ローカル環境の VSCode の settings.json
にこのルールを無視する設定が追加されます。
{
"sonarlint.rules": {
"java:S106": {
"level": "off"
}
}
}
ただ、この設定への追加ですが、グローバルの settings.json
にしか反映することができず、プロジェクトのルートパス配下の .vscode/settings.json
へは記載できません。(記載しても無視されます)
そのため、複数の Java プロジェクトの開発をしていて、かつ、SonarQube のルール設定が違う場合は、最大公約数的な設定値をとりあえず含めておく、みたいな使い方になると思います。
可能であれば、sonarlint.connectedMode.connections.sonarqube
にて CI などで利用している SonarQube サーバーと接続してルール設定の共有ができるので、それをするのがおススメです。
Checkstyle for Java
続いて Checkstyle for Java を試していきます。
checkstyle は SonarQube の指摘範囲と多少重複するところはありますが、得意範囲は違っているため、併用することで相互補完的に機能することが見込めます。
ただ SonarQube を有効にした状態で Checkstyle for Java をインストールした場合、そのままですと checkstyle の警告がエディタ上で確認できないようです。 VSCode を再起動すればすぐ直りました。
基本的な使い方
checkstyle は先にルールの設定ファイルを用意する必要があります。
設定ファイルは Google's Check や Sun's Check が checktyle の公式から提供されているため、このどちらかを使うことが多い印象です。
今回は Sun's Check を試しに使ってみます。
※ Google's Check はインデントが2つだけですが、 Java 界隈だと4つがメジャーなので。
プロジェクトのルートディレクトリ配下に config/checkstyle/sun_checks.xml
を作成し、 GitHub から中身をコピーします。その後、 .vscode/settings.json
にて以下の設定を追加してください。(公式ドキュメントには xml を右クリックして「Set the Checkstyle Configuration File」を選択してと記載されていましたが、私の環境では有効化されていないようでした)
+ "java.checkstyle.configuration": "${workspaceFolder}\\config\\checkstyle\\sun_checks.xml"
すると、以下のように SonarQube の警告(橙)に追加する形で、checkstyle の警告(赤)が増えます。
Maven でも checkstyle の解析をする
maven-checkstyle-plugin
を使うことで、mvn コマンドから checkstyle の解析を実行したり、ルールに違反している場合は、コンパイルエラーにしたりすることができます。
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-checkstyle-plugin</artifactId>
+ <version>3.3.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>com.puppycrawl.tools</groupId>
+ <artifactId>checkstyle</artifactId>
+ <version>10.12.1</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <configLocation>${project.basedir}/config/checkstyle/sun_checks.xml</configLocation>
+ <failsOnError>true</failsOnError>
+ </configuration>
+ </plugin>
</plugins>
</build>
上の設定を適用すれば、MAVEN -> demo -> Plugins -> checkstyle から checkstyle のコマンドが実行できます。check は単純な検査(下のスクショの通り)で、checkstyle は html のレポートが出力されます。
pom.xml
の failsOnError
を true にしているので、mvn package
までは成功しますが、 verify や install では checkstyle の警告があれば BUILD FAILURE で終了するようにしています。
-
以前は、SonarLint という名前でした ↩