静的解析というのは、自動テストを実行せず、コードを解析してソースコードの複雑さやバグの起こりやすさを検出してくれるサービス。テストがなくても即座に導入できる手軽さがあり、テストとは違う面でソースコードの品質を高めるのに役立ってくれる。
CI(Continuous Integration)の一種ではあるが、特にContinuous Inspectionと呼ばれることもある。「全自動コードレビュー」と言う方が近いだろうか。
Travis-CIで各種OSSを組み合わせて似たような処理を実行させることもできるが、設定が面倒くさいし、レポートをどうするか考える必要もある。特化型SaaSの方はこの辺をよく考えてくれている。
PHPに対応したInspection系のSaaSといえば、Scrutinizer、CodeClimate、SensioLabsInsightの3つが有名なので、簡単に機能面を比較してみた。
PushやPullRequestをフックして自動的に解析を行ってくれるのは3つとも同じ。
いずれも、publicリポジトリであれば無料で解析してくれる。(無料版だけでこれを書いている)
Scrutinizer
CodeClimateがPHP対応していなかった時期にPHP特化型として始まったやつ。おそらく一番有名。
スコアは10段階評価(最大10)。
有料版は月額€49から。 https://scrutinizer-ci.com/pricing
良い所
- かなり詳しい解析を行ってくれる
- テストを実行する機能があるので、CIサーバーとしても使えなくはない
- 各種OSSも乗っかっていることが多いので、点数の比較ができる
- 簡単なパッチを作ってPull Requestを投げてくれる機能がある
悪い所
- 解析速度が遅い
- CI機能はTravis-CIなどより遅く、ショボい。実行コンテナ数はUnlimitedプランでやっと2に増える。オマケだと思ったほうがいいね
- カバレッジレポートはTravisから送ることもできるよ
- 無料版だと解析結果を1ヶ月しか保持してくれない。毎月何か更新しているPJなら問題はないんだけど。
- スマホでdashboardを見ると著しく表示崩れする
SensioLabsInsight
Symfonyで有名なSensioLabsが運営している解析サービス。Symfony関連のOSSは必ずと言っていいほど導入している。
点数はメダル方式で、最大は★4のプラチナメダル。
有料版はprivate repo5つで月額€39から。 https://insight.sensiolabs.com/pricing
良い所
- PHPに特化しており、特に各種フレームワークのベストプラクティスも指摘してくれる。これが大変良い
- 今のところSymfony(3,2,1), Laravel, Drupal, その他のPHPプロジェクトなどに対応
- どこを直せばよいコードになるのか、指示がすごく具体的。順番に直していけば必ずスコアが上がるようになっている。
- 修正にかかる時間の目安が出るのも面白い
悪い所
- PHP以外は一切対応していない
- JSも含まれるリポジトリだと物足りないかも
- 解析の種類が若干Scrutinizerと異なるので、OSSならば両方導入してみてもいいのではないか。
CodeClimate
RubyやJavaScriptで有名な解析サービス。途中でPHP対応が発表された。
点数はGPAで最大が4。
有料プランはホスティングにかかる費用のようだ。大部分は無料で実行できるみたい。OSS化されている機能が多い。
https://codeclimate.com/pricing
良い所
- ちょっと思いつかない
- しいて言うならば、PHP以外の言語用のインスペクションが充実しているので、JavaScript度が高ければいいかもしれない
悪い所
- PHP用の解析オプションがPHPMD一択
- しかも設定デフォルト
- PHPMDのデフォルト設定は非常にうざい指摘ばかりなことで有名
- 調教用のxmlを書けばいいんだけど、俺はそれがしたくないからSaaSを使ってるんだよ!!
- みんな自分用に設定を書くから、GPAがあてにならない
- この程度の内容ならTravis-CIでもできるぞ…
RubyやJSだと標準的なのだろうけど、CodeClimateのPHP対応はすごく微妙なので選択肢に入るレベルにないと思う。なんでLaravelはこんなサービスを使っているのか。。