end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

Sonar Qube 6.7.1と Sonar Scanner 3.0.3 による java (web) projectのsrc解析

Continuous Code Quality | SonarQube

以前、pmdで、javaのcode metricsを計測しましたが、SonarQube というものを見かけたのでお試し。

今回は、spring-bootで書いたjava, javascriptのsample srcを解析しましたが、 他にも c/c++/c# , python , php 等、多くの言語をサポートしているようです。

参考url

PMD で java の循環的複雑度(code metrics CyclomaticComplexity )を計測 - end0tknr's kipple - 新web写経開発

SonarQubeでソースコードの品質チェック - Qiita

前準備 1/2

Requirements - SonarQube Documentation - Doc SonarQube

javaや、DB(mysql)を必要とします。また、私の環境は以下の通り。

$ cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

$ /usr/bin/java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

$ /usr/local/mysql/bin/mysql --version
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using  EditLine wrapper

前準備 2/2 - CREATE DATABASE

mysql> CREATE DATABASE sonarqube CHARACTER SET utf8;

install SonarQube

と言っても、ダウンロードして、解凍するだけです。

ここでinstallする SonarQube は解析結果を表示するwebアプリで、 実際の解析は、後程、installする SonarScanner が行います。

$ cd /home/endo/local
$ wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
$ unzip sonarqube-6.7.1.zip
$ ln -s sonarqube-6.7.1 sonarqube

config sonar.properties

先程解答した sonarqube 内に conf/sonar.properties がありますので、これを編集します。

以下では、sonar.jdbc.url を複数行に分けて記載していますが、実際は1行で記載して下さい。

$ vi ~/local/sonarqube/conf/sonar.properties

sonar.jdbc.username=root
sonar.jdbc.password=
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?
     useUnicode=true&characterEncoding=utf8&
     rewriteBatchedStatements=true&
     useConfigs=maxPerformance&useSSL=false

start SonarQube ... and login using id/pw = admin/admin

$ ~/local/sonarqube/bin/linux-x86-64/sonar.sh start

を実行後、 ブラウザで http://localhost:9000 へアクセスすると、 ログイン画面のようなものが表示されます。

この画面から、id/pw = admin/admin でログインできますので、 プロジェクトの作成や、解析プラグインのinstallを行って下さい。

install plugin - analysers

SonarQubeのブラウザ画面丈夫にある Administration からMarketplace を開くと、 様々な解析用プラグインをinstallできます。

install Sonar Scanner

続いて、実際の解析を行う Sonar Scanner の installです。 と言っても、こちらも解凍するだけです。

$ cd /home/endo/local
$ wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
$ unznip sonar-scanner-cli-3.0.3.778-linux.zip
$ ln -s sonar-scanner-3.0.3.778-linux sonar-scanner

config sonar-scanner.properties

$ vi ~/local/sonar-scanner/conf/sonar-scanner.properties


#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

sonar.jdbc.username=root
sonar.jdbc.password=

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

解析対象のjava projectに対する設定と解析実行

解析対象のプロジェクト直下に sonar-project.properties を作成します

$ vi ~/dev/StemDocMaint

# Project identification
sonar.projectName=StemDocMaint
sonar.projectKey=StemDocMaint
sonar.projectVersion=1.0

# Info required for Sonar
sonar.sources=/home/endo/dev/StemDocMaint/src/main
sonar.exclusions=/home/endo/dev/StemDocMaint/src/main/test/*

# Comma-separated paths to directories with sources (required)
#sonar.language=java,js,jsp

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

sonar.java.binaries=/home/endo/dev/StemDocMaint/target/classes/jp/end0tknr/stemdoc
  • ※最近のsonar qube では、 sonar.java.binaries の設定が必要なようです
  • sonar.exclusions による解析対象の除外はあまり理解していません
  • ※「sonar.language=java,js,jsp」のように書かなくても、installされた解析プラグインに従い解析されます

そして、解析実行

$ cd ~/dev/StemDocMaint
$ ~/local/sonar-scanner/bin/sonar-scanner

解析結果

は、コードの複雑度等をブラウザから確認できます。