今回は、コード品質を可視化できるSonarQubeを、WindowsのDocker Desktop上にDocker-Composeを使って構築します。SonarQubeがあれば、ソースコードの改善ポイントを定量的に判断することができます。
SonarQubeとは
SonarQubeは、静的分析を使用してコード品質を検査し、バグ・コードの臭い・セキュリティの脆弱性を検出するためのOSSです。SonarQube は、重複コード・コーディング標準・単体テスト・コードカバレッジ・コードの複雑さ・コメント・バグ・セキュリティの脆弱性に関する情報を表示します。
無料版であるSonarQube Communityは、以下の15の言語に対応しています。
Java・JavaScript・C#・TypeScript・Kotlin・Ruby・Go・Scala・Flex・Python・PHP・HTML・CSS・XML・VB.NET
有償版との差異は、Download | SonarQubeに記載されています。
環境構築
WSL2設定
WindowsにDocker Desktop for WindowsおよびWSL2のインストールを行ってください。また、Docker DesktopはLinuxコンテナに切り替えてください。手順の詳細は、Docker Desktop for Windowsでコンテナ起動に記載してあります。
最後に、SonarQube起動用にファイルディスクリプタ等の設定として、PowerShellを起動し、以下のコマンドを実行します。
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
exit
SonarQubeインストール
docker-composeでSonarQubeおよびPostgreSQLを起動します。
docker-compose.ymlは以下の設定としました。SonarQubeのバージョンは、今後C++プラグインを導入したいので、プラグインが記事記載時点でサポートしている7.x系を選択しています(Compatibility Matrix)。
version: "3"
services:
sonarqube:
container_name: sonarqube
image: sonarqube:7.9.5-community
depends_on:
- postgresql
environment:
- sonar.jdbc.url=jdbc:postgresql://postgresql:5432/sonar
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_data:/opt/sonarqube/data
ports:
- "9000:9000"
networks:
- sonarnet
postgresql:
container_name: postgresql
image: postgres:11
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
- sonarnet
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_conf:
sonarqube_extensions:
sonarqube_logs:
sonarqube_data:
postgresql:
postgresql_data:
以下のコマンドで、SonarQubeおよびPostgreSQLを起動します。
docker-compose up -d
2コンテナが起動した場合、ポート9000からログインします。初期ログイン情報は、admin / adminです。
http://localhost:9000/
システム情報から、SonarQubeおよびPostgreSQLの状態が分かります。
プロジェクト作成
管理コンソールから、プロジェクトを作成します。
まず、[Administration] > [Projects] > [Management] > [Create Project]をクリックします。
入力画面が出てくるので、Project NameとKeyを入力します。
Keyは、Scannerで情報をアップロードする際に指定するもので、システムでユニークな値であることが必要です。
Visiblityは、Publicだとログイン前に品質状況の概要が表示されており、privateはログイン後に確認できるものです。運用に合わせて変更してください。
Sonar Scanner導入
コード情報をサーバーに送り込むためのクライアントモジュール(スキャナー)を用意します。
公式サイトから動作環境に合わせたモジュールをダウンロードし、任意のフォルダに展開します。
スキャナーダウンロード
SonarQubeサーバーの配置がhttp://localhost:9000以外の場合、以下のファイルのURLを実環境に合わせて変更します。
<sonar scannerの配置フォルダ>/conf/sonar-scanner.properties
コードチェック
適当なpythonコードを対象に、Scannerを適用しサーバーの画面を確認します。
設定ファイル
解析するソースコードフォルダのトップフォルダに、sonar-project.propertiesファイルを作成し、以下の内容を記述します。
管理コンソールで作成したプロジェクトに指定したNameとKeyを使用しています。
sonar.projectKey=xyz
sonar.projectName=Test-Python
#sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8
実行
sonar-project.propertiesファイルのフォルダをカレントフォルダとして、CMDもしくはPowershellから、sonar-scanner.batを実行します。解析及び情報のアップロードを行ってくれます。
スキャナー実行
アップロードが完了したら、管理コンソールでプロジェクトを覗いてみましょう。ソースコードの診断結果が表示されているはずです。問題がある点は修正を検討しましょう。
集計結果1
集計結果2
まとめ
SonarQubeを使用すると、コードの品質を定量的に表示してくれるので、コードの弱い点、改善点が分かります。日々のコード更新にこの様なチェックを加えて、少しづつ改善していけば、強いコードを作成することができます。弱点のないコードに仕上げていきたいですね。
以上、WSL2上にDockerでSonarQubeを構築する手順の紹介でした。
コメント