LoginSignup
5
6

More than 1 year has passed since last update.

sonarcloudとGitHubをつなげて静的コード解析を手に入れる

Posted at

概要

SpringBoot2.5によるRestAPIのサンプルプロジェクトを作っていて、色々調べ物をしていたときに、この記事に出会いました。
https://qiita.com/nagareboshi/items/04e3c0be148b5dd9feee

この記事で紹介されている、GitHubのコードはPublicで公開した方が良い理由の1つにsonarcloudの利用が挙げられていました。

・sonarcloudが無料で使えます
書いたコードの品質を自動でレビューし、指摘箇所があればなぜ悪いのかを理由付きで教えてくれます

このサービスを初めて知り、GitHubのPublic公開リポジトリであれば、無料で利用できるということなので、組み込んでみようというのがこの記事の趣旨です。

まずはsonarcloudで色々設定する

sonarcloudとGitHubを連携

sonarcloudのサイトへアクセスし、GitHubのボタンを押下する。
https://sonarcloud.io/

スクリーンショット 2021-06-09 19.36.48.png

sonarcloudとGitHubを関連づけるためAuthorize SonarCloudボタンを押下して認証する。

スクリーンショット 2021-06-09 19.37.54.png

GitHubのリポジトリをsonarcloudへインポート

自分のGitHubでPublic公開しているリポジトリをsonarcloudへインポートする。
Import projects from GitHubボタンを押下。

スクリーンショット 2021-06-09 19.38.52.png

All repositoriesという選択肢もあるようですが、分析したいのはあくまでもSpringBootで開発しているRestAPIのプロジェクトだけなので、今回はOnly select repositoriesを選択して、RestAPIプロジェクトのリポジトリを選択し、Installボタンを押下する。

スクリーンショット 2021-06-09 19.40.12.png

GitHub側のパスワード認証を求められるため、パスワードを入力してConfirm passwordボタンを押下

スクリーンショット 2021-06-09 19.41.25.png

sonarcloud側に組織情報を定義

Keyは、組織を一意に識別するためのコードを指定し、組織名や個人の名前など、どのようなものでもOKとのこと。
ただし、一度指定したら、変更することができないため、testみたいな適当な名前はやめといた方が良さそうです。

スクリーンショット 2021-06-09 19.43.22.png

GitHubのPublicリポジトリ1つのみを選択しているため、Free Planで問題ないはず。
FreePlanを選択してCreate Organizationボタンを押下

スクリーンショット 2021-06-09 19.44.58.png

分析するプロジェクトを選択

sonarcloudで分析するプロジェクトにチェックをつけてSet Upボタンを押下

スクリーンショット 2021-06-09 19.45.41.png

Preparing Analysisとか表示されてしばらくすると、ConfigureタブにいくつかのAnalysis Methodが表示されます。

スクリーンショット 2021-06-09 19.46.17.png

sonarcloudの分析処理へ連携するための設定(GitHub Actions)

sonarcloudで分析処理をさせるために、何らかの処理をトリガーを設定する必要があります。
各種CIにも対応しているようですが、ここではGitHub Actionsを利用した方法を採用します。

スクリーンショット 2021-06-09 19.47.28.png

GitHub Actions用のSecretを作成

Analyze with a GitHub Actionというページで、1つ目の手順としてはCreate a GitHub Secretという手順(設定)をします。

In your GitHub repository, go to Settings > Secrets and create a new secret with the following details:

とのことなので、GitHubの自分のリポジトリの設定で、指定された通り、静的コード解析をしたいGitHubのリポジトリに遷移します。

スクリーンショット 2021-06-09 19.48.24.png

対象となるリポジトリの Settingsタブに遷移し、New repository secretボタンを押下。

スクリーンショット 2021-06-09 19.52.45.png

GitHub Actionsで利用するためのSecretを作成します。

  • Analyze with a GitHub Actionのページに表示されていた値を利用して設定する。
    • Name : In the Name field, enter SONAR_TOKEN と表示されていた部分の値
    • Value : In the Value field, enter ********* と表示されていた部分の値

スクリーンショット 2021-06-09 19.54.28.png

GitHub Actionsのbuild.ymlファイルを作成

1.Create a GitHub Secretの手順が完了すると、今度はCreate or update a .github/workflows/build.yml fileの手順(設定)を行います。

私の場合はMavenでプロジェクトの構成管理を行っています。そのため、ここでは Mavenを選択して手順を進めていきます。
Mavenを選択すると、Update your pom.xml file with the following propertiesという項目が表示され、pom.xmlの<properties>に3つの定義を追加する必要があるとのこと。
内容をそのままコピーして、自分のプロジェクトのpom.xmlに追加します。

スクリーンショット 2021-06-12 13.34.10.png

続いて、Create or update your .github/workflows/build.ymlという指示があり、そのbuild.ymlの内容について次のような指定があります。

screencapture-sonarcloud-io-project-configuration-2021-06-09-19_57_57.png

GitHubのリポジトリに遷移し、Actionsタブにアクセスして、New Workflowからbuild.ymlファイルを作成し、内容を次のように指定します。

.github/workflows/build.yml
name: Build
on:
  push:
    branches:
      - main   # ← sonarcloudの指定だとmasterとなっているが、GitHubのデフォルトがmainなので注意
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Cache SonarCloud packages
        uses: actions/cache@v1
        with:
          path: ~/.sonar/cache
          key: ${{ runner.os }}-sonar
          restore-keys: ${{ runner.os }}-sonar
      - name: Cache Maven packages
        uses: actions/cache@v1
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Build and analyze
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # Needed to get PR information, if any
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar

スクリーンショット 2021-06-09 20.06.38.png

GitHubのmainリポジトリにpushしてGitHub Actionsを動かす

とりあえず、適当にコードなどを修正して、それをGitHubのmainリポジトリにpushする。
すると、定義したGitHub Actionsが動作してしばらくするとグリーンのチェックに変わる。
(過去2回エラーが出ているのは、pom.xmlの定義が悪かったり、テストコードに不具合があったりしたためエラーがでていました。)

スクリーンショット 2021-06-12 12.58.55.png
スクリーンショット 2021-06-12 13.01.40.png

sonarcloudでの分析結果を確認する

以下にアクセスして分析結果を確認してみます。
https://sonarcloud.io/projects

スクリーンショット 2021-06-12 13.04.27.png

RestController Sampleのプロジェクト内にアクセスするとOverviewタブでこのように表示されました。

screencapture-sonarcloud-io-dashboard-2021-06-12-13_04_51.png

Bugsのリンク先に遷移すると、静的コード解析の結果、Bugのあるコードを指摘してくれています。

スクリーンショット 2021-06-12 13.51.42.png

さらに中に遷移するとこんな感じ

スクリーンショット 2021-06-12 13.53.35.png

なんかこうやって毎回数値化されて状況が確認できるだけで、ワクワクするし開発のモチベーションにもなるし、
もうちょっと顧客向けのレポートとか出せるなら、顧客向けの開発進捗状況の報告用にも使えそうでいいですね。

Surefire Reportとかも出せないかしら。

5
6
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
5
6