Nette Coding Standard
*********************
.[perex]
[Coding Standard |https://github.com/nette/coding-standard]は、PHP のコードを [Nette のコーディング標準 |contributing:coding-standard]に沿って自動的に整えます。字下げや波かっこから、空白の入れ方や import の並び順までです。
内側では業界の標準の道具である PHP CS Fixer と PHP CodeSniffer を組み合わせていて、あらかじめ設定されているので、自分で何かを用意する必要はありません。
インストール
======
Composer でこの道具を全体に入れます。
```shell
composer global require nette/coding-standard
```
そして全体の vendor の実行ファイルのディレクトリが [`$PATH` の環境変数に入っている|https://getcomposer.org/doc/03-cli.md#global]ことを確かめてください。
使い方
===
この道具には 2 つのコマンドがあります。`check` のコマンドは違反を知らせるだけで、`fix` はそれを自動的に直します。
```shell
ecs check
ecs fix
```
引数なしなら `src/` と `tests/` のディレクトリを調べます。自分のパスをひとつ以上渡すこともできます。たとえば `ecs check app bin` です。
はじめて fixer を走らせる前に、必ずファイルの控えを取ってください。
PHP のバージョン
==========
この道具は PHP 8.0 から 8.5 に対応していて、バージョンに応じて決まりを段階的に当てます。バージョンはプロジェクトの `composer.json` から自動的に見分けますが、`--preset` のオプションではっきり指定することもできます。
```shell
ecs check --preset php81
```
独自の決まり
======
決まりはプロジェクトごとに調整できます。PHP CS Fixer の決まりを変えるには、プロジェクトの根に `ncs.php` のファイルを作ります。
```php
<?php
return [
'strict_comparison' => false,
];
```
PHP CodeSniffer の決まりを変えるには `ncs.xml` のファイルを作ります。バージョンのプリセットを参照する必要はなく(自動的に組み合わされます)、`$presets/` で同梱のプリセットを取り込めます。
```xml
<?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 の流れでは、この道具をプロジェクトとして入れてそこから走らせます。
```yaml
- run: composer create-project nette/coding-standard temp/coding-standard
- run: php temp/coding-standard/ecs check
```
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