Code ClimateをPythonリポジトリに適用する

最近名前はよく聞くCode ClimateをGitHubリポジトリ上のPythonソースに適用してみる。


# Code Climateとは
[About - Code Climate](https://codeclimate.com/about)

>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](https://github.com/integrations/code-climate)


## Python Engine
Code ClimateのPython用の解析エンジンはpep8(コードスタイルチェック)とradon(循環的複雑度判定)

- [pep8 · Code Climate Platform](https://docs.codeclimate.com/docs/pep8)
 - https://pypi.python.org/pypi/pep8
- [Radon · Code Climate Platform](https://docs.codeclimate.com/docs/radon)
 - https://pypi.python.org/pypi/radon

それぞれ、単体でもコマンドラインで実行可能。


# GitHubリポジトリにCode Climateを適用
## 対象
PythonのソースがコミットされたGitHubリポジトリ。
以下を対象にする。

https://github.com/vmmhypervisor/golib


# 手順
## Code Climate登録
1. https://codeclimate.com にアクセス
2. GitHubアカウントでサインアップする
3. GitHubリポジトリを登録する画面が出てくる

## 解析
1. 登録画面で解析対象のリポジトリ名を入力して[Import Repo from GitHub]
 - 今回は vmmhypervisro/golib を入力
 - ![00.png](https://qiita-image-store.s3.amazonaws.com/0/107537/fe778264-9f66-f228-417c-bfca0f00d0ad.png)
2. 解析
 - リポジトリを登録すると自動で解析が始まるので終わるまで待つ
1. 解析完了
 - 以下のような画面が出てくる
 - ![01.png](https://qiita-image-store.s3.amazonaws.com/0/107537/239b13c6-71c4-a9da-89be-f94fd7fac2a1.png)

## 結果を見る
[GPA](https://ja.wikipedia.org/wiki/GPA)形式で評価結果が出る。

> GPA（Grade Point Average）とは、各科目の成績から特定の方式によって算出された学生の成績評価値のこと、あるいはその成績評価方式のことをいう。欧米の大学や高校などで一般的に使われており、留学の際など学力を測る指標となる

![GPA.png](https://qiita-image-store.s3.amazonaws.com/0/107537/fb3bbcce-073a-d72a-cc4c-bdc533fb6e00.png)

4点満点なのでそこそこ良さそうに思えるが、いくつを目標にすればいいんだろうか。

ファイル単位で評価が出力されるため、評価が低いファイルを改善していけば全体のGPAは向上できるはず。
評価基準は循環的複雑度(CC)やコードの重複箇所、等。
今回は1ファイルの評価が特に低かったため、そこを改善していこう。


# バッジ登録
結果をバッジとして取得できる。取得したバッジをGitHub/PyPIのREADME等に表示できる。

## バッジ取得
評価結果の`[codeclimate|<数値>]`の箇所(下画像の赤枠部分)をクリックすると

![badge_01.png](https://qiita-image-store.s3.amazonaws.com/0/107537/947628d5-d1a2-649b-ad49-a5a64e27dec2.png)

以下のような画面が出てくる。
この画面の[Markdown]タブを選択して出てくる文字列をコピーして、README.mdにコピペする。

![badge_02.png](https://qiita-image-store.s3.amazonaws.com/0/107537/1bc3157c-34a3-78cd-ed6b-449960b6d648.png)

```text: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リポジトリに反映すると、以下のようにバッジが表示される。

![README.png](https://qiita-image-store.s3.amazonaws.com/0/107537/aeba53dc-34dc-6448-24c4-00e06ee21b60.png)

### GPA値が変化したときのバッジの値
READMEの記載内容はそのままで、GPA値は追従される。

GPAを以下のように低下させてみると

![01.png](https://qiita-image-store.s3.amazonaws.com/0/107537/f83a640c-9576-afce-32c8-b568b8f56197.png)

README.mdのバッジの値も更新された(ただし、反映までに時間がかかる)。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/107537/f67f3353-810e-1fe5-19ec-285b6b4eac25.png)


# 制限事項
Ruby/JavaScript/PHPではテストカバレッジもバッジ表示できるようだが、Pythonは現時点(2016/01)で未サポート。

https://codeclimate.com/repos/568a20326b58a212b2000465/coverage_setup

>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](https://coveralls.io/)
はPythonでもカバレッジ集計とバッジ作成ができるらしい。
導入を検討する。


# Slack連携
[Code Climateの結果をSlackに通知する - Qiita](http://qiita.com/vmmhypervisor/items/d168883e8e902be4a370) で設定してみた。