CakePHP3 コーディング規約 自動で調整してくれる”PHP-CS-Fixer”

CakePHP3のコーディング規約について

CakePHP3のコーディング規約は以下にあります(CakePHP3自体やプラグインの話かも知れないが合ってたほうが良いでしょう)。
https://book.cakephp.org/3.0/ja/contributing/cakephp-coding-conventions.html

いちいちチェックすると手間ですが、コーディング規約に叶うかチェックするツールも用意してくれています。
https://github.com/cakephp/cakephp-codesniffer

ということを最近教えてもらい、世の中は進んでいるんだなあと感心し、試しにツールを実行しました。

----------------------------------------------------------------------
FOUND 26 ERRORS AFFECTING 23 LINES
----------------------------------------------------------------------
   2 | ERROR | [x] There must be one blank line after the namespace
     |       |     declaration
   3 | ERROR | [ ] Use classes must be in alphabetical order. Was
     |       |     expecting App\Form\Elea\CertificationEditNameForm
   5 | ERROR | [ ] Use classes must be in alphabetical order. Was
     |       |     expecting App\Form\Elea\CertificationSearchMiForm
   6 | ERROR | [ ] Use classes must be in alphabetical order. Was
     |       |     expecting Cake\Network\Exception\NotFoundException
   7 | ERROR | [ ] Use classes must be in alphabetical order. Was
     |       |     expecting Cake\ORM\TableRegistry
  20 | ERROR | [ ] Missing function doc comment
  28 | ERROR | [ ] Missing function doc comment
  52 | ERROR | [ ] Missing function doc comment
  61 | ERROR | [x] Opening parenthesis of a multi-line function call
     |       |     must be the last content on the line
  62 | ERROR | [x] Opening parenthesis of a multi-line function call
     |       |     must be the last content on the line
  63 | ERROR | [x] Closing parenthesis of a multi-line function call
     |       |     must be on a line by itself
  64 | ERROR | [x] Multi-line function call not indented correctly;
     |       |     expected 16 spaces but found 20
  73 | ERROR | [x] Multi-line function call not indented correctly;
     |       |     expected 16 spaces but found 20
  73 | ERROR | [x] Closing parenthesis of a multi-line function call
     |       |     must be on a line by itself
  79 | ERROR | [ ] Missing function doc comment
  92 | ERROR | [ ] Missing function doc comment
  96 | ERROR | [x] Missing space after comma
 115 | ERROR | [x] Missing blank line before return statement
 119 | ERROR | [x] Opening parenthesis of a multi-line function call
     |       |     must be the last content on the line
 119 | ERROR | [x] Only one argument is allowed per line in a
     |       |     multi-line function call
 120 | ERROR | [x] Multi-line function call not indented correctly;
     |       |     expected 8 spaces but found 12
 120 | ERROR | [x] Closing parenthesis of a multi-line function call
     |       |     must be on a line by itself
 126 | ERROR | [x] Missing blank line before return statement
 132 | ERROR | [ ] Missing function doc comment
 153 | ERROR | [ ] Missing function doc comment
 178 | ERROR | [ ] Missing function doc comment
----------------------------------------------------------------------
PHPCBF CAN FIX THE 14 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Time: 353ms; Memory: 8Mb

むっちゃなんか出とるやんけ。

しかし、useの順番等、細かいことに手間をかけてもしょうがないのでは派なので、誰かが自動でなんとかして欲しい。誰かおらんかと調べたら、おった。

PHP-CS-Fixerがおった

https://github.com/FriendsOfPHP/PHP-CS-Fixer

コマンド叩いたらソースを調整してくれます。最高やんけ、これでええわ。
ただどうやらCakePHP2はPSR-2準拠ですが、追加の規約があるようで、それらは標準設定では改善されませんでした。

しかし問題ありません。細かくオプション指定できます。
https://github.com/FriendsOfPHP/PHP-CS-Fixer#usage

そしてオプション指定はプロジェクト毎に設定ファイルを配置すると勝手読み込んでくれます。

Instead of using command line options to customize the rule, you can save the project configuration in a .php_cs.dist file in the root directory of your project. The file must return an instance of PhpCsFixer\ConfigInterface which lets you configure the rules, the files and directories that need to be analyzed. You may also create .php_cs file, which is the local configuration that will be used instead of the project configuration. It is a good practice to add that file into your .gitignore file. With the –config option you can specify the path to the .php_cs file.

2017/06/29 暫定 CakePHP3対応設定はこれで決まり!

個々に説明するのは面倒ですし公式で丁寧に書いてくれているので省きます。
数が多いので選抜しているということで読み手にメリットが提供できているはずですから感謝してください。

<?php

$rules = [
    '@PSR2'             => true,
    'no_whitespace_before_comma_in_array' => true,
    'whitespace_after_comma_in_array' => true,
    'blank_line_before_return' => true,
    'concat_space' => ['spacing' => 'one'],
    'ordered_imports' => true,
    'method_argument_space' => ['ensure_fully_multiline' => true],
];
$excludes = ['vendor', 'webroot', 'bin', 'plugin'];

return PhpCsFixer\Config::create()
    ->setRules($rules)
    ->setFinder(
        PhpCsFixer\Finder::create()
            ->in(__DIR__)
            ->exclude($excludes)
            ->notName('README.md')
            ->notName('*.xml')
            ->notName('*.yml')
            ->notName('*.json')
            ->notName('*.ctp')
    );

まとめ

PHP-CS-FixerはAtomのプラグインを経由して呼び出すこともできるので便利だと思います。
インストールも上のURLから簡単にできるので一度使ってみても。

https://atom.io/packages/atom-beautify

以上。