CodeClimate をチームで導入してみた

この記事は Sansan Advent Calendar 2015 の 16 日目です。

CodeClimate をチームで導入してみたのでその経緯や良かった点などを書きたいと思います。

もともとの課題

ある日の会話

よくチームの KPT とかで、こんな会話がありました。

A 「最近コード汚くなってきましたねー」

B 「うーん、そうだね、言われてみれば確かに」

C 「・・・そう?」

コードの汚さは人によって価値観が違う

チームとして「コードは綺麗であるべき」という価値観はみんな持てているとは思います。 一方で、サービスのために一旦ある程度汚くても動くものをスピードを持って作らなければならないことはよくある話です。 (もちろん綺麗なコードをスピードを持って作れるようにしていく努力は惜しまないことを前提に。)

問題は、今どれくらい汚くなっていて、チームとしてどれくらい課題なのか、という共通認識を持つのがなかなか難しいということでした。

そこで CodeClimate

きっかけは、僕らのチームが Slack (有償)を導入し始めて、僕が個人的な興味で「もっと Slack の Integration 活用したいなぁ」と思って Integration の一覧を見て面白いサービスないかなぁと見ていて CodeClimate を見つけたことでした。

前述のような課題もあり、ちょっと高いけど入れてみようか、ということが部内で合意取れたので使ってみました。

CodeClimate とは

https://codeclimate.com/

簡単に言うと、

  • コードをファイル単位、リポジトリ単位でスコアリングしてくれる
  • コードの汚そうなところを Issue として管理してくれる

というものです。

対応している言語はざっと Document を見る限り

なんかが対応しているみたいです。

僕らのチームは Ruby で開発しているので、これ以降は Ruby における話をします。

お値段

まず、Public リポジトリは、他のサービスとかと同じように無料で利用できます。 Private リポジトリは、僕らが導入した頃はリポジトリ数でプランが分かれていて、利用していたのは 10 リポジトリまで $ 199 というプランでしたが、 最近変わったようで、今はユーザー数で課金がされるようになったようです。

https://codeclimate.com/pricing

CodeClimate の始め方

すごく簡単です。

  • CodeClimate に Sign Up する(Github アカウントでログインできます)
  • 解析したいリポジトリを選択する

これだけです。

どんなかんじか

CodeClimate の管理画面

f:id:yohei1229:20151223093013p:plain

こんな感じです。 リポジトリ全体のスコアは週次でメールでもお知らせしてくれます。

Github Pull Request Integration

CodeClimate には Github Pull Request Integration も用意されていて、 利用するとこんな感じに PR 上で新しい Issue の状況を教えてくれます。 f:id:yohei1229:20151223093636p:plain

Slack Integration

Slack Integration を利用すると、default ブランチにマージされる度に、スコアの変更を教えてくれます。

あと、CodeClimate はこの情報も含めて Feed も提供してくれていて、僕らのチームでは Slack の RSS Integration を利用して この Feed を Slack に流すようにしています。 f:id:yohei1229:20151223093511p:plain

使ってみた感想

CodeClimate のスコアをキーに、綺麗になった、汚くなったみたいな話がチームでされるようになった

こんな感じに、スコアを上げるモチベーションにもなりつつあります。

f:id:yohei1229:20151223093119p:plain

急いで作らないといけなくて汚く書いてしまっているのがわかって、逆に罪悪感が。。。

みたいな意見もありました。 やっぱりコードを綺麗にするうえで、元々の設計の良くない部分とかで、致し方なく汚くなってしまうケースなどもあって、 課題感が明確になって良くもありますが、そこをどうチームで捉えていくかというところはまだまだこれから考えていかなきゃいけないです。

やっぱり、機械にやらせられることは機械にやらせるべき

これは CodeClimate だけの話ではないですが、昨今システム開発に関する良いサービスがいろいろ出てきている中で、 適材適所で導入して、チームの課題解決や開発の効率化していくことは良いことだなぁと思いました。

余談

今回の記事で、過去の CodeClimate のスクショ撮ってて気づきましたけど、スコア悪くなってるスクショが多かったなぁ。。。