概要
SpringBoot2.5によるRestAPIのサンプルプロジェクトを作っていて、色々調べ物をしていたときに、この記事に出会いました。
https://qiita.com/nagareboshi/items/04e3c0be148b5dd9feee
この記事で紹介されている、GitHubのコードはPublicで公開した方が良い理由の1つにsonarcloudの利用が挙げられていました。
・sonarcloudが無料で使えます
書いたコードの品質を自動でレビューし、指摘箇所があればなぜ悪いのかを理由付きで教えてくれます
このサービスを初めて知り、GitHubのPublic公開リポジトリであれば、無料で利用できるということなので、組み込んでみようというのがこの記事の趣旨です。
まずはsonarcloudで色々設定する
sonarcloudとGitHubを連携
sonarcloudのサイトへアクセスし、GitHubのボタンを押下する。
https://sonarcloud.io/
sonarcloudとGitHubを関連づけるためAuthorize SonarCloud
ボタンを押下して認証する。
GitHubのリポジトリをsonarcloudへインポート
自分のGitHubでPublic公開しているリポジトリをsonarcloudへインポートする。
Import projects from GitHub
ボタンを押下。
All repositories
という選択肢もあるようですが、分析したいのはあくまでもSpringBootで開発しているRestAPIのプロジェクトだけなので、今回はOnly select repositories
を選択して、RestAPIプロジェクトのリポジトリを選択し、Install
ボタンを押下する。
GitHub側のパスワード認証を求められるため、パスワードを入力してConfirm password
ボタンを押下
sonarcloud側に組織情報を定義
Key
は、組織を一意に識別するためのコードを指定し、組織名や個人の名前など、どのようなものでもOKとのこと。
ただし、一度指定したら、変更することができないため、test
みたいな適当な名前はやめといた方が良さそうです。
GitHubのPublicリポジトリ1つのみを選択しているため、Free Planで問題ないはず。
FreePlanを選択してCreate Organization
ボタンを押下
分析するプロジェクトを選択
sonarcloudで分析するプロジェクトにチェックをつけてSet Up
ボタンを押下
Preparing Analysisとか表示されてしばらくすると、ConfigureタブにいくつかのAnalysis Methodが表示されます。
sonarcloudの分析処理へ連携するための設定(GitHub Actions)
sonarcloudで分析処理をさせるために、何らかの処理をトリガーを設定する必要があります。
各種CIにも対応しているようですが、ここではGitHub Actions
を利用した方法を採用します。
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のリポジトリに遷移します。
対象となるリポジトリの Settings
タブに遷移し、New repository secret
ボタンを押下。
GitHub Actionsで利用するためのSecretを作成します。
- Analyze with a GitHub Actionのページに表示されていた値を利用して設定する。
- Name : In the Name field, enter
SONAR_TOKEN
と表示されていた部分の値 - Value : In the Value field, enter
*********
と表示されていた部分の値
- Name : In the Name field, enter
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に追加します。
続いて、Create or update your .github/workflows/build.yml
という指示があり、そのbuild.ymlの内容について次のような指定があります。
GitHubのリポジトリに遷移し、Actions
タブにアクセスして、New Workflow
から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
GitHubのmainリポジトリにpushしてGitHub Actionsを動かす
とりあえず、適当にコードなどを修正して、それをGitHubのmainリポジトリにpushする。
すると、定義したGitHub Actionsが動作してしばらくするとグリーンのチェックに変わる。
(過去2回エラーが出ているのは、pom.xmlの定義が悪かったり、テストコードに不具合があったりしたためエラーがでていました。)
sonarcloudでの分析結果を確認する
以下にアクセスして分析結果を確認してみます。
https://sonarcloud.io/projects
RestController Sampleのプロジェクト内にアクセスするとOverview
タブでこのように表示されました。
Bugsのリンク先に遷移すると、静的コード解析の結果、Bugのあるコードを指摘してくれています。
さらに中に遷移するとこんな感じ
なんかこうやって毎回数値化されて状況が確認できるだけで、ワクワクするし開発のモチベーションにもなるし、
もうちょっと顧客向けのレポートとか出せるなら、顧客向けの開発進捗状況の報告用にも使えそうでいいですね。
Surefire Reportとかも出せないかしら。