Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JJUG CCC Spring 2025 : 技術的負債から守るSonarQube カスタムル...

Avatar for MT34 MT34
June 07, 2025

JJUG CCC Spring 2025 : 技術的負債から守るSonarQube カスタムルール作成入門

アーキテクトが、自ら考えたアーキテクチャを開発者に守らせるためには、プログラムをレビューする必要があります。ただ、多くの開発者に対してガバナンスを効かせることは難しいですよね。レビューを肩代わりしてくれるソース解析ツールやSASTの中に自らの「想い」を体現したルールが必ずあるとも限りません。
このセッションでは、SonarQubeを例に自らの作ったカスタムルールを実装してみましたので、ご紹介させていただきます。

Avatar for MT34

MT34

June 07, 2025
Tweet

Other Decks in Programming

Transcript

  1. ・かの有名なオライリーから出ている書籍の「ソフトウェアアーキテクチャの基礎」ですが、  この中で、アーキテクトは、アーキテクティングとコーディングのバランスを取る必要がある  と記載されています。  アーキテクトもプログラミングをし続けないと、アーキテクトとしてのスキルも  劣化・陳腐化していくということかなと思っています。 ・ただ、一方で、本番システムの一部のコーディングを担当する、と  アーキテクト自身がボトルネックになって  プロダクト開発推進そのものに影響が出てしまうため、  できればそれ以外のものが良いということで、この4つが挙げられていました ・PoCをやりましょうとか、コードレビューをしましょうとか、

     書かれていますが、本日は真ん中2つがこの講演には関係するかなと思っていまして、  本日の講演のタイトルにもつけました「技術的負債」に関わる作業、  あとは、アーキテクチャ分析や適応度関数ということで、  アーキテクトの人がまさにやらなければいけない統制・ガバナンスですね、  アーキテクト自らが決めたルールが確り守られているか?をどのように担保するのか、  ここに本日のテーマであるSonarQubeが活用できるかなと思っています。
  2. ・ルールクラスの一部を抜き出しています。  これはSQL Injectionをチェックするために、Statementインターフェースを継承していながら  PreparedStatementインタフェースを継承していないクラスを抽出しています。  シンプルな例にしたかったので、  実用的な事例ではなく、あえてこのような事例を紹介させていただいています。 ・SonarQubeというか、Sonar Scanner、プログラムソースをスキャンするツールでは  Javaのプログラムソースを頭から構文解析していく仕組みを持っています。  その中で、VariableTreeというのがいわゆる変数のデータです。

     この変数のクラスをTypeTreeというもので取得してきて、  ありがたいことにisSubtypeOfメソッドというのが用意されているので、  子クラスかどうか、この場合はインターフェースですが、こちらをチェックすることができます。 ・そして、if文中がtrue、すなわちチェックしてルールに違反している場合、  このルールクラスの親クラスである  IssuableSubscriptionVisitorクラスのreportIssueというメソッドで問題を起票されます。  ・またクラスに対して Ruleアノテーションを追加し、ルールIDのようなものを振っています。  こちらのKeyが次に紹介する説明用のhtmlやjsonと対応しています。