CakePHP 3 に PHP_CodeSniffer を入れてコードをキレイに保つ
はじめに
今日は CakePHP3 で PHP_CodeSniffer を実行する方法と、ちょっと便利にするテクニックをご紹介します。
- GitHub - squizlabs/PHP_CodeSniffer: PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.
- https://github.com/squizlabs/PHP_CodeSniffer
CakePHPのバージョンは3.8で実行しています。
コマンドは Linux / Unix 系でご紹介しますが、Windowsでも動作します。
1. PHP_CodeSniffer をインストール
下記コマンドでプラグインをインストール。
$ cd /path/to/cake3project/
$ composer require squizlabs/php_codesniffer --dev
2. phpcs で不備ありファイルを抽出
PHP_CodeSniffer には phpcs と phpcbf の、2つのコマンドが含まれています。
phpcs(PHP CodeSniffer) は、コードの不備を一覧で表示するもの。
phpcbf(PHP Code Beautifier)は、コードを自動整形するものです。
まずは phpcs を使ってみます。コードに問題がなければ以下のように表示されます。
$ ./vendor/bin/phpcs -p --colors --standard=./vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests
........... 11 / 11 (100%)
Time: 276ms; Memory: 8MB
問題がある場合は、以下のようにファイルパスと行番号、エラー内容が表示されます。
..E.E...... 11 / 11 (100%)
FILE: /path/to/cake3project/src/Controller/AppController.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
60 | ERROR | Missing parameter comment
----------------------------------------------------------------------
~~~ 省略 ~~~
Time: 747ms; Memory: 8MB
結果の見方は説明を割愛しますが、コマンドのオプションについて簡単にご説明します。
-pは進捗状況を表示。
--colorsは結果を色付きで表示。
--standardはコーディングルールを指定するものです。
他のオプションも含め、詳しくは下記コマンドで確認できます。
$ ./vendor/bin/phpcs --help
3. phpcs のバッチ/シェルスクリプトを作成
毎回この長いコマンドを入力したり、コピペするのは面倒なので、Windows用のバッチファイルと、Mac用のシェルスクリプトを作りました。
僕は、/path/to/cake3project/bin の中に入れています。
3-1. Win用 phpcs バッチファイル
@echo off
set SITE_DIR=%~dp0%..\
set VENDOR_DIR=%SITE_DIR%vendor\
call %VENDOR_DIR%bin\phpcs -p --colors --standard=%VENDOR_DIR%\cakephp\cakephp-codesniffer\CakePHP %SITE_DIR%\src %SITE_DIR%\tests
上記バッチは、下記コマンドで実行可能です
C:\path\to\cake3project> bin\phpcs
3-2. Mac用 phpcs シェルスクリプト
#!/usr/bin/env sh
script_dir=$(cd $(dirname $0); pwd)
site_dir=$(cd $(dirname $script_dir); pwd)
vendor_dir="$(cd $site_dir; pwd)/vendor"
${vendor_dir}/bin/phpcs -p --colors --standard=${vendor_dir}/cakephp/cakephp-codesniffer/CakePHP ${site_dir}/src ${site_dir}/tests
上記シェルスクリプトは、下記コマンドで実行可能です。bin/phpcs に実行権限が付与されていることをご確認ください。
$ bin/phpcs
4. phpcbf で不備ありファイルを自動整形
phpcsと同様に、下記コマンドで実行可能です。コマンドの各オプションの意味も同じです。修正可能な箇所がない場合は下記のように表示されます。
$ ./vendor/bin/phpcbf -p --colors --standard=./vendor/cakephp/cakephp-codesniffer/CakePHP ./src ./tests
........... 11 / 11 (100%)
No fixable errors were found
Time: 269ms; Memory: 8MB
不備があり、自動整形した場合は下記のようになります。
....F...... 11 / 11 (100%)
PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE FIXED REMAINING
----------------------------------------------------------------------
/path/to/cake3project/src/Controller/PagesController.php 2 1
----------------------------------------------------------------------
A TOTAL OF 2 ERRORS WERE FIXED IN 1 FILE
----------------------------------------------------------------------
Time: 296ms; Memory: 8MB
ここで注意が必要で、phpcbf はすべての不備を直してくれるわけではありません。
phpcbf 実行後は phpcs で不備が残っていないか確認してください。
5. phpcbf のバッチ/シェルスクリプトを作成
こちらもバッチファイルとシェルスクリプトを作りました。内容は phpcs のときとほぼ同じです。
5-1. Win用 phpcbf バッチファイル
@echo off
set SITE_DIR=%~dp0%..\
set VENDOR_DIR=%SITE_DIR%vendor\
call %VENDOR_DIR%bin\phpcbf -p --colors --standard=%VENDOR_DIR%\cakephp\cakephp-codesniffer\CakePHP %SITE_DIR%\src %SITE_DIR%\tests
上記バッチは、下記コマンドで実行可能です
C:\path\to\cake3project> bin\phpcbf
5-2. Mac用 phpcbf シェルスクリプト
#!/usr/bin/env sh
script_dir=$(cd $(dirname $0); pwd)
site_dir=$(cd $(dirname $script_dir); pwd)
vendor_dir="$(cd $site_dir; pwd)/vendor"
${vendor_dir}/bin/phpcbf -p --colors --standard=${vendor_dir}/cakephp/cakephp-codesniffer/CakePHP ${site_dir}/src ${site_dir}/tests
上記シェルスクリプトは、下記コマンドで実行可能です。bin/phpcbf に実行権限が付与されていることをご確認ください。
$ bin/phpcbf
6. おわりに
必死にコードを書いていると、ついついルールから外れた記述になってしまうことがあります。phpcs と phpcbf を使えば、コード整形の手間や時間を減らすことが可能です。使ったことがない方は、ぜひ一度試してみてください。