🔍

SonarQubeを使ってコードの静的解析を行う

2024/11/07に公開

1. はじめに

開発組織では、コードの品質を継続的に管理するために、静的解析ツールを導入することが多いです。
その中でも、SonarQubeはとても使いやすく、多くの機能を持っているため、導入することでコードの品質を継続的に管理することができます。
本記事では、SonarQubeのインストールからGitHub Actionsとの連携までを紹介します。

SonarQubeとは

SonarQubeは、コードの品質を継続的に管理するためのオープンソースのプラットフォームです。30以上のプログラミング言語に対応し、コードの品質、セキュリティの脆弱性、テストカバレッジなどを自動的に分析・可視化することができます。

主な特徴として:

  • バグやセキュリティの脆弱性の早期発見
  • コードの重複、複雑性、コーディング規約違反の検出
  • テストカバレッジの測定
  • 技術的負債の定量化

主な機能と特徴

  1. コード品質の分析

    • 潜在的なバグの検出
    • コードスメルの特定
    • コーディング規約違反のチェック
    • 複雑度の測定
  2. セキュリティ脆弱性の検出

    • OWASP Top 10の脆弱性チェック
    • CWE(Common Weakness Enumeration)に基づく分析
    • セキュリティホットスポットの特定
  3. 継続的インスペクション

    • CI/CDパイプラインとの統合
    • プルリクエスト時の自動分析
    • 品質ゲートによる品質基準の強制
  4. 可視化とレポーティング

    • 直感的なダッシュボード
    • トレンド分析
    • カスタマイズ可能なレポート

導入のメリット

  1. 品質の向上

    • 一貫した品質基準の適用
    • 早期のバグ発見による修正コストの削減
    • テクニカルデットの可視化と管理
  2. 開発効率の改善

    • 自動化された品質チェック
    • コードレビューの効率化
    • 問題箇所の特定が容易
  3. チーム開発の促進

    • 共通の品質基準による開発
    • 客観的な指標に基づく改善
    • ナレッジの共有と蓄積
  4. セキュリティの強化

    • 脆弱性の早期発見
    • セキュリティベストプラクティスの適用
    • コンプライアンス要件への対応

SonarQubeを導入することで、開発チームは品質の高いコードを継続的に提供することができ、長期的なプロジェクトの保守性と信頼性を向上させることができます。

2. SonarQubeのインストールと初期設定

2.1. インストール方法

本記事では、Docker環境での構築方法を紹介します。
また、スペックに対する要件は公式ドキュメントを参照してください。

sudo docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest

ブラウザでhttp://<ホスト名>:9000にアクセスすると、SonarQubeの初期設定画面が表示されます。
admin/adminでログインし、デフォルトのパスワードを変更します。

注意点:Adminユーザーはなるべく使わないほうが良いので、本格的に運用する場合はSSOの設定を行ってください。

image

2.2. GitHub Appの作成と設定

SonarQubeとGitHubを連携させるために、GitHub Appを作成します。

手順 1: GitHub Appの作成

GitHub Appの作成に関する一般的な情報は、GitHubのドキュメントを参照してください。

