いまだにJava 8 備忘録 - sonarqubeの使い方
今日すること
こんにちはふるてつです。
今回はJava
自体のお話ではありません。
sonarqube
のお話になります。
sonarqube
はソースコードの静的解析ツールになります。
常駐先のプロジェクトでも使用していますが、すでに設定されたものを使用するだけで、自分でいちから設定することはまずないです。
最近その常駐先で同僚にsonarqube
を教えようとしたところ「あら、どうやるんだっけ??」となりました。
そこで基礎から設定をやり直そうと思いブログにも書いた次第です。
Qiitaなどで話しつくされた感はかなりありますが…
1. sonarqubeの作業
まずsonarqube
のダウンロードサイトを見てみます。
https://www.sonarqube.org/
コミュニティ版とデベロッパー版があるようですが、
ローカルにインストールして使用する場合は左のコミュニティ版を選ぶようです。
しかしダウンロードしているうちに下記のドキュメントにDocker
版もあるというのを見つけまして、途中でダウンロードはやめて今回はDocker
版を使うことにしました。
https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
sonarqubeの起動
まずはsonarqube
を起動します、Dockerの起動コマンドはこちらです。
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
プロセスが起動したら下記のURLを参照します、ローカルホストの9000番ポートです。
http://localhost:9000
これでsonarqube
が起動しました。
プロジェクトの登録
では解析するプロジェクトを追加していきます。
まずはサインインします、login、password はともにデフォルトで admin です。
サインインすると「Create new project」ボタンがまんなかに出てきます。
「Create new project」ボタンをクリックするとProject keyとDisplay nameを入力しろと出てきます。
Project keyは解析するプロジェクトとは関係なくどんな名前でも大丈夫なようです。
わたしはとりあえず my_sonar_qube_test にしてみました、Display nameも一緒です。
「Set Up」ボタンをクリックすると次は token を入力しろと出てきました。
こちらもとりあえずの値 my_sonar_qube_token と入れました。
「Generate」ボタンをクリックしてそのあと先に進むと下の画面にたどり着きます。
わたしの環境の場合、言語はJava
で、ビルドはGradle
を選択しています。
他にもC#
やJS
も解析できるようです。
画面の下に表示されている内容のうちひとつは解析したいソースの build.gradle ファイルに追加する内容です。
もう一つはsonarqube
に解析したいソースを登録するコマンドになります。
2. 解析されるソース(Java)での作業
Gradleにプラグイン追加
下記のプラグインを build.gradle ファイルに追加します。
plugins {
id "org.sonarqube" version "2.7"
}
わたしの環境はGradle
のマルチプロジェクトで、フロント側とBiz側の二つの子供のプロジェクトがあります。
下記のような感じで2つともに追加しました。
(バージョンは変数にして別ファイルで管理してます)
フロント側の build.gradle
Biz側の build.gradle
sonarqubeに解析したいソースの登録
次に以下のコマンドを解析したいソースのディレクトリ直下で実行します。
補足になりますが、わたしはWindows環境なので-D
の書き方を変えないとエラーになりました。
最初の./gradlew
のところも、Dosコマンドを使う方は./
が不要と思います。
./gradlew sonarqube -D "sonar.projectKey=myTestProject" -D "sonar.host.url=http://localhost:9000" -D "sonar.login=ea493af063a0129adf716dae2e6e41000c9a9379"
}
このコマンドが正常に終了するとsonarqube
で解析結果を見れるようになります。
3. 解析結果の確認
今回の解析結果は下記になります。
解析対象のソースはわたしが個人的にJava
で作ったもので、これまでにCheckstyle
やSpotBugs
などのツールは一切使っていません。
たくさん指摘がでると思いますー
Bugs
まず一番上のBugsをみると1件出ていますね。
そんなふうには作ってないのですが…クリックして中身を確認します。
Integer
とInteger
をかけ合わせてそのあとにLong
に変えている箇所に指摘がありますね。
「かけ合わせる前にそれぞれをキャストしろ」と言われているようです。
Vulnerabilities
脆弱性は0件です。これはよし。
Security Hotspots
Security Hotspotsは1件あります。
Security Hotspotsは脆弱性とは違うようですね。
「ここリスクが高いから確認しておけよ」という感じでしょうか。
こちらも中を確認します。
Spring Security
の security config が指摘されていました。
わたしの環境ではSPAでサインインするときにSpringのBasic認証を使っているのですがそのあたりです。
そうですね、もう一度自分の意図した設定とあっているか確認しておきます。
Debt
これは負債を解消するためのコストらしいのですが、2h 38min ならいいかなと思いここはスキップします。
Code Smells
Code Smells 「あやしいにおい」ですね、ここは29件もあります。
中身を確認してみます。
a. コードの消し忘れ
コメントアウトしたままコードを消していなかったところが指摘されています…
b. シリアライズ
「ここではシリアライズできるクラスを使ってくれ」といったことを指摘してますね、そうですか…
c. その変数は省略できます
「その変数は省略できます」というヤツですね、同じ内容が多数指摘されました。
わたしは節目節目で変数にセットしたいタイプなのですが修正した方がいいでしょうねー
あと同じところにもう一つ指摘があり「lambda -> はメソッド参照 :: に変えましょう」というのもありました。
そうなんですね、これも修正せねば。
d. リストの中が空かどうか
「リストの中が空かどうかは size() メソッドを使うのではなく、isEmpty() メソッドを使いましょう」という指摘です。
すみません…
感想
今回はsonarqube
の初期設定について書きました。
いちおう最後までできました。
今回指摘された内容は別途修正します。
実際に自分でやろうとするとうまくできないことがおおいですねぇ
でもこれで常駐先の同僚にちゃんと説明できると思います。どや顔で。
それではまた😎