概要
複数人で開発を行うと各々好き勝手にコードを書かれてしまって気がついたらコーディング規約が定まらない汚いソースコードになってしまうので便利ツールを使って少しでも改善していく。
PHPコードのチェックをPHP_CodeSnifferとPHPMDで行う
自動でチェックが走るようにGitのHooks機能機能を使ってcommit時に毎回確認するようにする
PHP_CodeSnifferとは
PHPコード規約のチェックを行うツール
phpcsコマンドでチェックを行えるが、phpcbfを使って自動で修正することもできる
以下のコーディング規約を対応している
$ phpcs -i The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz and Zend
独自のルールも設定できる
PHPMDとは
PHP Mess Detector
PHPコードの静的コード解析ツール
こちらもphpmdコマンドでチェックを行うことができて、出力形式はxml,text,htmlで出力ができる
どういう分析が行えるかはオプションで指定することができて以下のルールが存在する
種類 | 説明 |
---|---|
codesize | コードが大きすぎないかチェック |
controversial | 命名規則など議論の余地がある部分を検出するチェック |
design | 設計上の関連のチェック |
naming | 変数名など名前関連のチェック |
unusedcode | 使われていないコードのチェック |
cleancode | 綺麗なコードかチェック |
CircleCIとは
詳しくは以下にまとめている
GitHubにPHPコードをpushした際にCircleCIが自動でチェックするように設定することを目指す
自動チェック手順
リポジトリ作成
新しく以下のリポジトリを作成した
https://github.com/tomsato/php_check
composer.json作成
$ cat composer.json { "require-dev": { "phpmd/phpmd": "*", "squizlabs/php_codesniffer": "2.*" }, "scripts": { "test": [ "composer install", "./vendor/bin/phpmd ./src/ text codesize,design,naming,unusedcode", "./vendor/bin/phpcs --standard=PSR2 --colors ./src/" ] } }
サンプルプログラムの作成
$ cat src/TestClass.php <?php class TestClass { public $var = 'Hello world !!'; public function displayHello() { echo $this->var; } }
phpmd,phpcsを試しに実行してみる
// composer install $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer $ composer test // エラーが出ないことを確認する
vendorディレクトリなど不要なものをGitHubに上げないように.gitignoreを作成する
$ cat .gitignore vendor/ composer.lock composer.phar
pre-commit時に実行するようにする
$ cat .git/hooks/pre-commit #!/bin/sh composer test
実行権限も付与させるのを忘れずに
$ chmod 755 .git/hooks/pre-commit
ここまで直したらGHEにプッシュする
エラー時にcommitできないことを確認する
試しにサンプルプログラムに書いたnamespaceを消してcommitしてみた
$ git commit > composer install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Nothing to install or update Generating autoload files > ./vendor/bin/phpmd ./src/ text codesize,design,naming,unusedcode > ./vendor/bin/phpcs --standard=PSR2 --colors ./src/ FILE: /home/tomsato/php_check/src/TestClass.php ---------------------------------------------------------------------- FOUND 1 ERROR AFFECTING 1 LINE ---------------------------------------------------------------------- 3 | ERROR | Each class must be in a namespace of at least one level | | (a top-level vendor name) ---------------------------------------------------------------------- Time: 24ms; Memory: 3.75Mb Script ./vendor/bin/phpcs --standard=PSR2 --colors ./src/ handling the test event returned with error code 1
エラーが出たことを確認できる
コメントを書く
コメント一覧