ブログ

ryuzeeによるブログ記事。不定期更新

直近開催のScrum Alliance認定スクラムマスター研修のご案内

CakePHPのアプリのコーディング規約チェックを自動で行う方法

みなさんこんにちは。@ryuzeeです。

PHPで書かれたソースコードがコーディング規約に準拠しているかどうか確認するには、PHP_CodeSnifferというツールを使うのはよくご存知だと思いますが、今回はCakePHPを使って書いたソースコードの規約をチェックする方法を紹介します。 なお、このような規約チェックはローカル環境で気が向いた時にやるだけではなく、継続的インテグレーションにも組み込んで実施することが望まれます。

PHP_CodeSnifferのインストール

特にチャンネルの追加は必要ありません。

pear install PHP_CodeSniffer

インストールが完了すると、phpcsコマンドがインストールされます。 また標準では、Squiz, PEAR, Zend, MySource, PSR1, PSR2 , PHPCS の7個の規約がインストールされます。このうちMySourceは自分でのカスタマイズ用です。

CakePHP用の規約を導入する

上記でインストールされた規約はどれもCakePHPの規約とは若干異なっています。 なので、cakephpが公式に用意している規約を入手して利用します。

こちらのインストールもpearコマンドを使えばOKです。

pear channel-discover pear.cakephp.org
pear install cakephp/CakePHP_CodeSniffer

これで準備が完了しました。

規約チェックを行う

手元にサンプルアプリケーションを用意して早速検証しましょう。 サンプルの構成は、2テーブルからなる単純なもので、その他にVendorディレクトリに外部モジュールが入っています。

phpcs --report=summary  --standard=CakePHP --extensions=php ./app

これで./app以下を対象にした概要レポートが出力されます。概要だけなのでレポートはシンプルです。

詳細を出力したい場合は、引数のreportをcheckstyleに変更します。あわせてファイルに結果を出力します。

phpcs --report=checkstyle --report-checkstyle=./reports/checkstyle.xml \
--extensions=php ./app

これでcheckstyle.xmlにXML形式で詳細が出力されるようになりました。

ただこのままだと自分が作ったコード以外もチェックされてしまい鬱陶しいことこの上ないので対象ファイルの設定をします。–ignoreオプションにカンマ区切りで指定が可能で正規表現も使えます。

phpcs --report=checkstyle --report-checkstyle=./reports/checkstyle.xml \
--extensions=php --ignore=Vendor/*,Plugin/* ./app

Jenkinsと連携する

Jenkinsで自動で実行するには、Checkstyle PluginをJenkinsにインストールした上で、上記のコマンドラインをビルドのところで設定することになります。

cd ${WORKSPACE} && phpcs --report=checkstyle \
--report-checkstyle=${WORKSPACE}/reports/checkstyle.xml \
--standard=CakePHP --extensions=php \
--ignore=Vendor/*,Plugin/* ./app || id

この時気をつけるのは、標準でphpcsコマンドは1つでも規約違反があると、終了コードでエラーを返すので、コマンドの最後に適当なコマンドをつけて、常に正常終了するように設定しておくことです。

また実行後に./reports/checkstyle.xmlが出力されるので、ビルド後のアクションの設定でCheckstyleの取り込みを選択し、このファイルを指定します。

以上で、設定は完了しました。 実行してみると、以下のように出力されます(左メニューからアクセス)。

で、問題のあった箇所は修正していけばよいでしょう。 件数の推移はプロジェクトのトップページで以下のように見ることができます。

以上で完了です。

まとめ

コーディング規約の準拠チェック等をやる場合に人手でやるのはあまりに非効率です。そもそも機械に任せたほうが正確に検証を行うことができます。そのため自動化して頻繁にチェックし、少なくとも規約違反を増やさないようにしていくと良いのではないかと思います。それによって本来時間をかけるべきところに時間をかけられるようになります。

ただし念のために言っておくと、コーディング規約を定めるべきだ、とか絶対守るべきだ、と言っているわけではないです。 あくまで規約があるのであれば、それは自動検証すべきということです。 このあたりはアプリケーションの規模、開発の規模、アプリケーションのライフサイクル等に依存します。

それでは。

アジャイル開発チーム向けのコーチングや、技術顧問、Scrum Alliance認定スクラムマスター研修などのトレーニングを提供しています。お気軽にご相談ください(初回相談無料)
前の記事 コマンドラインからDropboxを操作する方法 (+Jenkinsとの連携)
次の記事 【資料公開】CakePHP+Jenkinsによるアジャイル開発

プロダクト開発で、こんな課題を感じていませんか?

  • 何を作るべきか、順位の決め方が定まらない
  • プロダクトの方向性をチームで共有できていない
  • 開発組織の体制や役割がうまく機能していない
  • 開発プロセスが形骸化し、目的を見失っている
  • アジャイルを導入したが、組織に定着しない

プロダクトマネジメント、組織構造、開発プロセスの課題について、組織全体の視点から支援します。

お問い合わせ(初回相談無料)

契約を前提にした相談でなくて構いません。相談に際して事前の整理や準備は不要です。

Aligned ―プロダクト開発におけるステークホルダーとの関係性の築き方
ダイナミックリチーミング 第2版
Tidy First?
脳に収まるコードの書き方
プロダクトマネージャーのしごと 第2版
エンジニアリングマネージャーのしごと
チームトポロジー
スクラム実践者が知るべき97のこと
プロダクトマネジメント
SCRUM BOOT CAMP THE BOOK
みんなでアジャイル
レガシーコードからの脱却
Effective DevOps
変革の軌跡
ジョイ・インク
アジャイルコーチの道具箱
カンバン仕事術
Software in 30 Days
How to Change the World