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