php cs fixer
link: https://github.com/PHP-CS-Fixer/PHP-CS-Fixer
php cs fixer は コーディング規約に準拠するように PHP コードを整形してくれるツールです。
PSR-1、PSR-2 などで定義されている PHP コーディング規約のどれに沿って整形するかを設定することも可能です。
ここではPSR-12を適用する設定方法を例として挙げます。
Installation
composer require --dev friendsofphp/php-cs-fixer
VSCode で PHP 用の拡張機能の php cs fixer をインストールする。

Configuration
VSCode の settings.json に以下の設定を追加する。
設定内容は必要に応じて変更可能。
{
"php.validate.executablePath": "/usr/local/bin/php", // phpのパス
"php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
"php-cs-fixer.onsave": true, // 保存時に自動整形
"php-cs-fixer.autoFixBySemicolon": true,
"php-cs-fixer.rules": "@PSR12", // PSR-12ルールの適用
"editor.formatOnSave": true,
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer"
}
}
設定を追加したら、VSCode を再起動。
php cs fixer を実行するとディレクトリ直下に .php-cs-fixer.cache というキャッシュファイルが自動生成されるため、以下を .gitignore に追記。
.php-cs-fixer.cache
プロジェクトごとに設定を分ける場合の例
プロジェクトでメンバーに設定を共有したりプロジェクトごとに設定を分ける必要がある場合には、
ディレクトリ直下に .vscode/extensions.json と .vscode/settings.json ファイルを作成し、git 管理することが可能。
{
"recommendations": ["junstyle.php-cs-fixer"]
}
{
"php.validate.executablePath": "/usr/local/bin/php", // phpのパス
"php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
"php-cs-fixer.config": ".php-cs-fixer.dist.php", // 後述のルール設定のファイルパス
"php-cs-fixer.onsave": true, // 保存時に自動整形
"php-cs-fixer.autoFixBySemicolon": true,
"editor.formatOnSave": true,
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer"
}
}
ディレクトリ直下に .php-cs-fixer.dist.php ファイルを作成して PHP CS Fixer のルールを設定する。
以下は基本的な設定のため、プロジェクトごとの細かい設定は必要に応じて追加する。
参照:PHP-CS-Fixer/Config file
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__)
->exclude('vendor') // vendorファイルを除外
->name('*.php'); // php拡張子のがいるのみを対象
$config = new PhpCsFixer\Config();
return $config
->setRules([
'@PSR12' => true,
])
->setFinder($finder);
既存ファイルを対象に整形したい場合
上記設定まででは更新をかけたファイルのみにしか整形が行われない。
既存ファイルを整形したい場合には php cs fixer をインストールしたディレクトリで下記コマンドを実行する。
./vendor/bin/php-cs-fixer fix
上記コマンドでは即時変更まで実行されるが、オプションをつけることで変更予定の差分を見ることも可能。
参照:PHP-CS-Fixer/Usage/The fix command
Docker コンテナ内の PHP を使用する場合の例
ローカルに PHP をインストールしておらず Docker 上で起動している PHP のプロジェクトの場合は、拡張機能の Dev Containers を使用する。

docker-compose.yml ファイルを置いているディレクトリ直下に .devcontainer/devcontainer.json ファイルを作成し、以下のように設定する。
ここでの設定がコンテナ内に反映されるため、先述の.vscode/extensions.json や.vscode/settings.json ファイルも不要になる。
{
"name": "php", // 対象コンテナの名前
"dockerComposeFile": ["../docker-compose.yml"],
"customizations": {
"vscode": {
"settings": {
"php.validate.executablePath": "/usr/local/bin/php",
"php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
"php-cs-fixer.config": ".php-cs-fixer.php;.php-cs-fixer.dist.php;.php_cs;.php_cs.dist",
"php-cs-fixer.onsave": true,
"php-cs-fixer.autoFixBySemicolon": true,
"editor.formatOnSave": true,
"[php]": {
"editor.defaultFormatter": "junstyle.php-cs-fixer"
}
},
"extensions": ["junstyle.php-cs-fixer"]
}
},
"service": "api", // docker-compose.ymlの対象コンテナのservice名
"workspaceFolder": "/work/php-docker" // 対象コンテナのDockerFileに設定しているWORKDIR
}
設定後、VSCode で Dev Containers: Rebuild and Reopen in Container を実行すると反映されたコンテナ内の VSCode を開くことができる。
