1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actionsと連携しPRを自動解析

1
Last updated at Posted at 2025-12-03

前回は、Dockerを使ってローカル環境にSonarQube Serverを立ち上げる方法をご紹介しました。
(前回の記事:Hello World!初めてのコードスキャンを実行してみよう

今回はその続編です!
「コードを書くたびに手動で解析するのは面倒...」
そんな悩みを解決するために、GitHub Actionsと連携して、プルリクエスト(PR)を作成したら自動で解析が走る仕組みを作ってみましょう。

これができると、コードレビューの前に自動でバグやコードスメル(Code Smells)を検知できるようになり、開発効率がグッと上がります。

今回やること

  1. DockerでSonarQube Serverを起動しておく(前回完了済み)
  2. SonarQube側でプロジェクトとトークンを準備する
  3. GitHub Actionsのワークフローを作成する
  4. PRを作成して、解析結果がSonarQubeに届くか確認する

ステップ1:SonarQube側での準備

まずは、GitHub Actions(スキャナー)がSonarQube Serverにログインしてデータを送信できるように準備します。

1. プロジェクトの作成

SonarQubeにログインし、解析したいリポジトリ用のプロジェクトを作成します。
GUIの案内に従い、「Manually」などで作成し、Project Key(例: my-project)とProject Nameを決定してください。

2. トークンの生成

解析を実行するための認証トークンを発行します。

  1. 右上のユーザーアイコン > My Account > Security へ移動。
  2. Generate Tokens で適当な名前(例: github-actions)を入力し、Typeを「Project Analysis Token」または「Global Analysis Token」にして生成します。
  3. 生成されたトークンを必ずコピーしておいてください(この後二度と表示されません)。

ステップ2:GitHub Secretsの設定

トークンやサーバーのURLをコードに直接書くのはセキュリティ上よくありません。GitHubの「Secrets」機能を使って安全に管理しましょう。

  1. GitHubのリポジトリを開き、Settings > Secrets and variables > Actions へ移動します。
  2. 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を作成して確認

設定ができたら、実際に動かしてみましょう。

  1. 適当なブランチを作成し、コードを少し変更してGitHubにプッシュします。
  2. プルリクエスト(PR)を作成します。
  3. PRの画面にある「Checks」タブを見ると、GitHub Actionsが動き出しているはずです。

解析結果の確認

Actionsが緑色のチェックマーク(成功)になったら、SonarQube ServerのGUIに戻ってみましょう。

プロジェクトのダッシュボードを見ると、先ほどのPRの内容が解析され、結果が反映されています。

  • Bugs: バグの可能性
  • Vulnerabilities: セキュリティ脆弱性
  • Code Smells: 保守性を下げる書き方

これらがGUI上で可視化されます。詳細をクリックすると、「ソースコードのどの行が悪いのか」までピンポイントで教えてくれます。


まとめ

これで、以下のサイクルが完成しました。

  1. コードを書く
  2. PRを出す
  3. GitHub Actionsが自動でSonarQubeに解析依頼
  4. SonarQubeで品質をチェック

今回は初心者向けとして基本的な連携のみを行いましたが、これを応用すると「解析結果が悪かったらPRをマージさせない(Quality Gate)」といった強力な設定も可能です。

まずは、自分の書いたコードが自動で解析される便利さを体験してみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?