SonarQube, C++ プラグインの Windows へのインストールと使い方
重複コードなどソースコードのメトリクスを調べてくれる SonarQube (旧 Sonar) というプログラムがあります。
今回はこの SonarQube の Windows へのインストールと C++ での使用法について説明したいと思います。
SonarQube とは
SonarQube はメトリクスツールで、 ソースコードを解析して各種の計測情報を表示してくれます。対応言語
もともと Java 用ですが、プラグインでその他の言語にも使えるようになります。 SonarQube 自体はフリーなのですが、プラグインの言語によっては有料のものもあり、 C/C++ 言語用のプラグインも有料です。ただし、サードパティーとして無料の Community 版もあるので、 今回はそちらでの C++ コードの解析について紹介します。
システム構成
SonarQube 本体は Web サービスのシステムで、計測結果は Web 上で表示されます。計測は SonarQube 用のスキャナーを使って行い、それをデータベース(DB)に保存します。 その DB 上のデータを SonarQube 本体で表示するという構成になっています。
スキャナーとして、今回はコマンドラインツールを使いますが、 Jenkins との連携用など様々な用途に合わせたものも用意されています。
メトリクス結果
実際の計測結果は次のような感じです。すぐ使える計測結果は 3 つです。
- コード行数など
- ファイルの行数やクラス、メソッド、ステートメント(ステップ)数などの計測結果です。
ファイル(クラス)の行数は長すぎるのはよくありません。上限をコーディングルールで決められることも多いです。 個人的にはキリがいいので、 1 ファイル 1,000 行 以内としています。 - Duplication(重複コード率)
- コピペコード、コードクローンとも呼ばれるもので、同じようなコードがどのくらいあるかという数値です。
- 複雑度
- 深いネスティングによって上がります。これは基本的に少ない方が分かりやすいコードです。
DRY 原則もあるように重複しているところを修正する場合、同じような修正を何度もすることになります。 そのため、変更時にそのまま修正するか、作り直した方が早いかの指標として使われることもあります。
言い過ぎを恐れずに言えば、「プロジェクトの崩壊率」、「コーディングのヘタクソ度」といってもいいでしょう。
ただし、重複コードの計測は他のものと違って、正確に出すのは難しいです。 数値が高いものは確かに高いのですが、低くても重複コードは多い可能性はあります。
品質チェック
私がそんなに使い込んでいないので、詳しくありませんが、 ルールを決めたり、CppCheck などと組み合わせたりして、品質の保証にも使えるようです。インストール
ここから Windows でのインストール方法について説明していきます。インストールの方法や使い方は主に以下のページを参考にしています。
本体
SonarQube では SonarQube 本体およびソースコード解析用の Scanner(runner) をインストールします。まず、本体をダウンロードします。
- http://www.sonarqube.org/downloads/
ダウンロードしたファイルを C:\sonarqube などに展開します。
ここでは C:\local\sonar に展開し、バージョン番号を取り除いたとします。 (C:\local\sonar\sonarqube)
スキャナー
スキャナーとして今回はコマンドラインで実行するものを使用します。コマンドライン用のスキャナーは以下のページからダウンロードします。
ダウンロードしたファイルを 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以下のアドレスにアクセスします。
「 Log In 」 する場合、管理ユーザーの初期設定は次のようになっています。
Login | Password |
---|---|
admin | admin |
日本語化
わかりやすいように Web の表示を日本語化します。 ただ、対応していない部分の方が多いので、気持ち程度です。一部のプラグインは Web 上から追加できます。 日本語化プラグインも Web からインストールできます。
管理ユーザーでログイン後、以下の順にたどって [Update Center] を開きます。
Administration → System → Update Center[Available] を選択すると利用可能なプラグインのリストが表示されます。
ただし、プロキシー環境ではリストに何も表示されません。その場合、次節の設定を行ってください。
リストにある [Japanese Pack] の [Install] を選択してインストールします。
この状態はまだ Install Pending です。 再起動するとインストールが完了し、 Web が日本語化されます。
プロキシー設定
プロキシーの設定は (インストールフォルダー)/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 ファイルを取得します。
ダウンロードしたファイルを以下のフォルダーに置きます。
- (インストールフォルダー)/extensions/plugins
使い方
動作確認
動作確認用にサンプルをダウンロードして、適当なところに展開します。 まず、 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 を見てみるとプロジェクトが追加されています。
プロジェクトファイルの書き方
サンプルではすでにあるものを使用しましたが、実際に自分のプログラムに対して 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] を選択すると削除されます。
- 関連記事
-
- Print Screen キーで画面をキャプチャ
- IrfanView でスクリーンショットを作成
- SonarQube, C++ プラグインの Windows へのインストールと使い方
- CppCheck の Windows へのインストールと使い方
- GitHub Desktop を使って楽々 GitHub 入門
Facebook コメント
コメント