PHPのコードスタイルをチェックしてくれるツール (Linter) といえば、PHP_CodeSnifferとPHP-CS-Fixerの2つが有名です。
2種類あるがゆえに、いざツールを導入しようとなると「どっちを選べばいいの!?」となりがちだと思います。というか自分が実際なりました。
というわけで、私が担当プロダクトへのLinter導入にあたって調査した、PHP_CodeSnifferとPHP-CS-Fixerの比較を紹介します。
使い方
いずれもComposerでインストールし、コマンドラインから実行できます。
特徴としては、PHP_CodeSnifferはチェックと自動修正でそれぞれphpcs
,phpcbf
という別コマンドに分かれているのに対し、PHP-CS-Fixerはphp-cs-fixer fix
コマンドで自動修正、それに--dry-run
オプションを付けるとチェックのみになる、という違いがあります。
PHP-CS-Fixerは "Fixer" という名前からもわかるように、あくまでコードの修正が基本で、チェックする機能はそのドライランという位置づけのようです。
インストール
# PHP_CodeSniffer
composer require --dev squizlabs/php_codesniffer
# PHP-CS-Fixer
composer require --dev friendsofphp/php-cs-fixer
チェック
# PHP_CodeSniffer
vendor/bin/phpcs target_file.php
# PHP-CS-Fixer
vendor/bin/php-cs-fixer fix --dry-run target_file.php
自動修正
# PHP_CodeSniffer
vendor/bin/phpcbf target_file.php
# PHP-CS-Fixer
vendor/bin/php-cs-fixer fix target_file.php
設定ファイル
いずれも設定ファイルでコーディングルールの細かい指定が可能ですが、フォーマットが異なります。
- PHP_CodeSniffer: XMLファイル
- PHP-CS-Fixer: PHPファイル
これはどちらが優れているというよりは、好みの問題でしょう。
個人的にはPHPファイルの方が普段から見慣れていてよさそうに感じます。
人気度
OSSの場合、一般に利用者が多いものほど洗練されていてバグが少ないことが多いです。
そのため、人気度も大事になってきます。
人気度の測り方はいろいろあると思いますが、今回は下記2点を基準としました。いずれも2022/12/25時点で確認した数値を記載しています。
- 直近30日間のPackagistでのダウンロード数
- GitHubリポジトリのスター数
PHP_CodeSniffer | PHP-CS-Fixer | |
---|---|---|
直近30日のダウンロード数 | 3,895,973 | 2,687,527 |
GitHubのスター数 | 9,878 | 11,581 |
ダウンロード数ではPHP_CodeSnifferが上、スター数ではPHP-CS-Fixerが上という結果です。これに関してはどちらも十分人気があると言っていいでしょう。
リリース頻度
頻繁にリリースされているほど、バグ修正やPHPの新しい文法への対応も迅速に行われていると考えられます。
2022年中のリリース回数は以下の通りでした。
- PHP_CodeSniffer
- 2回
- PHP-CS-Fixer
- 15回
これはPHP-CS-Fixerが圧倒的に上回っていました。
PHP_CodeSnifferも開発が止まっているわけではありませんが、最新のPHPの文法をガンガン使っていきたいような場合はPHP-CS-Fixerの方がいいかもしれません。
設計思想
先ほども出てきましたが、PHP-CS-Fixerは原則としてコードの自動修正を目的としています。
そのため、自動修正できないような問題を検知するコーディングルールが用意されていないという特徴があります。
たとえば、1行あたりの文字数の長さをチェックするルールは、PHP_CodeSnifferには存在しますが、PHP-CS-Fixerにはありません1。
私のチームでは、自動修正できない問題も検知したいという理由から、最終的にPHP_CodeSnifferを採用することにしました。
それぞれのチームやプロダクトに合ったLinter選びの参考になれば幸いです!