最近名前はよく聞くCode ClimateをGitHubリポジトリ上のPythonソースに適用してみる。
Code Climateとは
Code Climate consolidates the results from a suite of static analysis tools into a single, real-time report, giving your team the information it needs to identify hotspots, evaluate new approaches, and improve code quality.
ソースコード静的解析ツールをまとめて色々実行してくれる。
対応言語はRuby、JavaScript、Python、等。
GitHubのIntegrationsの中でも紹介されている。
Install Code Climate · Integrations Directory
Python Engine
Code ClimateのPython用の解析エンジンはpep8(コードスタイルチェック)とradon(循環的複雑度判定)
- pep8 · Code Climate Platform
- https://pypi.python.org/pypi/pep8
- Radon · Code Climate Platform
- https://pypi.python.org/pypi/radon
それぞれ、単体でもコマンドラインで実行可能。
GitHubリポジトリにCode Climateを適用
対象
PythonのソースがコミットされたGitHubリポジトリ。
以下を対象にする。
手順
Code Climate登録
- https://codeclimate.com にアクセス
- GitHubアカウントでサインアップする
- GitHubリポジトリを登録する画面が出てくる
解析
- 登録画面で解析対象のリポジトリ名を入力して[Import Repo from GitHub]
- 解析
- リポジトリを登録すると自動で解析が始まるので終わるまで待つ
- 解析完了
結果を見る
GPA形式で評価結果が出る。
GPA(Grade Point Average)とは、各科目の成績から特定の方式によって算出された学生の成績評価値のこと、あるいはその成績評価方式のことをいう。欧米の大学や高校などで一般的に使われており、留学の際など学力を測る指標となる
4点満点なのでそこそこ良さそうに思えるが、いくつを目標にすればいいんだろうか。
ファイル単位で評価が出力されるため、評価が低いファイルを改善していけば全体のGPAは向上できるはず。
評価基準は循環的複雑度(CC)やコードの重複箇所、等。
今回は1ファイルの評価が特に低かったため、そこを改善していこう。
バッジ登録
結果をバッジとして取得できる。取得したバッジをGitHub/PyPIのREADME等に表示できる。
バッジ取得
評価結果の[codeclimate|<数値>]
の箇所(下画像の赤枠部分)をクリックすると
以下のような画面が出てくる。
この画面の[Markdown]タブを選択して出てくる文字列をコピーして、README.mdにコピペする。
[![Code Climate](https://codeclimate.com/github/vmmhypervisor/golib/badges/gpa.svg)](https://codeclimate.com/github/vmmhypervisor/golib)
# golib
Personal python utility library
REAMDME.mdをGitHubリポジトリに反映すると、以下のようにバッジが表示される。
GPA値が変化したときのバッジの値
READMEの記載内容はそのままで、GPA値は追従される。
GPAを以下のように低下させてみると
README.mdのバッジの値も更新された(ただし、反映までに時間がかかる)。
制限事項
Ruby/JavaScript/PHPではテストカバレッジもバッジ表示できるようだが、Pythonは現時点(2016/01)で未サポート。
Python Not Yet Supported:
Though it's in our roadmap, we don't currently support test coverage for Python repositories.
残念。
追記
Coveralls - Test Coverage History & Statistics
はPythonでもカバレッジ集計とバッジ作成ができるらしい。
導入を検討する。
Slack連携
Code Climateの結果をSlackに通知する - Qiita で設定してみた。