LCL Engineers' Blog

夜行バス比較なび(高速バス比較)・格安移動・バスとりっぷを運営する LCLの開発者ブログ

コードレビューの機械的な指摘はSideCIに任せる

コードレビューを自動化してくれるSideCIを導入しました。GitHubのプルリクエストを自動で解析して指摘してくれます。 主にRubyを使用しているのでRuboCopを筆頭に解析ツールが豊富に揃っているのは助かっています。

導入の経緯

もともとRuboCop, JSHint, ESLintは使用しており主にローカルで実行して個人個人で修正対応していました。 RuboCopはJenkinsのJOBを走らせていましたが、毎回リポジトリ全体に対して実行すると時間がかかっていたり、わざわざJenkinsの結果を確認する必要がありプルリクエストベースの開発プロセスから外れているためあまり効率が良いものではありませんでした。 そこで自前でやるよりサービスを利用したほうが開発にリソースを投入できるということもあり以前から気になっていたSideCIを導入してみることにしました。

導入してみて良かったところ

SideCIを数ヶ月運用してみて全体的に大きなメリットを感じています。

既存の開発プロセスに簡単に組み込めた

プルリクエストと連携しているので検出した問題やサマリへのリンクをコメントしてくれたりステータスが表示されるので効率よく確認と対応ができるようになりました。

f:id:lcl-engineer:20171124114558p:plain
指摘がない場合
f:id:lcl-engineer:20171124114604p:plain
指摘がある場合

無駄な指摘をする必要がなくなった

静的コード解析ツールによって検出されたコーディングスタイルに関する問題点がSideCIによってプルリクエスト上で可視化されるのでわざわざレビュアーがコメントする必要がなくなりました。 また、複雑度を数値で確認することができるので「このコードってちょっとわかりにくいよね。」ではなく「ここはこうした方がもっとわかりやすくなるよね。」のように複雑なのは数値で判明している前提で一歩進んだところから議論を始められるようになりました。

ナレッジが共有しやすくなった

これまでは実装者個人のみが解析結果を確認することが多かったのですが、レビュアーや他のメンバーの目にも触れやすくなり自分が実装する際にも意識してコードを書くことができるようになりました。対応に迷ったときにもコメントのURLをチャットで共有できるので議論の効率も上がりました。

メンテが楽になった

JenkinsのJOBの面倒を見たりGitHubとの連携を考える必要もなくなりました。チームの実情に合わせて解析ツールの設定ファイルを修正するだけで良く、メインの仕事であるサービスの開発に力を注ぐことができるようになりました。

ちょっと残念なところ

2017年10月31日にクラシックモードからアビシニアンモードへ完全移行となりました。これによりソースコードの自動修正機能が廃止されました。

SideCIでのクラシックモード廃止のお知らせ - SideCI Blog

自動修正機能とはRuboCopのauto-correct機能を利用して、自動修正可能な問題点を解消したプルリクエストをSideCIが作成してくれるというものです。

RuboCopによる自動修正の方法 | SideCI Documentation

自動修正されるのはコーディングスタイルに関する指摘がメインです。この機能のお陰でコーディングスタイルに関しては多少雑に実装してもPushして自動修正機能で対応するということができ、効率アップにつながっていました。 廃止の理由としてはツールの誤検出により誤った修正をしてしまうことを防ぐためかと想像できますが、プルリクエストとして確認できるのでオプションとして残っていてくれたら嬉しかったかな。という感想です。

アビシニアンモードでLINTツールの誤検出と闘う - SideCI Blog

まとめ

自前で仕組みを作るより断然効率的でコードレビューでも無駄な時間を使う必要がなくなったのでSideCIには満足しています。 サポートする言語やツールも増えていますのでこれからも期待大です。