LoginSignup
10
7

More than 1 year has passed since last update.

SonarQubeで技術的負債を測る

Last updated at Posted at 2021-11-24

はじめに

こんにちは、運動通信社でバックエンドメインに携わっている Takeya です。

"技術的負債"。弊社も悩まされてます。
これを計測する方法はないのかな〜? と探してみたところ、 SonarQube というツールの出力結果に"Techinical Debt (技術的負債)"という項目があるとのこと。
試してみましょう!

SonarQube って? 何ができるの?

SonarQube は静的コード解析ツールです。
技術的負債計測ツールというわけではなく、その中に技術的負債の計測も含んでる感じです。
この手のツールでは一番メジャーなようです。

計測できるもの

色々ありますが、今回は 技術的負債 をみてみます。

Technical Debt
The estimated time required to fix all Maintainability Issues / code smells

"すべての保守性の問題/コードの臭いを修正するために必要な推定時間"

動かしてみる

公式のDockerイメージがあるので簡単に試せます。

手順をざっくりまとめました。

解析してみる - Laravel (本家)

ScreenShot 2021-11-18 9.43.29.png

バグ 0 !!!
技術的負債 2h 24min 少なっ!!!
Code Smells 16 !

"Debt" をクリックするとファイル別の一覧が表示されます。
ScreenShot 2021-11-18 10.05.55.png

ファイルをクリックすると個別の指摘内容を確認できます。

config/database.php
簡単な例ですが、4回出てきてるから定数化しなさい、と怒られてます。
ScreenShot 2021-11-18 10.06.20.png

↓こんな感じで時系列での増減も表示できます。
注: 今回PHPだけ解析した後に、JSの解析を追加で行ったのでグラフとしては増えちゃってるように見えてます。
ScreenShot 2021-11-18 10.08.36.png

社内でもちょっと試してみました

社内の古くからあるプロジェクトをいくつかピックアップして試してみたのですが、
意外にも(?) Maintainability の項目がA評価で驚いてます(笑)

"Debt" だけ記載してます。

プロジェクト①:用途API

Maintainability A / Debt 149 days

プロジェクト②:用途BFF

Maintainability A / Debt 582 days

※ Maintenabilityは5段階評価となっており以下のようになっているようですね。

ランク
A 5%以下
B 6~10%
C 11~20%
D 21~50%
E 50%以上

ちなみに、ファイル別での確認もできるのですが、
今回試した上記のプロジェクトでは、外部ライブラリである jquery.js
Debt 53 days ということで最大値となってました。

プロジェクトの都合上、外部ライブラリをコミットしているケースもあったりすると
ひきづられて Debt が増えているところもありそうです。(設定で除外できるかも)

料金は?

今回はDockerで簡易的に実施したわけですが、実運用に載せる場合いくらくらいかかるのかも調べてみました。
オンプレミスとクラウドがあります。(クラウドがいいですよね)

クラウド版は、解析したコードのライン数で課金されます。

ScreenShot 2021-11-17 15.00.33.png

課題

  • 運用への乗せ方を検討して、仕組みの構築が必要
    • PRの時点でコード解析をかける
    • ブランチにマージしたらコード解析をかける
    • など
  • 細かい設定を調べていく必要がありそう。
    • テストコードに使用している日本語関数名が parse error になっていた

まとめ

細かいところまで見られていませんが、実プロジェクトで試してみるとなかなかリファクタリングし甲斐がありそうな状況でした。。。
自分が体感している負債は、アーキテクチャ自体の問題も多いのかなと思っており、今回検出している負債を返済しようとすると、そういった修正に手を入れることになるのかもしれません。

こういった静的解析ツールでまずは可視化から改善をしていきたいですね。

さいごに

運動通信社は
「日本を世界が憧れるスポーツ大国にする」というビジョンを達成するべく、
一緒に働く仲間を募集しています!

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7