ソースコードの品質を担保すること。大事なことですが、結構大変です。
コードレビューを徹底していたとしても、プロジェクトが長期化する場合、プロジェクトメンバーの入れ替わりもあるでしょう。
メンバーが入れ替わると、どうしても観点のズレ等が生じてしまうものです。
また、人的なレビューには限界もあります。
そうやって徐々に技術的負債が積み上がっていき・・・
負債を抱えないためにも、ソフトウェアメトリクスの観点で継続的に品質をレビューしてくれる仕組みがあるといいですよね。
SonarQube
SonarQubeは、SonarSource社が開発しているオープンソースの品質管理ツールです。
https://www.sonarqube.org/
ソースコードを静的解析し、検知したバグや脆弱性等をWebのコンソール上で確認することができます。
また、プラグインも豊富で多くの言語をサポートしています。
(一部の言語は有料ライセンスが必要)
Jenkins等のCI環境とも相性がよく、組み合わせることで継続的な品質チェックが行えるようになります。
導入
Docker Hubにイメージが用意されています。
docker-compose.ymlも公式にサンプルがあるため、今回はそのまま利用させてもらいます。
version: "2"
services:
sonarqube:
image: sonarqube:8.2-community
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_temp:/opt/sonarqube/temp
db:
image: postgres
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
# This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
sonarqube_temp:
postgresql:
postgresql_data:
docker-compose up -d で起動。
$ docker-compose up -d
SonarQube本体とpostgresのプロセスが動いていれば、起動成功です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bd6b20b71c7 sonarqube:8.2-community "./bin/run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:9000->9000/tcp sonar_sonarqube_1
6f9345091bd6 postgres "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 5432/tcp sonar_db_1
ログイン
ブラウザでhttp://localhost:9090にアクセスし、右上のLog inからログインページへ。
初期設定では、admin / admin でログインできます。
解析
tokenを生成し、プロジェクトの言語・ビルドシステムを設定します。
今回は手元にあったJava/Mavenプロジェクトで試してみます。
生成されたスニペットをプロジェクトディレクトリで実行すると・・
結果
Passed。Quality Gates(品質基準)満たしているようです。
・Reliability (信頼性)
・Security (脆弱性)
・Maintainability (保守性)
・Covergage (コードカバレッジ)
・Duplications (重複コード)
等の観点で指摘・評価(A〜E)をしてくれます。視覚的に分かりやすいですね。
なお、Quality Gatesは、自由に設定が可能です。(例えば、「コードカバレッジが〇〇%以下になったらエラー」等)
ちなみにSecurity ReviewがEとなっていた箇所・・・
プラグインを導入して、jenkins等のCI環境とパイプラインを設定すれば、継続的に解析を行うこともできるようになります。
SonarScanner for Jenkins
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-jenkins/