SideCI Blog

自動コードレビューサービスSideCIを提供している株式会社アクトキャットのコーポレートブログです。



Railsを書き始めたばかりの人に特にオススメ。Rails流のコードの書き方を教えてくれる rails_best_practices を使ってみましょう

Ruby on Rails を使ったシステム開発では The Rails way や Rails 流と言った開発手法に沿って行うことで高い生産性を保持できるようになります。つまり流儀をきちんと学び、それに従って開発するのが大事です。

そうした流儀、ベストプラクティスをチェックできるツールが rails_best_practices になります。単に文章などで読むだけでなく、コードを静的解析して指摘するツールを使うことで、何が間違っていてどう書くべきなのかがはっきりと分かるようになるでしょう。

続きを読む

SideCIはレビューにフォーカスするため、負債カンバンを廃止しました

こんにちは。今日は私たちSideCIのメンバーにとって、また、ユーザの皆様にとって、大きなアナウンスをさせて頂きます。

2016年8月末より技術的負債を可視化し、その返済を支援する機能である「負債カンバン」を提供しておりました。本機能はベータ版として、Ruby on Railsプロジェクトに限定して提供しておりましたが、2017年6月28日をもって一度本機能をクローズさせて頂きました。

TechCrunchにて「自動コードレビュー「SideCI」が、技術的負債を可視化する「負債カンバン」提供開始」といった形でご紹介頂くなど、大きく反響があった機能ですが、少なくても直近1年ほどはコードレビューの自動化にフォーカスするため、一度クローズするという判断をするに至りました。

f:id:sideci:20170714195548p:plain 負債カンバンのイメージ

負債カンバンの成り立ち

SideCIを提供していく中で、「SideCIによるレビューの自動化によって新しく書くコードについては品質が担保されるようになった。一方で、過去に書いたコードがボトルネックになっている部分がある」といった課題をお聞きする機会が多くありました。そのため、その課題を解決するための機能を開発していこうという決定をし、製品内容の検討をはじめました。

技術的負債については、次のような声をよくお聞きしました。

  • 開発を進めるに当たってボトルネックになっている、技術的負債を返していきたい
  • 技術的負債がどこにあるか、どんなものがあるかはエンジニア個々人が定性的な感覚として持っているのみで、チーム内の共通認識はない

そのため、負債カンバンは次のような機能を解決策として盛り込みました。

  • 技術的負債を可視化する
  • 負債の深刻度合い、改修することによる投資対効果を判別し、優先度を付ける
  • 優先度をカンバン形式で表示することで、どこから取り組むべきかをわかりやすく示す

これらの機能によって、負債が可視化され、どこから返済していくべきなのかがわかりやすく、また、チーム内で共通の認識として持てるようになったと考えています。

負債カンバンの課題

一方で、負債カンバンには大きな課題が残っています。それは、技術的負債を返済するためのモチベーション、時間、その他色々な技術的負債の返済にあたって必要なプロセスを解消することが出来ていない点です。そのため、負債カンバンで可視化された技術的負債に納得感を持って頂ける方々、共通認識としての納得感(メンバー間の肌感のズレの少なさ)を持って頂くところまでは実現できているものの、実際の技術的負債の返済に貢献しているケースはまれでした。

可視化はあくまで第一歩に過ぎず、可視化したものを片付けていくための機能群が必要だと考えています。

一方で、SideCIはレビューの自動化に注力しており、レビューの自動化の点においてもたくさんのやるべきことが残っている中で、「レビューに時間がかかる」という課題とはまったく別の課題である、「技術的負債の返済が進まない」に対して商品開発を続けることは、適切ではないと判断致しました。

また、SideCIは生産性の向上への寄与を第一に考えており、レビュー自動化を提供しています。技術的負債は返済することは生産性の向上に繋がる点も大きくありますが、生産性の向上に寄与する技術的負債のみを機械的に発見することは難易度が高く、現状ではノイズが混ざってしまいがちです。

