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
以上。