LoginSignup
25
21

More than 1 year has passed since last update.

静的コード分析ツールSonarQubeってこんなに簡単に使えるようになってたのか、の話

Last updated at Posted at 2022-08-13

はじめに

数年ぶりにSonarQubeを触ってみたくなり、試したところかなり簡単だったので、その感覚を残したく記事化してみました。

SonarQubeとは

SonarSourceのプロダクトの一つであり、コード品質、コードセキュリティのチェックを実施するツールです。

さまざまな使い方ができるのだと思いますが、簡単に使うためにはJenkinsなどのツールと同じようにSonarQube用のサーバーとして1プロセス立ち上げ、その中でチェックと、チェック結果を確認・参照することができます。

今回やりたいこと

MavenでビルドしているJavaプロジェクトに対して、ソースコードの品質が不安なので第三者チェックしてほしいと思うことがあると思います。その際に頼めるレビューアーがいないので最低限確認するためにツールにレビューをお任せしたい、ということがやりたいことです。
JenkinsのようなCI環境も手元にはありませんので、無しでいきます。

環境構成

ざっくりですが、以下の環境でやりました。

image.png

Java,Maven等のバージョンは以下の通りです。

\$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/xxxx/.sdkman/candidates/maven/current
Java version: 11.0.7, vendor: AdoptOpenJDK, runtime: /Users/xxxx/.sdkman/candidates/java/11.0.7.hs-adpt
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

SonarQubeを試す

SonarQubeのインストールと起動

SonarQubeのインストールについては公式のガイド通りにやればOKです。ローカルマシンでDocker動かすとちょっと重たいので今回はFrom the zip fileに記載の方法で実施しました。

今回利用したバージョンは、Community EditionVersion 9.5 (build 56709)でした。

ざっくりいうと

  • Zipファイルダウンロードして解凍
  • binフォルダの下にあるsonar.shをconsoleオプション付きで実行
 ./sonar.sh console

ログの掲載は省略しますが、Java11で動いていることがわかります。

SonarQubeのプロジェクト作成

デフォルトでは9000番ポートでOpenされているので http://localhost:9000/ 
にブラウザでアクセスします。ID、PWを入れてログインするとプロジェクト一覧のような画面が出るのでCreate ProjectでManuallyでプロジェクト生成します。

image.png

プロジェクト名を決める必要があるので、今回はSampleProjectにしました。

image.png

Setupを押すとどういった構成で実行するのかを聞かれるので、今回はローカル実行のため、Locallyを選択します。

image.png

Tokenを生成せよと言われるので、そのままGenerateしてみます。

image.png

その後、プロジェクトのビルド方法を聞かれるので今回はMavenにします。

image.png

すると、Token付きのMavenでの実行方法のコードが出てきますので、それを実行することでチェックできるようです。

image.png

SonarQubeでのチェック実行

お手元にある適当なJava、Mavenプロジェクトで試してみます。
あまり複雑なものではないのですが、JakartaEE9.1で画面アプリのサンプルを試していた以下のプロジェクトを使いました。

こちらのプロジェクト直下で先ほどSonarQubeで表示されていたmvnコマンドを実行します。初回はさまざまなプラグインやライブラリのダウンロードが走るため時間かかります。

実行ログの最後の方にレポートアクセスのためのURLが出るのでそこから結果を確認します。

・・・
[INFO] CPD Executor CPD calculation finished (done) | time=38ms
[INFO] Analysis report generated in 176ms, dir size=159.1 kB
[INFO] Analysis report compressed in 227ms, zip size=45.1 kB
[INFO] Analysis report uploaded in 155ms
[INFO] ANALYSIS SUCCESSFUL, you can find the results at: http://localhost:9000/dashboard?id=SampleProject
[INFO] Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
[INFO] More about the report processing at http://localhost:9000/api/ce/task?id=AYKW086UmtOjHj2hRwpV
[INFO] Analysis total time: 59.090 s
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:08 min
[INFO] Finished at: 2022-08-13T19:50:54+09:00
[INFO] ------------------------------------------------------------------------

結果レポートを見ると、2つのBugがあるとレポートされてました。

image.png

Bugと表示されている2のところがリンクとなっており、押下すると以下のとおりどのファイルのどこの箇所がどういう理由でBugと検知されたのかを確認することができました!
今回は2つのXHTMLファイルのhtmlタグの属性にlangかxml:langが無いよ、という指摘でした。

image.png

簡単な指摘でしたので、以下のとおり修正して再度実行し、Bugが0になることを確認しました。

image.png

今回のBugは致命的なものではありませんでしたが、細かいチェックはツールにしてもらうに限りますね。簡単でした!

まとめ

今回は最小の手として、MavenプロジェクトをローカルでSonarQube実行して静的コードチェックをすることを試しました。
この方法は初めてやったので簡単さが有難かったです。(過去はJenkinsと繋いで、、とかやってました。)

いろいろな使い道があると思いますが、一つ一つのコンポーネントを理解しながら最後に繋げて検討するという方法が良いかなと個人的には思いますので、試してみてください!

25
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
21