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
解析結果
は、コードの複雑度等をブラウザから確認できます。