テクノロジー

SonerQubeを使ったGoプロジェクトの品質管理

はじめに

こんにちは。BE部の吉江です。
普段私の開発しているシステムでは、goプロジェクトの静的解析はgometalinterを使ってまとめてlintを実施することが多いです。
 
実装中はgometalinterだけでほとんど問題ないかなと思うのですが、長期的にコード品質を管理していくために、今回SonarQubeというGUI付きの静的解析ツールの検証を行いましたので紹介できればと思います。
 
この記事ではローカル環境でSonarQubeServerの立ち上げを行い、SonarScannerでGoプロジェクトの静的解析を行うまでの手順を説明します。

SonarQubeとは?

SonarQubeとはOSSのソースコード静的解析ツールです。
SonarQubeを利用すると静的解析を実行し、コード規模, 重複率, 複雑性, 技術的負債やその割合,工数などの情報をGUIで閲覧することができます。
 
解析結果はDBに蓄積されるのでコード品質の推移を確認でき、また用途に合わせて独自の解析ルールを追加することも可能です。

SonarQubeServer

SonarQubeServerは、DBや解析機と連携し品質管理を行い、GUIを提供します。
言語解析に必要なプラグインなどのインストールもこちらから行います。

SonarQubeServerの立ち上げ

SonarQubeServerをDockerで立ち上げる場合には公式イメージがDockerHubに上がっています。
今回は参考リンク(後述)からdocker-compose.ymlをお借りしてSonarQubeServerを立ち上げます。

ディレクトリ構成

DockerFile

postgres用のDockerFileを用意します。

docker-compose.yml

準備ができたらSonarQubeServerを立ち上げます。 しばらく待つとhttp://{docker-host}:9000でアクセスできるようになるので、admin/adminでログインします。
初回ログイン時にはチュートリアルが表示されますが今回はSkipします。

参考リンク

Goプラグインのインストール

SonarQubeでGo言語を解析するにはGoプラグインのインストールが必要です。
ダッシュボードから Administration → Marketplaceに移動します。
画面中部にある検索窓からSonarGoプラグインを検索しインストールしておきます。
インストールを選択すると再起動を促されますので再起動しプラグインを有効可します。

日本語プラグインのインストール

日本語化を行う場合は、上記手順と同様にJapanese Packを検索しインストールします。
こちらもインストールを選択すると再起動を促されますので再起動しプラグインを有効可します。
 
こちらのプラグインは対応バージョンが古く中途半端な翻訳となってしまいました。
完全な日本語化を行いたい場合はプラグインのリポジトリから日本語訳を追加するなど対応が必要そうです。
https://github.com/SonarQubeCommunity/sonar-l10n-ja

SonarScanner

SonarScannerは解析器の役割を持ちます。
SonarQubeServerの準備が終わったら、ローカルPCにSonarScannerのインストールを行います。

SonarScannerのインストール

SonarScannerは下記ページからダウンロードします。
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner#AnalyzingwithSonarQubeScanner-Installation

SonarScanner設定

sonar-scanner.properties設定

SonarScanner本体の設定を行います。
本体の設定は/conf/sonar-scanner.propertiesのファイルを編集します。
デフォルトではSonarQubeServerのURLがhttp://localhost:9000で登録されているので、ホストが異なる場合は修正します。

sonar-project.properties設定

解析対象のプロジェクトディレクトリにsonar-project.propertiesを作成します。
プロジェクト名や解析対象のファイルをこのファイルに指定します。
今回検証するgoプロジェクトの依存管理はdepで行なっているためvenderディレクトリは除外しておきます。

解析

ここまでで、SonarQubeを利用するための設定が完了しました。
プロジェクトディレクトリでsonar-runnerを実行します。 解析が成功するとsonar-scanner.propertiesに記載したSonarQubeServerに結果が送信され、GUI上で解析結果を確認できるようになります。
ダッシュボードを確認すると解析結果が表示されています。
各項目をクリックすると細かい解析結果を参照できます。
例えばコードスメルの指摘などはこんな感じ。

さいごに

以上でSonarQubeの検証を行うことができました。
コードレビューで見逃した項目も機械的に見つけてくれロジックに集中できるので、チーム開発でプロジェクトの品質を保つという意味では強力なツールといえそうです。
 
今回はGoプロジェクトで検証を行いましたが、SonarQubeはプラグインによって様々な言語に対応しているため、プロジェクトの言語に関わらず広く利用できそうです。
また、CIとの連携についても比較的容易に行えるようですので是非チェックしてみていただければと思います。


関連タグ