SonarQube, C++ プラグインの Windows へのインストールと使い方

重複コードなどソースコードのメトリクスを調べてくれる SonarQube (旧 Sonar) というプログラムがあります。
今回はこの SonarQube の Windows へのインストールと C++ での使用法について説明したいと思います。

SonarQube Logo

SonarQube とは

SonarQube はメトリクスツールで、 ソースコードを解析して各種の計測情報を表示してくれます。

対応言語

もともと Java 用ですが、プラグインでその他の言語にも使えるようになります。 SonarQube 自体はフリーなのですが、プラグインの言語によっては有料のものもあり、 C/C++ 言語用のプラグインも有料です。
ただし、サードパティーとして無料の Community 版もあるので、 今回はそちらでの C++ コードの解析について紹介します。

システム構成

SonarQube 本体は Web サービスのシステムで、計測結果は Web 上で表示されます。
計測は SonarQube 用のスキャナーを使って行い、それをデータベース(DB)に保存します。 その DB 上のデータを SonarQube 本体で表示するという構成になっています。

soft_sonar_system.png


スキャナーとして、今回はコマンドラインツールを使いますが、 Jenkins との連携用など様々な用途に合わせたものも用意されています。

メトリクス結果

実際の計測結果は次のような感じです。

soft_sonar_site_result.png


すぐ使える計測結果は 3 つです。
コード行数など
ファイルの行数やクラス、メソッド、ステートメント(ステップ)数などの計測結果です。
ファイル(クラス)の行数は長すぎるのはよくありません。上限をコーディングルールで決められることも多いです。 個人的にはキリがいいので、 1 ファイル 1,000 行 以内としています。
Duplication(重複コード率)
コピペコード、コードクローンとも呼ばれるもので、同じようなコードがどのくらいあるかという数値です。
複雑度
深いネスティングによって上がります。これは基本的に少ない方が分かりやすいコードです。
ここで一番重要なのは重複コード率です。

DRY 原則もあるように重複しているところを修正する場合、同じような修正を何度もすることになります。 そのため、変更時にそのまま修正するか、作り直した方が早いかの指標として使われることもあります。
言い過ぎを恐れずに言えば、「プロジェクトの崩壊率」、「コーディングのヘタクソ度」といってもいいでしょう。

ただし、重複コードの計測は他のものと違って、正確に出すのは難しいです。 数値が高いものは確かに高いのですが、低くても重複コードは多い可能性はあります。

品質チェック

私がそんなに使い込んでいないので、詳しくありませんが、 ルールを決めたり、CppCheck などと組み合わせたりして、品質の保証にも使えるようです。

インストール

ここから Windows でのインストール方法について説明していきます。
インストールの方法や使い方は主に以下のページを参考にしています。

本体

SonarQube では SonarQube 本体およびソースコード解析用の Scanner(runner) をインストールします。

まず、本体をダウンロードします。
  • http://www.sonarqube.org/downloads/
soft_sonar_dl.png


ダウンロードしたファイルを C:\sonarqube などに展開します。
ここでは C:\local\sonar に展開し、バージョン番号を取り除いたとします。 (C:\local\sonar\sonarqube)

スキャナー

スキャナーとして今回はコマンドラインで実行するものを使用します。
コマンドライン用のスキャナーは以下のページからダウンロードします。 soft_sonar_dl_runner.png


ダウンロードしたファイルを C:\sonar-runner などに展開します。
こちらも C:\local\sonar に展開し、バージョン番号を取り除いたとします。 (C:\local\sonar\sonar-runner)

起動、ログイン

本体の方を実行し、サーバーを起動させます。 実行コマンドは (インストールフォルダー)\bin\(環境名)\StartSonar.bat です。
c:\>c:\local\sonar\sonarqube\bin\windows-x86-32\StartSonar.bat
以下のアドレスにアクセスします。 soft_sonar_site_first.png

「 Log In 」 する場合、管理ユーザーの初期設定は次のようになっています。
Login Password
admin admin

日本語化

わかりやすいように Web の表示を日本語化します。 ただ、対応していない部分の方が多いので、気持ち程度です。


一部のプラグインは Web 上から追加できます。 日本語化プラグインも Web からインストールできます。

管理ユーザーでログイン後、以下の順にたどって [Update Center] を開きます。
Administration → System → Update Center
[Available] を選択すると利用可能なプラグインのリストが表示されます。
ただし、プロキシー環境ではリストに何も表示されません。その場合、次節の設定を行ってください。

soft_sonar_site_updatecenter.png


リストにある [Japanese Pack] の [Install] を選択してインストールします。

soft_sonar_site_jppugin.png