アプリの設定には以下の項目を指定します:

  • GitHub App Name: アプリの名前。
  • Homepage URL: 任意のURLを使用できます(例: https://www.sonarqube.org/)。
  • User authorization callback URL: インスタンスのベースURL(例: https://yourinstance.sonarqube.com)。
  • Webhook URL: セキュリティ向上のため、バージョン8.9LTS以降、デフォルトでSonarQubeサーバーを指すWebhookは許可されていません。この機能を無効にすることを推奨します。GitHubでのセキュリティ脆弱性に対するコードスキャン警告を有効にしたい場合を除き、Webhook Activeチェックボックスをクリアし、Webhook URLおよびWebhook secretフィールドを空にしてGitHub Appを作成してください。

以下のリポジトリ権限に対してアクセスを付与します:

権限 アクセス
Checks Read & Write
Metadata Read-Only
Pull Requests Read & Write
Commit statuses Read-Only

プライベートリポジトリの場合、以下のリポジトリ権限に対してアクセスを付与します:

権限 アクセス
Contents Read-Only

GitHub認証を設定する場合、上記のリポジトリ権限に加えて、以下のアカウント権限に対してアクセスを付与します:

権限 アクセス
Email addresses Read-Only

さらに、以下の組織権限に対してアクセスを付与します:

権限 アクセス
Members Read-Only
Projects Read-Only

手順 2: 組織にGitHub Appをインストール

次に、組織にGitHub Appをインストールする必要があります。GitHub Appsのインストールに関する詳細は、GitHubのドキュメントを参照してください。

手順 3: SonarQubeのグローバル設定をGitHub Appの情報で更新

GitHub Appを作成しインストールした後、SonarQubeのグローバル設定を更新して統合を完了し、GitHubプロジェクトのインポートを可能にします。

管理画面に移動し、以下の設定を指定します:

  • Configuration Name: プロジェクトレベルでGitHub設定を識別するための名前
  • GitHub URL: GitHub Enterpriseの場合は: https://github.company.com/api/v3、GitHub.comの場合は https://api.github.com/。
  • GitHub App ID: GitHub Appのページで確認できます。Settings > Developer Settings > GitHub Appsの下にあります。
  • Client ID: GitHub Appのページで確認できます。
  • Client secret: GitHub Appのページで「Client secrets」にて「Generate new secret」をクリックして生成します。
  • Private Key: GitHub Appのプライベートキー。GitHub AppのページのPrivate keysの下でファイルを生成できます。ファイルの全内容をここにコピー&ペーストしてください。

2.3. プロジェクトの作成

GitHub Appのセットアップが完了したら、GitHub project onboardingでプロジェクトを作成します。
まずはGitHubのリポジトリをSonarQubeにインポートします。
✴︎ 何も表示しない場合、まずGitHub Appのインストールを行ってください。

image

次に、「Set up project for Clean as You Code」ステップにて、new codeのbaselineを作成します。
下記二択がありますが、今回はグローバル設定を使用します。

  • Use the global setting: グローバル設定を使用
  • Define a specific setting for this project: もっと細かい設定を行う場合はこちらを選択

image

2.4. GitHub Actionsの設定

今回はGitHub Actionsを使用するため、Analysis Methodにて「With GitHub Actions」を選択します。

image

続いて案内通りにGitHub SecretsとWorkflow fileを設定します。

GitHub Secrets:

  • SONAR_TOKEN: SonarQubeのトークン
  • SONAR_HOST_URL: SonarQubeのURL

Workflow file:

  • 案内通りに設定し、コードをpushすると、GitHub Actionsが走ります。

image

3. SonarQube管理画面の使い方

初めてのGitHub Actionsを走らせると、SonarQubeの管理画面にも結果が反映されます。
SonarQubeの管理画面では、コードの品質に関する詳細な情報を確認できます。以下は、主な要素の説明です。

Overview

  1. Quality Gate
  • Quality Gate: コードの品質基準を満たしているかどうか。緑色のチェックマークは「Passed」を意味し、基準を満たしていること
  1. New Code / Overall Code
  • New Code: 新しく追加されたコードの品質
  • Overall Code: プロジェクト全体のコード品質
  1. 各メトリクス
  • Security: セキュリティに関するオープンな問題の数
  • Reliability: 信頼性に関するオープンな問題の数
  • Maintainability: 保守性に関するオープンな問題の数
  • Coverage: テストカバレッジの割合。0.0%の場合、テストが行われていないことを意味する
  • Duplications: コードの重複率。4.9%は、全体のコードの中で重複している部分の割合
  • Security Hotspots: セキュリティ上のホットスポットの数。潜在的なセキュリティリスクが存在するコードの部分
  1. Activity
  • Activity: 過去の分析結果や問題の履歴を確認できる。最初の分析結果や、問題の数、カバレッジ、重複率などが表示される

この管理画面を活用することで、コードの品質を継続的に監視し、改善点を特定することができます。定期的にこの情報を確認し、チーム全体で品質向上に努めましょう。

image

Issues

SonarQubeのIssuesページは、コードの品質に関する問題を確認できる場所です。

  1. フィルター
  • My Issues: 自分に関連する問題
  • All: プロジェクト内のすべての問題
  • Clean Code Attribute: コードの一貫性、意図性、適応性、責任に基づく問題をフィルタリングする
  • Software Quality: セキュリティ、信頼性、保守性に関する問題をフィルタリングする
  • Severity: 問題の深刻度に基づいてフィルタリングする
  1. Issuesのリスト
  • 各問題は、ファイル名、問題の種類、状態(オープンまたは未割り当て)、および関連するメトリクス(例: 努力時間、コードスメルの種類)とともに表示される
  • 問題の詳細をクリックすることで、具体的なコードの行や推奨される修正方法を確認できる
  1. Issuesの種類
  • Maintainability: 保守性に関する問題
  • Performance: パフォーマンスに関する問題
  • Consistency: 一貫性に関する問題
  • Intentionality: 意図性に関する問題
  1. バルク変更
  • 複数の問題を一度に選択し、バルクで変更を行うことができる

このIssues画面を活用することで、コードの問題を迅速に特定し、修正することが可能です。定期的にこの画面を確認し、チーム全体でコードの品質向上に努めましょう。

image

Security Hotspots

Security Hotspotsページは、セキュリティ上のホットスポットを確認できる場所です。

  1. Security Hotspotsの概要
  • Security Hotspots: セキュリティ上のホットスポットは、コードが潜在的なリスクを含んでいる可能性がある箇所。これらは、特に注意が必要な部分です。
  1. レビューの優先度
  • Review priority: 各ホットスポットには優先度が設定されており、リスクの程度に応じて「Low」「Medium」「High」などの評価が付けられる
  1. 問題の詳細
  • 各ホットスポットには、問題の説明やリスクの評価が表示される。具体的なコードの行も示され、どの部分が問題であるかを確認できる
  1. アクション
  • To review: まだレビューされていないホットスポットを表示する
  • Acknowledged: リスクを認識したが、修正が不要と判断したホットスポットを表示する
  • Fixed: 修正済みのホットスポットを表示する
  • Safe: リスクがないと判断されたホットスポットを表示する
  1. レビューの実施
  • 各ホットスポットには「Review」ボタンがあり、リスクを評価し、必要に応じて修正を行うことができる

このSecurity Hotspots画面を活用することで、コードのセキュリティリスクを迅速に特定し、適切な対策を講じることが可能です。定期的にこの画面を確認し、チーム全体でセキュリティの向上に努めましょう。

image

Measures

Measuresページは、コードの品質に関するメトリクスを確認できる場所です。

  1. プロジェクト概要
  • Project Overview: プロジェクト全体の品質を把握するための概要
  1. メトリクスのカテゴリ
  • Security: セキュリティに関するメトリクス
  • Reliability: 信頼性に関するメトリクス
  • Maintainability: 保守性に関するメトリクス
  • Security Review: セキュリティレビューに関するメトリクス
  • Coverage: テストカバレッジに関するメトリクス
  • Duplications: コードの重複に関するメトリクス
  • Size: コードのサイズに関するメトリクス
  • Complexity: コードの複雑性に関するメトリクス
  • Issues: コードに関する問題点
  1. リスクの視覚化
  • Risk Chart: リスクを視覚的に表示するチャート。X軸には技術的負債、Y軸にはカバレッジが表示され、バブルのサイズはコード行数を示す。色は信頼性評価とセキュリティ評価の悪化を示す

このMeasures画面を活用することで、プロジェクトの品質を定量的に評価し、改善点を特定することが可能です。定期的にこの画面を確認し、チーム全体で品質向上に努めましょう。

image

Code

Codeページは、コードの詳細を確認できる場所です。

  1. コードの概要
  • Lines of Code: プロジェクト内のコード行数を示します。これにより、プロジェクトの規模を把握できる
  1. メトリクス
  • Security: セキュリティに関するオープンな問題の数
  • Reliability: 信頼性に関するオープンな問題の数
  • Maintainability: 保守性に関するオープンな問題の数
  • Security Hotspots: セキュリティ上のホットスポットの数
  • Coverage: テストカバレッジの割合。0.0%の場合、テストが行われていないことを意味する
  • Duplications: コードの重複率。これにより、コードのクリーンさを評価できる
  1. ファイルの選択
  • Select files: 特定のファイルを選択して、そのファイルに関する詳細なメトリクスを表示できる
  1. ナビゲーション
  • Navigate: プロジェクト内の異なるファイルやディレクトリを簡単に移動できる
    このCodeページを活用することで、プロジェクト内のコードの品質を詳細に評価し、問題点を特定することが可能です。定期的にこのページを確認し、チーム全体でコードの品質向上に努めましょう。

image

Activity

Activityページは、プロジェクトのアクティビティを確認できる場所です。

  1. イベントのフィルタリング
  • Filter events: 特定のイベントをフィルタリングして表示することができる。これにより、特定の期間や種類のイベントを簡単に確認できる
  1. 日付範囲の設定
  • Start Date / End Date: 分析結果を特定の期間で絞り込むための日付範囲を設定できる。これにより、過去の特定の分析結果を確認できる
  1. イベントのリスト
  • 各イベントには、日時、内容、バージョン情報が表示される。これにより、プロジェクトの進捗や変更履歴を把握できる
  1. グラフタイプの選択
  • Graph type: 表示するグラフの種類を選択できる。例えば、問題の数やその他のメトリクスを視覚的に表示できる

このActivityページを活用することで、プロジェクトの進捗や変更履歴を把握し、チーム全体でのコミュニケーションを円滑にすることが可能です。定期的にこのページを確認し、プロジェクトの状況を把握しましょう。

image

4. まとめ

以上で、SonarQubeの導入と基本的な使い方を紹介しました。
SonarQubeを活用することで、開発チームは高品質なコードを持続的に提供し、長期的なプロジェクトの保守性と信頼性を向上させることができます。定期的な分析と改善を行うことで、コードの品質を維持し、チーム全体での品質向上に努めましょう。
また、SREとしての視点から、全てのプロジェクトのコード品質を管理することで、より高い信頼性と可用性を実現できます。

Discussion