Nette Coding Standard
Coding Standardは、PHP のコードを Nette のコーディング標準に沿って自動的に整えます。字下げや波かっこから、空白の入れ方や import の並び順までです。
内側では業界の標準の道具である PHP CS Fixer と PHP CodeSniffer を組み合わせていて、あらかじめ設定されているので、自分で何かを用意する必要はありません。
インストール
Composer でこの道具を全体に入れます。
composer global require nette/coding-standard
そして全体の vendor の実行ファイルのディレクトリが $PATH
の環境変数に入っていることを確かめてください。
使い方
この道具には 2 つのコマンドがあります。check
のコマンドは違反を知らせるだけで、fix はそれを自動的に直します。
ecs check
ecs fix
引数なしなら src/ と tests/
のディレクトリを調べます。自分のパスをひとつ以上渡すこともできます。たとえば
ecs check app bin です。
はじめて fixer を走らせる前に、必ずファイルの控えを取ってください。
PHP のバージョン
この道具は PHP 8.0 から 8.5
に対応していて、バージョンに応じて決まりを段階的に当てます。バージョンはプロジェクトの
composer.json から自動的に見分けますが、--preset
のオプションではっきり指定することもできます。
ecs check --preset php81
独自の決まり
決まりはプロジェクトごとに調整できます。PHP CS Fixer
の決まりを変えるには、プロジェクトの根に ncs.php のファイルを作ります。
<?php
return [
'strict_comparison' => false,
];
PHP CodeSniffer の決まりを変えるには ncs.xml
のファイルを作ります。バージョンのプリセットを参照する必要はなく(自動的に組み合わされます)、$presets/
で同梱のプリセットを取り込めます。
<?xml version="1.0"?>
<ruleset name="MyProject">
<!-- use function/const の import を有効にします -->
<rule ref="$presets/optimize-fn.xml"/>
<!-- 決まりをひとつ無効にします -->
<exclude name="SlevomatCodingStandard.TypeHints.ReturnTypeHint"/>
</ruleset>
どちらのファイルも自動的に見つけられ、あなたの決まりがプリセットより優先されます。コミットしたくない一度きりの上書きには、--config-file
で追加のファイルを渡します(fixer には .php、sniffer には .xml)。
継続的インテグレーション
CI の流れでは、この道具をプロジェクトとして入れてそこから走らせます。
- run: composer create-project nette/coding-standard temp/coding-standard
- run: php temp/coding-standard/ecs check