前回は、Dockerを使ってローカル環境にSonarQube Serverを立ち上げる方法をご紹介しました。
(前回の記事:Hello World!初めてのコードスキャンを実行してみよう)
今回はその続編です!
「コードを書くたびに手動で解析するのは面倒...」
そんな悩みを解決するために、GitHub Actionsと連携して、プルリクエスト(PR)を作成したら自動で解析が走る仕組みを作ってみましょう。
これができると、コードレビューの前に自動でバグやコードスメル(Code Smells)を検知できるようになり、開発効率がグッと上がります。
今回やること
- DockerでSonarQube Serverを起動しておく(前回完了済み)
- SonarQube側でプロジェクトとトークンを準備する
- GitHub Actionsのワークフローを作成する
- PRを作成して、解析結果がSonarQubeに届くか確認する
ステップ1:SonarQube側での準備
まずは、GitHub Actions(スキャナー)がSonarQube Serverにログインしてデータを送信できるように準備します。
1. プロジェクトの作成
SonarQubeにログインし、解析したいリポジトリ用のプロジェクトを作成します。
GUIの案内に従い、「Manually」などで作成し、Project Key(例: my-project)とProject Nameを決定してください。
2. トークンの生成
解析を実行するための認証トークンを発行します。
- 右上のユーザーアイコン > My Account > Security へ移動。
-
Generate Tokens で適当な名前(例:
github-actions)を入力し、Typeを「Project Analysis Token」または「Global Analysis Token」にして生成します。 - 生成されたトークンを必ずコピーしておいてください(この後二度と表示されません)。
ステップ2:GitHub Secretsの設定
トークンやサーバーのURLをコードに直接書くのはセキュリティ上よくありません。GitHubの「Secrets」機能を使って安全に管理しましょう。
- GitHubのリポジトリを開き、Settings > Secrets and variables > Actions へ移動します。
- New repository secret をクリックし、以下の2つを登録します。
| Name | Secret | 説明 |
|---|---|---|
SONAR_TOKEN |
(さっきコピーしたトークン) | SonarQubeの認証用トークン |
SONAR_HOST_URL |
http://your-server-ip:9000 |
SonarQubeサーバーのURL |
⚠️ 重要:サーバーのURLについて
GitHub Actionsはクラウド上で動いているため、あなたのPC内(localhost)にあるSonarQubeには直接アクセスできません。
- 本番運用の場合: インターネットからアクセス可能なサーバーのURLを設定します。
- お試しの場合:
ngrokなどのトンネリングツールを使ってローカル環境を公開するか、今回は「書き方の練習」として進めてください。
ステップ3:GitHub Actionsワークフローの作成
いよいよ自動化の設定です。リポジトリに以下のファイルを作成してください。
ファイルパス: .github/workflows/sonar-analysis.yml
name: SonarQube Analysis
on:
# プルリクエストが作成・更新されたときに実行
pull_request:
types: [opened, synchronize, reopened]
jobs:
build:
name: Build and Analyze
runs-on: ubuntu-latest
steps:
# 1. リポジトリのコードをチェックアウト
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 浅いクローンだと解析精度が落ちるため全履歴を取得
# 2. SonarScannerを実行
- name: SonarQube Scan
uses: sonarsource/sonarqube-scan-action@v2.0.1
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
with:
# ステップ1で決めたProject Keyを指定
args: >
-Dsonar.projectKey=my-project
ポイント
-
on: pull_request: PRを作ったときや、PRにコミットを追加したときに自動で動きます。 -
fetch-depth: 0: SonarQubeが「誰がいつコードを変更したか」などを正しく解析するために必要です。 -
uses: sonarsource/sonarqube-scan-action: 公式が提供しているアクションを利用します。
ステップ4:PRを作成して確認
設定ができたら、実際に動かしてみましょう。
- 適当なブランチを作成し、コードを少し変更してGitHubにプッシュします。
- プルリクエスト(PR)を作成します。
- PRの画面にある「Checks」タブを見ると、GitHub Actionsが動き出しているはずです。
解析結果の確認
Actionsが緑色のチェックマーク(成功)になったら、SonarQube ServerのGUIに戻ってみましょう。
プロジェクトのダッシュボードを見ると、先ほどのPRの内容が解析され、結果が反映されています。
- Bugs: バグの可能性
- Vulnerabilities: セキュリティ脆弱性
- Code Smells: 保守性を下げる書き方
これらがGUI上で可視化されます。詳細をクリックすると、「ソースコードのどの行が悪いのか」までピンポイントで教えてくれます。
まとめ
これで、以下のサイクルが完成しました。
- コードを書く
- PRを出す
- GitHub Actionsが自動でSonarQubeに解析依頼
- SonarQubeで品質をチェック
今回は初心者向けとして基本的な連携のみを行いましたが、これを応用すると「解析結果が悪かったらPRをマージさせない(Quality Gate)」といった強力な設定も可能です。
まずは、自分の書いたコードが自動で解析される便利さを体験してみてください!