荒廃したWordPressのPHPコードをPHP_CodeSnifferでキレイにしたい

## 更新履歴

* 2024-09-25 
    * VS Codeの拡張機能が自分の環境では動かなくなってしまったため、「[PHP Sniffer & Beautifier](https://marketplace.visualstudio.com/items?itemName=ValeryanM.vscode-phpsab)」に変更（[phpcs](https://marketplace.visualstudio.com/items?itemName=shevaua.phpcs)、[phpcbf](https://marketplace.visualstudio.com/items?itemName=persoderlind.vscode-phpcbf)の記述を削除）

## きったねぇWordPressのコード:worried:

きったねぇコードは解読するのが難しく、バグの原因になりやすいです。
以前までは、prettierを使用してPHPの整形をしていました。

https://github.com/prettier/plugin-php

しかし、こちらはHTMLとPHPが混在したコードの場合、動作が不安定になることが報告されています。

> このプラグインは、純粋な PHP ファイルをフォーマットした場合に安定すると考えています。PHP と HTML が混在したファイルのフォーマットは、まだ不安定だと考えています。詳細は "inline" タグの open issues をご覧ください。（DeepLによる日本語訳）

きったねぇコードのままはイヤだ:sob: 

## WordPress公式のコーディング規約を発見！:laughing:

https://ja.wordpress.org/team/handbook/coding-standards/wordpress-coding-standards/php/

公式が提供しているコーディング規約がやはりありました！
コーディング規約に則って自動整形するツールも紹介されていました。

https://github.com/WordPress/WordPress-Coding-Standards

https://github.com/squizlabs/PHP_CodeSniffer/

## グローバル環境にPHP_CodeSniffer（以下、phpcs）の設定を行う

### phpcsをインストールするためにcomposerをインストールする

:::note
composerは、PHPのパッケージ管理システムとのことです。
必ずしも必要なわけではないと思いますが、公式が勧めているのでそのやり方でやってみます。
:::

composerをchocolateyを使用してインストールします。

https://community.chocolatey.org/packages/composer

### composerでphpcsをインストール

```powershell:powershell
composer global require squizlabs/php_codesniffer
```

以下のコマンドで、phpcsのバージョンが確認出来たらOKです。

```powershell:powershell
phpcs --version
PHP_CodeSniffer version 3.7.1 (stable) by Squiz (http://www.squiz.net)
```

### WordPressのPHPコード規約をphpcsに登録する

WordPressのコーディング規約がgitに管理してあるので、gitからクローンします。

```powershell
git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git C:\Users\[ユーザー名]\AppData\Roaming\Composer\vendor\wp-coding-standards\wpcs
```

:::note
phpcsで使用するので、``C:\Users\[ユーザー名]\AppData\Roaming\Composer\vendor\``以下に入れておいた方がよいです。
:::

### phpcsにコーディング規約を設定します

先ほどGitから落としたコーディング規約を、phpcsにセッティングします。
```powershell:powershell
phpcs --config-set installed_paths C:\Users\[ユーザー名]\AppData\Roaming\Composer\vendor\wp-coding-standards\wpcs
```

phpはWordPress関連しか使用しないよ！って人は、デフォルトのコーディング規約をWordPressに設定してしまった方が良いです。

```powershell:powershell
phpcs --config-set default_standard WordPress
```

これで、phpcsを使用したphpの整形をできるようになりました！

ちなみに、現在のコーディング規約はどのファイルを参照しているかは、次のファイルに記載されています。
``C:\Users\[ユーザー名]\AppData\Roaming\Composer\vendor\squizlabs\php_codesniffer\CodeSniffer.conf``

```php:CodeSniffer.conf
<?php
  $phpCodeSnifferConfig = array (
    'installed_paths' => 'C:\\Users\\[ユーザー名]\\AppData\\Roaming\\Composer\\vendor\\wp-coding-standards\\wpcs',
    'default_standard' => 'WordPress',
  );
?>
```

WordPressのコード規約が追加されたかは、-i オプションで確認できます。

```powershell:powershell
phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs and WordPress-Extra
```

## VS Codeの拡張機能設定

自動整形をするためには、VS Codeの拡張機能をインストールします。

https://marketplace.visualstudio.com/items?itemName=ValeryanM.vscode-phpsab

VS Codeのsetting.jsonに以下の記述をします。

```json
{
  "[php]": {
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "valeryanm.vscode-phpsab",
  },
}
```

これにより、保存時にPHPのコードが自動整形されます。

## phpcsのルールを変更したい場合

``C:\Users\[ユーザー名]\AppData\Roaming\Composer\vendor\wp-coding-standards\wpcs\WordPress\ruleset.xml``に色々と記載できます。

こちらにわかりやすい設定方法が記載されていました。

https://qiita.com/watta10/items/cea26ccc52eb19787eec

## 参考資料

https://blog.photosynthesic.jp/2021/01/phpcs-wordpress-01/

https://ginneko-atelier.com/blogs/entry452/

https://qiita.com/super-mana-chan/items/401eb5cf06bbacddb5d3

https://yumegori.com/vscode-wordpress-php-format

https://nullnull.dev/blog/wordpress-coding-standards-in-vscode/

https://yosiakatsuki.net/blog/vs-code-phpcs-wordpress/