はじめに
こんにちは、運動通信社でバックエンドメインに携わっている Takeya です。
"技術的負債"。弊社も悩まされてます。
これを計測する方法はないのかな〜? と探してみたところ、 SonarQube というツールの出力結果に"Techinical Debt (技術的負債)"という項目があるとのこと。
試してみましょう!
SonarQube って? 何ができるの?
SonarQube は静的コード解析ツールです。
技術的負債計測ツールというわけではなく、その中に技術的負債の計測も含んでる感じです。
この手のツールでは一番メジャーなようです。
計測できるもの
色々ありますが、今回は 技術的負債 をみてみます。
Technical Debt
The estimated time required to fix all Maintainability Issues / code smells
"すべての保守性の問題/コードの臭いを修正するために必要な推定時間"
動かしてみる
公式のDockerイメージがあるので簡単に試せます。
手順をざっくりまとめました。
解析してみる - Laravel (本家)
バグ 0 !!!
技術的負債 2h 24min 少なっ!!!
Code Smells 16 !
"Debt" をクリックするとファイル別の一覧が表示されます。
ファイルをクリックすると個別の指摘内容を確認できます。
config/database.php
簡単な例ですが、4回出てきてるから定数化しなさい、と怒られてます。
↓こんな感じで時系列での増減も表示できます。
注: 今回PHPだけ解析した後に、JSの解析を追加で行ったのでグラフとしては増えちゃってるように見えてます。
社内でもちょっと試してみました
社内の古くからあるプロジェクトをいくつかピックアップして試してみたのですが、
意外にも(?) 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で簡易的に実施したわけですが、実運用に載せる場合いくらくらいかかるのかも調べてみました。
オンプレミスとクラウドがあります。(クラウドがいいですよね)
クラウド版は、解析したコードのライン数で課金されます。
課題
- 運用への乗せ方を検討して、仕組みの構築が必要
- PRの時点でコード解析をかける
- ブランチにマージしたらコード解析をかける
- など
- 細かい設定を調べていく必要がありそう。
- テストコードに使用している日本語関数名が parse error になっていた
まとめ
細かいところまで見られていませんが、実プロジェクトで試してみるとなかなかリファクタリングし甲斐がありそうな状況でした。。。
自分が体感している負債は、アーキテクチャ自体の問題も多いのかなと思っており、今回検出している負債を返済しようとすると、そういった修正に手を入れることになるのかもしれません。
こういった静的解析ツールでまずは可視化から改善をしていきたいですね。
さいごに
運動通信社は
「日本を世界が憧れるスポーツ大国にする」というビジョンを達成するべく、
一緒に働く仲間を募集しています!