SideCI Blog

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



アビシニアンモードのアップデート

SideCIでは、1月から新しいコードレビューの体験のためにアビシニアンモードを提供しています。アビシニアンモードでは、SideCIが発見した問題の一覧を確認でき、それぞれについて修正するか「クローズ」するかの対応を、レビューの段階で選択することができます。クローズされた問題はSideCIから無視されますが、クローズの記録が残り、後から確認することができます。解析ツールで検出される問題の中には実際には問題とはならない偽陽性が含まれますが、これらをソースコード中の特殊なコメントなどで抑制するのではなく、検出された後に「修正しない」という対応ができようになりました。

ソースコード中のコメントで問題の報告を抑制する方法は、様々な解析ツールで広く提供されている方法ですが、

  • ソースコードへの修正が必要であり、後で見返したときにノイズとなる
  • 特殊なコメントの構文や意味はツール毎に異なっており、抑制する問題を適切に選択することは容易ではない(想定よりも幅広く問題を抑制してしまい、本当に修正が必要な問題が報告がされなくなることがある)

などの問題があります。アビシニアンモードを利用してレビューの段階で警告への対応を行うことで、より効率的なコードレビューが実現されます。

さて、アビシニアンモードについて、先週水曜日24日に大規模な機能強化をデプロイしました。今回の機能強化では、主に次の2点の改善を行っています。

  • PHPMDを含む一部の解析ツールを利用した場合の処理速度を改善しました
  • 解析の実行トレースの表示を改善しました

解析処理速度の高速化

主に、PHPMDを実行した場合の処理を高速化しました。これは、プルリクエストを解析する際に、変更があったファイルのみを対象として解析を行うことによって実現されています。

PHPMDや一部の解析ツールでは、解析はプログラム全体ではなくプログラムの一部分を対象として行われるため、毎回全部のソースコードを解析する必要はありません。全く変更されていないファイルについて解析したとしても、SideCIによってその結果は捨てられます。そこで、事前にプルリクエストで変更されたファイルを検出し、それらだけを検査の対象とすることで処理の高速化を実現しました。

変更されたものだけに解析を限定して良いかは、解析ツールの性質によります。現在は、PHPMDやQuerlyなどの、明らかに不要であると判断できたものに限って、差分のみの解析を実装しています。

これまでは、PHPMDが極めて実行に時間がかかり、実際のプログラムではタイムアウトしてしまうことがほとんどだったのですが、大幅に改善されました。当初は「PHPのサポートは実験的」と表現していましたが、現時点では実用レベルと認識しています。

  • 実行時間はプルリクエストに含まれる変更のサイズに依存するため、大きなプルリクエストを解析した際には、タイムアウトしてしまう可能性が残っています
  • 巨大なリポジトリを解析した際に、差分の計算に時間がかかってしまいタイムアウトしてしまう可能性があります

解析の実行トレース

f:id:sideci:20170607123012p:plain

アビシニアンモードで解析を行った際には実行トレースの表示ができます。実行トレースには、

  • SideCIで行っている処理
  • 解析ツールに与えられたコマンドライン
  • 解析ツールの出力の一部

が表示されますので、SideCIで上手く解析が実行できない場合などのトラブルシューティングにご活用いただけます。

この実行トレースについて、

  • タイムスタンプの追加などの表示の改善
  • 実行途中でも逐一表示できるように修正

の機能強化を行いました。

まとめ

SideCI開発チームではアビシニアンモードの改善を進めており、そろそろ様々なプロジェクトでの実用に耐えられる品質に近づいてきていると認識しています。近く、新規リポジトリ登録時のデフォルト設定をアビシニアンモードへと変更することを計画しております。(この状態でも、リポジトリ設定から従来のクラシックモードへの切り替えが可能です。また既存のリポジトリは変更の影響を受けません。)

ぜひ、一度アビシニアンモードをお試しいただき、改善のご提案やご意見をお聞かせください。