はじめに
はじめまして、5月からSTORES 決済でバックエンドエンジニアをしている @nannany です。
STORES 決済チームでは、ソースコードのクオリティ向上を目的としたツールである"Codacy"を開発サイクルに組み込んでいます。
ここではCodacyの特徴、導入方法、導入して感じたことについて振り返っていきます。
Codacyの特徴
CodacyのドキュメントにはCodacyでできる様々なことが網羅されていますが、ここでは料金体系、静的解析機能、ダッシュボード、GitHubとの連携について触れていきます。
料金体系
パブリックリポジトリであればCodacyの大半の機能を無料で使えますが、プライベートリポジトリで開発するにあたっては料金を支払う必要があります。(Codacyの料金体系)
料金はCodacyを利用するユーザーごとにかかり、年払いか月払いかによっても変わります。 表にすると以下のようです。
料金(月払い) | 料金(年払い) |
---|---|
$18 per user/month | $15 per user/month |
静的解析
Codacyと解析対象のリポジトリを連携するだけで、Codacyがソースコードの静的解析を行ってくれます。 つまり、開発チーム側でCheckStyleの設定をする、といったことをせずに即静的解析を始めることができます。
対応している静的解析ツールはこのページに記載されている通りで、Javaであれば
を利用することができます。
ダッシュボード
Codacyでは静的解析の結果、カバレッジ情報を一覧できるダッシュボードがデフォルトで用意されています。
ダッシュボードでは下記のように、静的解析やカバレッジの現状・経過を一目で確認することができます。
GitHubとの連携
Codacyの解析結果とGitHubのPull Requestを連携させることもできます。(GitHubとの連携)
まず、Codacyの静的解析結果をGitHubのファイル変更差分確認画面で見ることができます。
また、Codacy側でPull requestのマージをブロックする閾値を決めることができます。基準を満たさないPull Requestは下記のように弾かれます。
導入方法
上記機能はリポジトリをCodacyに連携するだけで概ね導入できます。
リポジトリとCodacyの連携については直感的な操作で実現できるので割愛し、ここでは、
について記述します。
カバレッジレポートをCodacyに連携する方法
STORES 決済バックエンドチームでは、カバレッジレポートの連携をGitHub ActionsによるCIにて行いました。
前提として、STORES 決済バックエンドチームでは、Javaを利用した開発をしており、JaCoCoを利用してカバレッジを取得しています。 Pull Requestが発行されたタイミングでGitHub ActionsによるCIが始まり、その中でカバレッジを算出し、Codacyに連携しています。
Codacyにはカバレッジ収集用のGitHub Actionsが用意されており、それを使ってカバレッジレポート連携をしています。
具体的な設定としては、下記のような記述をGitHub Actionsの設定ファイルに加えました。(CODACY_PROJECT_API_TOKEN
はCodacy側で発行したProject API TokenをGitHubのActions secretsに設定したものです)
- name: Upload coverage to Codacy uses: codacy/codacy-coverage-reporter-action@master with: project-token: ${{ secrets.CODACY_PROJECT_API_TOKEN }} coverage-reports: build/reports/jacoco/report.xml
カバレッジ連携のための設定は以上です。
Pull Requestのマージをブロックする閾値の設定方法
マージブロックの閾値設定は下記の画面から行います。
下記の画面は、該当リポジトリのダッシュボードを開いた状態で、「Settings -> Quality Settings」とたどっていけば表示できます。
この画面から、該当のリポジトリのPull Requestが満たすべき条件(新規の静的解析指摘件数、カバレッジのパーセンテージ等)を設定することができます。
さいごに
Codacyを利用してみて、特に良いと感じた点は、
- リポジトリ連携するだけで静的解析を行ってくれる
- Pull Requestと連動してブロックしてくれる
です。
1つ目に関しては、Codacyと連携するだけで静的解析ができる、という手軽さに着目した評価です。
CheckStyleやFindBugsといった静的解析ツールをアプリ側で設定する作業は案外骨の折れるもので、想定より工数がかかることが往々にしてあると思いますが、その部分をCodacyでカバーしてくれるのは素晴らしいと感じました。
2つ目に関しては、Codacyが機械的に強制力のあるレビューをしてくれる点に着目しました。
CIでの解析結果を守らせることがレビュアーの責務になる、レビュアーのやることが増える、(レビュアーが忙しくなって)解析結果を無視し始める、という流れはよくあることだと思います。Codacyが、CIの結果いかんでPull Requestをブロックすることで、指摘事項修正がレビュイーの責務であることが明示され、レビュアーの責務が一部解消されることが左記の流れを断ち切る一助になると感じました。
以上、Codacyの特徴、導入方法、導入して感じたことについて振り返りました。
上記以外にもCodacyの機能はあり、使いこなせば有益なものもあると思うので、Codacyの機能をフル活用できるように探求していきたいです!