先日公開された、クックパッドがChankoを2.0に増量しました、というエントリーを読んでいたら、Travis CIと連携するサービスが2つ紹介されていた。CoverallsCode Climateだ。それぞれ、カバレッジ計測、静的コード解析のサービスとなっている。CoverallsについてはAPIが公開されているので、PHPで書いたライブラリをGitHubに公開してみた。

php-coveralls

これ。

CoverallsはTravis CIとか、他のCIサービスと連携して動くサービスなので、GitHubにpushしたタイミングで、CIサーバーでテストが実行され、そこで計測したカバレッジが登録される、という流れ。

ビルド毎のコードカバレッジ一覧。

タイムライン。

いいテスターとわるいテスターも表示される。

ビルドの詳細。

ファイルの詳細。

Show your badges on GitHub!

Travis CIにもビルド結果を表示するバッジがあるが、Coverallsにもコードカバレッジを表示するバッジがある。

Retinaバッジ欲しいなぁ。

Code coverage

php-coverallsは、これ自体でカバレッジを計測するわけではなくて、計測されたコードカバレッジをAPIに渡している。

PHPUnitでテストコードを書いている場合、取扱説明書の第14章 コードカバレッジ解析の通り、Xdebugの機能を使用して、C0のコードカバレッジが計測できる。計測結果は、標準出力に出したり、htmlレポートにしたり出来る。さらに、coverage cloverという種類のレポートがxmlファイルに出力できる。php-coverallsでは、このxmlファイルを元に、計測されたカバレッジを取得して、Coveralls APIに渡している。この他、PHPUnitが対応しているログは付録C XML 設定ファイル - ログ出力に説明があるので、興味のある方は参照して欲しい。

他のテスティングフレームワークで、このタイプのxmlファイルが出力できるのであれば、php-coverallsは利用可能なんじゃないかと思う。

Supported CI service

今のところ、対応できるように実装したのは3つで、

  • Travis CI
  • CircleCI
  • Jenkins

このうちTravis CIではテストしたが、他の2つはまだ実環境でテストできてない。Rubyで対応しているSemaphoreはRuby向けCIサービスのようなので、PHPでは対応していない。

Got PR for the first time

そろそろブログでも書くかと、このエントリーを書いてるときに、composer.jsonのbinのパス修正し忘れたでしょ!というPRをもらいました。GitHubに公開してからそんなに時間経ってないのに、すでに試してくれた人がいて、しかもフィードバックをもらえた事がとても嬉しい。

知らぬ間にGitHubのページがブックマークされていたり、珍しくスターゲイザーが増えていたりして、公開して良かったなぁと思った。

Contact on Twitter

最初にドキュメントを見た時には、RubyとPythonとNode.jsしか無かったのに、4/19に見てみたら、C++とScalaが増えていた。もしかして連絡したら載せてもらえるのかな?と思って、COVERALLS FOR OTHER LANGUAGESを読んでみると、

We have been working on adding and updated features for Coveralls and we have a backlog of languages that we'd like to support. If there is a language that you, member of the community and glorious comrade in arms, would like to write a plugin for to get support sooner, please go ahead and let us know on twitter or through the contact email. Together as one we move forward into the glorious dawn of a new complete test coverage day!

と書いてあったので、@CoverallsAppにもツイートしてみた。

英語あってるのかな。大丈夫かな。

Conclusion

今までは、Travis CIでテストを実行しても、Travis上のコンソールにしかカバレッジを残せなくて、Jenkinsのプラグインみたいに、表示してくれるサービスないかなーと思っていたので、Coverallsのようなサービスが使えるのは嬉しい。静的コード解析についても、PHPの場合は、Template for Jenkins Jobs for PHP Projectsにあるように、手元に道具は揃っているわけだ。今後、Code Climateや別サービスでもAPIが公開されればいいなーと思ったりした。

また、Johannes Schmittが自動レビューシステム作るよ!と言っていたのが、scrutinizer-ciで動き始めたようなので、ぺちぱーの人達は使ってみるといいんじゃないかと思う。今のところPHP専用。

ぺちぱーもCoveralls使えるよ!やったね!