original過去にFindBugsプラグインの実装方法について記事にしたとおり、FindBugsプラグインの実装には複雑なハックが必要でした。findbugs.xmlやmessages.xmlなどのメタデータ管理が煩雑でした。3.1.0-RC3ではある程度楽になっているので、シンプルになった方法をここにまとめておきます。プロジェクトの雛形を作るarchetypeがコミュニティから提供されるようになりました。これを使えばプラグイン開発の知識がなくてもすぐにプロジェクトを作成できます。artifactIdそしてversionを指定するだけです。-DarchetypeVersion=0.1.0バグとして検出すべきケースを実装し、単体テストを回すプロジェクト生成に成功すると、src/test/javaに2つのクラスが見つかるはずです。(バグとして検出すべきではないケース)これらを実際に解析して結果を確認しているテストケースもあります。MyDetectorTest.javaこのテストケースは、SpotBugsが出しているtest-harnessモジュールを使っています*1。SpotBugsRuleというクラスがキモで、これを使って実際の.classファイルを解析し結果を確認できます。assertion用のMatcherクラスも提供されているので、hamcrestを使ったテストも書きやすいです。}以前はプラグインを実際に使ったテストをするためにはfindbugs-maven-pluginを使ってインテグレーションテストを回すしか方法がありませんでしたが、この手法ならより高速にテストを回せます。test-driven-detectors4findbugsと違って公式なので、今後のSpotBugsの更新にも追随できるはずです*2。メタデータを作成するまずbugrank.txtは現状必要ないようです。無くてもプラグインはビルドできます。(confidence)とは全く別の概念です。それがどの程度浸透しているのか......。(confidence)のことは忘れてSonarQubeのSeverityだけ使うのが、運用も回しやすいと思います。全体的な情報を提供するfindbugs.xmlと、ユーザ向けメッセージを管理するmessages.xmlだけ作成すれば十分です。プロジェクトの雛形にはこれらが既に作成されているので、それを参考にコピペで要素を増やしてください。使ってパッケージできます。sonar-findbugsと拙作findbugs-slf4jが参考になります。キモはfindbugs-pluginバージョン3.5への依存を宣言することです。3.1.0-RC2を使っているため、SpotBugsに依存したプラグインを書くには必須です。Centerでは配布されていません。使用する際はGitHubのリリースページからjarを落としてきて手動インストールする必要があります。SonarQube用のrule.xmlを生成する必要があるのですが、これは雑ですがMavenプラグインを作ったので使ってもらえればと思います。Groovy好きな方はsonar-findbugsのコードを参照しても良いでしょう。まとめ以上でSpotBugsプラグインを実装してSonarQubeも含めた運用を回すことができるはずです。各種親Detectorを学習する手間は必要ですが、5年前に比べてだいぶマシにはなりました。追記:公式かつ英語のドキュメントもできました。Contributions(25日時点)でし...2018-08-01dockerでSonarQubeのインストールを楽にやるクラスメソッドさんのブログでSonarQubeの紹介がされています。Springに参加してきました。