例えば、1行が300文字になっているコードを全て80文字にしたからといって、開発生産性が上がるわけではありません。インデントがタブとスペースが混同されているコードをどちらかに揃えても、生産性は上がりません。スパゲッティコードを解きほぐすリファクタリングは後々の生産性の向上に繋がりますが、とても難易度が高く、すぐに取り組めるものではありません。また、コードから読み解けない技術的負債が本質的な問題のこともよく有りますが、それはコードの静的解析から発見することは難しいです。

生産性に寄与する返済すべき技術的負債のみを見つけ、改善することは、2017年現代ではまだ難しいのです。

もちろん、私たちはそれに真摯に取り組むため、スパゲッティコードを見つけるのに役に立つ、Ruby言語でよく使われいるMetricFu内部の循環複雑度計算機saikuroに代わる新しい循環複雑度計算機のcycromaticを開発したりもしましたが、まだまだ道のりは遠いと考えるに至りました。

負債カンバンの今後の位置づけ

負債カンバンは2017年6月28日にクローズされました。いっときの間、負債カンバンの開発プロジェクトは凍結されます。 「技術的負債の返済が進まない」という課題の代わりに、「技術的負債が今後増えることをレビュー自動化によって防ぐ」ことに今まで以上にフォーカスします。

また合わせて、類似した別の観点として、「今はとっても急いでいるのでこのPullRequestに含まれる技術的負債は認識しつつもMergeする、あとで返済する」といったシーンで実際にあとで返済出来るようにする、新しいカタチの負債カンバンを作ることが1案としてあります。もしかしたらそれはカンバンではないかもしれませんが。

今後のSideCI

私たちはコードレビューの自動化を支援する、カスタムルールをRuboCopのCop追加などに比べて圧倒的に簡単に追加することが出来るQuerlyや、誤検知を恐れずにルールを書いていけるようにするための新WebUIである、アビシニアンモードの提供などを行ってきました。 現在では「アビシニアンモード」がSideCIの標準の挙動となり、従来のコメントを行うモードはオプションの機能に変更になりました。

このアビシニアンモードが標準になることで、SideCIに以下がデータとして蓄積されるようになりました。

  • どのような指摘が納得感があるか(実際に修正されるか)
  • どのような指摘が意味が無いか(無視されがちか)
  • 意味がないとしたらその理由は何か

これらを活用し、新しい機能群を提供していく事を計画しています。

おわりに

SideCIは世界で最も良いレビューの自動化サービスとして開発を続けて参ります。 ご利用いただき、ユーザの皆様方とともに、成長を続けていければ幸いです。

CoffeeScriptのコードを静的解析器のCoffeeLintにレビューしてもらおう

素のJavaScriptが書きづらいと感じる方は少なくありません。波括弧や普通の括弧が多く、読みづらいと感じてしまいます。そんな中作られたのが代替言語のCoffeeScriptです。CoffeeScriptは変換用のコマンドを介して素のJavaScriptになります。CoffeeScript自体はRubyやPythonから学び取った点の多い、可読性の高いシンプルな構文となっています。

続きを読む

Hamlを使っているならhaml-lintを使ってコードレビューを楽にしよう

Hamlというのは主にRuby on Railsで使われているマークアップ言語です。Railsで標準で採用されているテンプレートエンジンであるERBよりも少ない記述量で記載することが出来ます。HTMLはXMLがベースになっているので冗長的な書き方も多く、書くのが面倒に感じる方もいるでしょう。Hamlはインデントで構造を表すので慣れれば分かりやすく感じるでしょう。下記はHamlの例です。

続きを読む

SCSSの静的解析、改善にscss-lintを使いましょう

コードレビューというとプログラマ向けの仕組みに感じますが、そんなことはありません。Webデザイナーにとっても役立つケースがあります。例えばCSSはテキストで書かれるものなので差分が取れます。更新部分だけをコードレビューできれば、日々の運用の中でメンテナンス性を維持できます。

続きを読む