読者です 読者をやめる 読者になる 読者になる

Shin x Blog

PHPをメインにWebシステムを開発してます。Webシステム開発チームの技術サポートも行っています。

CI で PHPコードスタイルをチェックする Style CI

PHP コードスタイルのチェック、整形を行うサービスである Style CI を紹介します。

f:id:shin1x1:20151221182034p:plain

このエントリは、Laravelリファレンス Advent Calendar 2015 の22日目です。

Laravel 公式が利用しているサービス

Style CI は、Alt Three が運営している GitHub にホストしている PHP コードのコードスタイルをチェックするサービスです。

GitHub へコードを push すると、コードチェックが行われ、適合しないコードがあればエラーになります。メールによるエラー通知も飛んできます。

f:id:shin1x1:20151221182046p:plain

Style CI のサイトに行くと修正が必要が箇所のコードが提示されます。

f:id:shin1x1:20151221182054p:plain

shin1x1/phpkansai-20151216-demo - StyleCI

チェックできるフォーマットは、インデントやブレース位置、文字エンコーディングなどの基本的なものから、short array syntax の強制(long array syntax の強制もあり)や short echo tag への置換など数多くのルールがあります。

これらを1つづつ設定していっても良いですし、preset と呼ばれる複数のルールをグループ化したものを指定することもできます。preset には以下のようなものがあります。

  • PSR-1(psr1)
  • PSR-2(psr2)
  • Symfonysymfony
  • Laravel(laravel)
  • Recommended(recommended)

これらの設定は、 Style CI サイトでの設定もしくはリポジトリのルートディレクトリに .style.yml という設定ファイルを置くことで指定できます。

Configuration · StyleCI

Style CI の特徴

Pull Request で修正コードの自動送信

Style CI では、PHP コードのチェックを行うのですが、設定を有効にすれば修正済みコードを自動で PR で投げてくれます。

f:id:shin1x1:20151221182103p:plain https://github.com/shin1x1/phpkansai-20151216-demo/pull/11

開発者はコードを見て、問題無ければマージするだけでコードの整形が完了します。

さらに、この PR を自動で取り込む機能もあります。(デフォルトは disable )

CI でコードフォーマットを怒られて手元でちまちま修正するより、ただマージするだけの方が楽なのでこれは嬉しい機能です。

Scrutinizer との比較

同種のサービスとして有名なのが Scrutinizer です。こちらは、コードフォーマットだけでなく、コードの静的解析なども行うので全く同種として扱うことはできないのですが、動作速度としては Style CI の方が遥かに速いです。

シンプルにコードフォーマットのチェックだけ行うなら、Style CI を試す価値が十分あります。

Laravel 公式で利用しているサービス

Laravel フレームワークリポジトリhttps://github.com/laravel/framework )にて、コードフォーマットチェックとして Style CI が利用されています。

f:id:shin1x1:20151222011412p:plain https://github.com/laravel/framework/pull/11397

私自身も Laravel のリポジトリを探っている中でこのサービスを知りました。Style CI を運営している Alt Three には、Laravel コミッターである Graham Campbell さんが参加しているのでその流れかもしれませんね。

サイトが OSS

Style CI は、Laravel 5.1 で開発されており、そのコードは GitHub で公開されています。

https://github.com/StyleCI/StyleCI

もちろんサービスとして公開しているものとの差分はある(このリポジトリのコードがそのままサービスとなっているわけではない)でしょうけど、多少なりとも内部が分かっているのは安心感があります。また、場合によってはこのコードを自分達のプロジェクト用にホスティングして使うということもできるかもしれません。

Laravel 5.1 を使った実用的な Web アプリケーションとして実装を見てみるのも良いですね。

さいごに

PHP コードチェックサービスの Style CI を紹介しました。

PhpStorm を使っていれば、commit 前に 「Reformat code」 や 「Optimize imports」 をかけることができるので、敢えてこうした CI サービスを利用する必要は無いかもしれません。ただ、チーム開発などでエディタが異なる場合や IDE の設定漏れなどで定めたコードフォーマットに適合しないコードが push される場合もあるでしょう。

こうした場合に保険的に Style CI を導入しておけば、開発者が修正せずとも自動で整形したコードを取り込むことができます。コードフォーマットに特化したサービスのため動作が軽快で、Travis の CI よりも先に終了するので、試しに導入しても邪魔にならないというのも良いですね。

public なリポジトリであれば、無料で利用できるので試しに使ってみてはどうでしょう。

Laravel については「Laravelリファレンス」を参考にしてください :D

Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク

Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク