10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラクスAdvent Calendar 2022

Day 21

PHP_CodeSnifferとPHP-CS-Fixerの比較

Last updated at Posted at 2022-12-27

PHPのコードスタイルをチェックしてくれるツール (Linter) といえば、PHP_CodeSnifferPHP-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選びの参考になれば幸いです!

  1. https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/1361

10
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?