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

SideCI Blog

継続的インテグレーションツール(CI)のSideCIが運営しています。コード品質向上や生産性向上など、ソフトウェアエンジニアに役立つCI全般について記事を投稿しています。

PHPのレポジトリに番犬を飼おう

コーディング規約をしっかりしようという流れが来ているかと思います。PHP: The Right Wayにもコーディングスタイルについて詳しく記載されています。

私たちはPHPに関して、書いたコードは全てSideCIというサービスでチェック、PullRequestにコードスタイル違反をたくさんコメントして(吠えて)もらっています。 (※弊社サービスです。

PHP_CodeSniffer, PHP Mess Detector(PHPMD)にレポジトリをチェックさせるという内容のサービスです。

なお、本記事はHoundCIに関する紹介記事にインスパイアされた記事です。

SideCIを入れるメリット

  1. コードスタイルに沿っていないコードをmasterに入る前にかならず検知出来る
  2. チームメンバー全員がツールを導入したりは不要
  3. コードスタイルを決めて、それに順守することで、それに関する議論を行わなくて済む
  4. 人間関係が壊れない(重要)

イメージ

たとえばこんなコードがあるとします。明らかにインデントが整っていないメソッドがありますね。

Sample Code

public function display1() {
}

    public function display() {

こういったコードをPHP_CodeSnifferが見つけて、SideCIがコメントにて指摘してきます。

GitHub PullRequest / スクリーンショット

f:id:sideci:20150331120028p:plain

SideCIの使い方 / 手順

ざっくり以下の様な手順で使えるようになります。

  1. SideCIにアクセス、GitHub AuthでSign Up
  2. コードのチェックを行いたいレポジトリを選択
  3. PHP_CodeSniffer, PHPMDをONにしてSave
    • 初期設定完了!
  4. GitHub上でPullRequestを新しくOpenする
    • 数十秒〜数分でPHP_CodeSniffer, PHPMDの実行結果がSideCIからコメントされます
    • コメントは最初にSideCIにSign Upした人のアカウントで行われます
  5. カスタマイズ!
    • コーディングスタイルやチェックするruleの設定をしましょう

カスタマイズ!

どのコーディングスタイルを使うか?

まずはじめにコーディングスタイルを選択する必要があります。SideCIでは何も設定しない場合にはFramework等に合わせて自動選択されます。対応フレームワークはCakePHP, FuelPHP, CodeIgniter, Symfony2です。(本記事執筆時点)。それ以外の場合はPSR1が選択されますが、PSR2などの指定もsideci.ymlで可能です。

フレームワークを使っている場合には、フレームワーク側が選定しているコーディングスタイルを選択すると良いと思います。たとえば、CakePHPはPSR2を採用しています。(従って、CakePHP用のStyleはほぼPSR2です。)

PHPMDって...?

PHP_CodeSnifferはコーディングスタイルチェックツールとして有名ですが、PHP Mess Detector(PHPMD)の方はみなさんご存知でしょうか?

こちらはJavaのPMDのようなものを目指して開発されているツールです。メソッドの複雑度などをチェックします。スタイルに関しても、クラス名がキャメルケースになっているか、といったチェックも可能です。

たとえば、以下のようなコードは複雑度が高いと指摘されます。(ぱっと見で既にネストが深く読みづらいです!)

/**
 * CyclomaticComplexity
 */
// Cyclomatic Complexity = 12
class Foo {
    public function example()  {
        if ($a == $b)  {
            if ($a1 == $b1) {
                fiddle();
            } else if ($a2 == $b2) {
                fiddle();
            }  else {
                fiddle();
            }
        } else if ($c == $d) {
            while ($c == $d) {
                fiddle();
            }
         } else if ($e == $f) {
            for ($n = 0; $n < $h; $n++) {
                fiddle();
            }
        } else{
            switch ($z) {
                case 1:
                    fiddle();
                    break;
                case 2:
                    fiddle();
                    break;
                case 3:
                    fiddle();
                    break;
                default:
                    fiddle();
                    break;
            }
        }
    }
}

f:id:sideci:20150331151827p:plain

複雑度以外にも、選択可能なチェック項目(rule)は非常に多くあるため、これは取り入れたいと思うものだけ取り入れた設定をsideci.ymlに記載すると良いと思います。(詳しくはSideCIのサイトにて!

SideCIを使うデメリット

  1. うるさい

コーディングスタイルは非常にうるさいです。でも、きちんと設定されたエディタで書けば、自然にコーディングスタイルには従っていくと思います。インデントがずれているなど、小さいことですが、非常に読みづらくなるので、すかさず直しましょう。

もし他にもデメリットがあったら、すかさずSideCIの運営者に文句を言いましょう。チャット形式で簡単に文句が言えるサービスのようです。

さぁレポジトリにSideCIを飼ってみよう

SideCIは現在なんと無料で使えるそうです!(※弊社サービスです)
ぜひサインアップしてSideCIという番犬をレポジトリに飼ってみてはいかがでしょうか?

SideCI
https://www.sideci.com/