概要
遅ればせながら、最近にやってようやくSonarQubeを実際に使ってみました。実際に理解してみるとそこまで難しいことではなかったので、まとめておこうと思います。
実際に動かして使ってみるという流れで以下の内容を行います。
- DockerでSonarQubeサーバーを立ち上げる
- 管理画面をさらっとみてみる
- サンプルのJavaプロジェクトをカバレッジつきで解析
- 解析したデータをSonarQubeサーバー上で閲覧
- SonarLintプラグインでIDEと統合する
DockerとJava+Mavenが使える環境であれば、1時間もあれば実際に体験できると思います。
事前要件
このチュートリアルを実行するために必要なものは以下の通りです。
- Docker
- Java 8
- Maven (3.5+)
DockerでSonarQubeを立ち上げる
まずは、以下のdocker-compose.ymlファイルを作成して、適当なフォルダに保存します。
version: '3'
services:
sonarqube:
image: sonarqube:lts
ports:
- 9000:9000
保存したら、起動します。
docker-compose up
しばらくして
app[][o.s.a.SchedulerImpl] SonarQube is up
というメッセージが表示されたら成功です。
管理画面をさらっとみてみる
SonarQubeが起動したら、ブラウザで http://localhost:9000 にアクセスします。正常に起動していればトップページが表示されます。
トップページ
続いてログインしましょう。デフォルト状態のユーザー名は「admin:admin」になっています。
ログインするとチュートリアル画面が開きます。スキップしても問題ないのですが、どのみち後で行う作業なので済ませておきましょう。
チュートリアルページ1
ここでは、トークンを生成するように促されます。トークンは、ビルドツールがSonarQubeサーバーにアクセスするときに使います。個々人のユーザー名やパスワードをビルドの設定ファイルに書くのはよくないですからね。
トークンの名前を適当に入力して、Generateボタンを押すとトークンが生成されます。この値は後から参照できないのでメモ帳にペースとしておきましょう。もしなくなっても後から再生成できるのであまり気にしなくても大丈夫です。
チュートリアルページ2
続いて、使用している言語とビルドツールを聞いてきます。このチュートリアルではJavaとMavenを使用するのでその通りに選択します。すると以下の画面が出てきます。
右側に表示されたMavenコマンドを使うとサクッとSonarQubeを使えますよ、という意味ですね。これについては後ほど実行するので、Finish this tutorialを押してチュートリアルを終了させましょう。
プラグインを更新
SonarQubeは機能ごとにプラグインというかモジュールのようになっていて、サーバー本体とは別に機能追加や削除、更新ができます。
Dockerイメージで提供されているSonarQubeは常に最新版とは限らないので、まずはプラグインを更新しておきましょう。
手順は
- Administrationメニューを選択
- Marketplaceタブを選択
- Updates Onlyボタンを押して、更新が必要なプラグインだけを表示する
- 更新が必要な全てのプラグインに対して、右側のUpdate to ...ボタンを押す
- 更新が完了して、全てのプラグインがUpdate Pending状態になるまで待つ
- 画面上部にRestartボタンが表示されたら、Restartボタンを押してSonarQubeを再起動させる
再起動したら作業は終了です。
プロジェクトをカバレッジつきで実行
ではいよいよ、JavaプロジェクトをSonarQubeを使って解析します。
すでにMavenのプロジェクトをお持ちの場合はご自分の既存プロジェクトを使っても問題ありませんが、ここでは便宜上、サンプルのプロジェクトを用意しました。ダウンロードはこちらからできます。
ファイルをダウンロードしたら、適当なフォルダで解凍します。
コマンドラインで解凍したフォルダに移動し、以下のMavenコマンドを実行します。実行する前に<TOKEN>の値を、先ほど自分で生成したトークンの値に置き換えてください。
mvn clean \
jacoco:prepare-agent \
test \
jacoco:report sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=<TOKEN>
Mavenのビルドが正常に終了して、以下のようなメッセージが出力されたら成功です!
[INFO] ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/hello:hello-world
[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=AWldrN3398fXTyexcrLn
[INFO] Task total time: 7.454 s
メッセージの中には2つのURLが含まれています。最初のURL
http://localhost:9000/dashboard/index/hello:hello-world
は、SonarQube上でこのプロジェクトの分析結果にアクセスするためのURLです。このURLをプロジェクメンバーと共有して現在のプロジェクトのレポートにアクセスできます。
2番目のURL、http://localhost:9000/api/ce/task?id=AWldrN3398fXTyexcrLn (パラメータidの値は毎回変わります) は、アップロードしたデータの処理状況を確認するために使います。サンプルプロジェクトはかなり小さいためすぐに解析が完了しますが、大きなプロジェクトをアップロードするとSonarQubeサーバー側での解析にかなり時間がかかります。そんな時はここを見ると現在の進捗状況を確認できるよという意味です。
解析したデータをSonarQubeサーバー上で閲覧
それではいよいよ、SonarQubeサーバー上でレポートを閲覧してみましょう。
先ほどのビルドのコマンドを見ると、メッセージの中に2つのURLが含まれています。
[INFO] ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/hello:hello-world
[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=AWldrN3398fXTyexcrLn
[INFO] Task total time: 7.454 s
最初のURL(http://localhost:9000/dashboard/index/hello:hello-world)は、SonarQube上でこのプロジェクトの分析結果にアクセスするためのURLです。このURLをプロジェクメンバーと共有して現在のプロジェクトのレポートにアクセスできます。
以下のようなレポートにアクセスできたら成功です。どのような情報が見れるのか、一通りクリックしてみましょう。
SonarLintプラグインでIDEと統合する
最後に、先ほど作成したプロジェクトをIDEと統合する方法を紹介します。使用するのはSonarLintというプラグインで、EclipseやIntelliJなどメジャーなIDEで利用できます。
SonarLintは、サーバーがなくても利用できますが、サーバーと連携させることで、SonarQube上で設定されている開発チーム共通のコーディングルールを適用したりといった機能が利用できます。
ここではIntelliJを利用してSonarLintの設定を行います。
- SonarLintは公式のプラグインレポジトリからインストールできるので、そこから検索、インストールしてください。
- インストールが完了したら、Preferences > Other Settings > SonarLint General Settingsを開き、サーバーを追加します。
- サーバーが追加されたら、Update Bindingsボタンを押して、最新のルールなどをサーバーから取得します。
- 次にPreferences > Other Settings > SonarLint Project Settingsを開き、先ほど設置したサーバーを選択します。
- プロジェクトを検索すると、先ほど作成したプロジェクトが表示されるので、それを選択します。
以上です。これでSonarLintはサーバー上で設定したQuality Profile(コーディングルールのセット)を使用して解析を行ってくれるはずです。
後片付け
作業が終了したら、Dockerを終了させましょう。
終了するには、docker-composeを実行中のターミナルでCtrl + Cを押せば終了します。
まとめ
以上、SonarQubeを実際に体験してみました。
この手のシステムは、限定された権限で機能の一部にしかアクセスできない状態で学習するとかえってわけがわからなくなる気がします。それ良いも、壊れてもいい環境で管理者権限を持った状態で思う存分使ってみるとイメージを掴みやすいかなと思いますので、この機会にSonarQubeの具体的なイメージがつかんでいただければ幸いです。