この状態はまだ Install Pending です。 再起動するとインストールが完了し、 Web が日本語化されます。

soft_sonar_site_jp.png

プロキシー設定

プロキシーの設定は (インストールフォルダー)/conf/sonar.properties で設定します。

ファイルはデフォルトのものがあるので、 該当箇所のコメントアウトを外して、プロキシのアドレスとポートをそれぞれ記述します。
#--------------------------------------------------------------------------------------------------
# UPDATE CENTER

# Update Center requires an internet connection to request http://update.sonarsource.org
# It is enabled by default.
#sonar.updatecenter.activate=true

# HTTP proxy (default none)
http.proxyHost=foo.co.jp
http.proxyPort=80
変更後、再起動すると設定が反映されます。

C++ プラグイン

C++ 言語用のプラグインもインストールしておきます。 有料のものは Web 上からインストールできるのですが、無料版(Community)の方は別途ダウンロードしてインストールする必要があります。


まず、 Web からプラグインの jar ファイルを取得します。 soft_sonar_dl_cxx.png

ダウンロードしたファイルを以下のフォルダーに置きます。
  • (インストールフォルダー)/extensions/plugins
再起動し Update Center を見ると、インストール済みであることが確認できます。


soft_sonar_site_cxxpugin.png

使い方

動作確認

動作確認用にサンプルをダウンロードして、適当なところに展開します。 まず、 Java のサンプルで試してみます。
展開した projects/languages/java/sonar-runner/java-sonar-runner-simple に移動します。

そこでコマンドラインのスキャナーを実行します。
ちなみにスキャナーを実行する際も本体は起動していないとエラーになります。
> c:/local/sonar/sonar-runner/bin/sonar-runner.bat 



続いて C++ のサンプルです。 こちらは projects/languages/cpp/cpp-sonar-runner に移動します。

C++ の場合はここにあるプロジェクト設定ファイル(sonar-project.properties)を修正する必要があります。
このファイルの、以下の言語の設定で "cpp" を "c++" に書きなおすか、行全体を削除します。
sonar.language=cpp
変更後、 java の時と同様にコマンドラインのスキャナーを実行します。言語が変わっても実行するコマンドは同じです。
> c:/local/sonar/sonar-runner/bin/sonar-runner.bat 
実行後、 Web を見てみるとプロジェクトが追加されています。

soft_sonar_site_project.png

プロジェクトファイルの書き方

サンプルではすでにあるものを使用しましたが、実際に自分のプログラムに対して SonarQube を使いたい場合は プロジェクトファイル(sonar-project.properties)を作成します。
# プロジェクトの識別用キー
sonar.projectKey=my:project
# プロジェクト名
sonar.projectName=My project
# プロジェクトのバージョン
sonar.projectVersion=1.0
 
# ソースファイルのあるフォルダー
# sonar-project.properties からの相対パス
sonar.sources=.

# 対象言語
sonar.language=c++
 
# ソースの文字コード
sonar.sourceEncoding=UTF-8
よく使用する項目を表にまとめました。 他の項目については SonarQube のドキュメントを参照してください。
項目名(Key) 説明
projectKey プロジェクトを識別するためのキー。使用している環境で一意(ユニーク)にならなければならない。
使用可能文字は アルファベットの小文字、数字、'-'、'_'、'.'、':' の記号。ただし、数字のみは不可。
projectName プロジェクト名。 Web 上でのプロジェクトの表示名となる。
projectVersion プロジェクトのバージョン
sources ソースのあるフォルダー。プロジェクトファイルからの相対パスで指定
language 対象言語。 省略化するとマルチ言語として処理
sourceEncoding ソースファイルの文字コード


SonarQube の 4.2 以上ではマルチ言語モードといって言語を指定する必要がなくなりました。 すべての言語で対応しているわけではありませんが、 C++ では対応しています。 ちなみに対象言語として C++ を明示的に指定する場合、 cpp とすると有料版の C++ のプラグインが呼ばれます。 Community 版の場合は c++ と書く必要があります。


また、 sourceEncoding でソースの文字コードは指定可能ですが、 プロジェクトファイル自体は BOM なし UTF-8 で記述する必要があります。

プロジェクトの削除

プロジェクトの追加はスキャナーを実行すると、自動的に追加されます。 最後に逆のプロジェクトの削除についても簡単に説明しておきます


プロジェクトの削除は Web 上で行えます。
 [設定] → [Projects] → [Management]
上記の順でたどり、削除したいプロジェクト項目の [Delete] を選択すると削除されます。

soft_sonar_site_delproj.png



関連記事
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
114位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
15位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

12月 | 2025年01月 | 02月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。