RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【実録】「PHP_CodeSniffer」で始める快適実装ライフ

はじめに

こんにちは。配配メール開発チームに所属しているmrstsgkです。
2023年3月23日から3月25日に開催されたPHPerKaigiに参加しました!
(LT枠で登壇しました!とても楽しかったです!)

speakerdeck.com

発表後、PHP_CodeSnifferについて進展があったので、このブログで紹介いたします。

PHP_CodeSnifferとは

  • コーディング規約の違反を検出するライブラリです。

  • PSRやPEARなどの様々なコーディング規約を指定して検査を実施しています。

    • PSRとは:PHP Standards Recommendationsの略で、PHP-FIG(The PHP Framework Interop Group)が策定しているPHPの規約です。

    • PEARとは:PHP Extension and Application Repositoryの略で、PHPで利用する事ができるライブラリ(パッケージ)を提供しているサービスのことです。
      似た名前でPECLがありますが、こちらはC言語で書かれた拡張ライブラリ (extension) を提供するサービスのことです。

  • 独自の規約を追加することも可能です。
    私たちのチームでは、独自のルールセットを採用しています。
    原則 PSR12 に準拠するルールセットになっていますが、else ifの代わりにelseifを使用するなど既存コードの影響で大量に指摘が出そうなルールは除外しています。

運用フロー

  • CIでの自動チェック。
    親ブランチと比較して増加したエラーのみが出力されます。

\

問題点

現状の運用フローでの問題点

PHP_CodeSnifferの指摘をまとめて受け取る

チームの開発の流れとして、実装完了時に今までのcommitをまとめてGitLabにpushすることが多くありました。
なので、PHP_CodeSnifferの指摘をまとめて受けるため、対応で工数が増加する問題が発生しました。

PHP_CodeSnifferの指摘を確認するために、都度CIを実行しなければならない

PHP_CodeSnifferの指摘をまとめて受け取る」という問題を解決するために、こまめにGitLabにpushするようになりました。 しかしCIでの自動チェックが完了するまでにタイムラグがあり、待ちの時間ができてしまいました。
CI実行中にほかの作業に着手するのでスイッチングコストの増加が見られ、実装に集中しにくい環境になっていました。

改善

PhpStormにPHP_CodeSnifferを設定する

現状の運用フローだと、PHP_CodeSnifferを確認できるのがGitLabにpushすることだけだったので、
確認できる段階をもっと早くするためにPhpStormにPHP_CodeSnifferを導入することになりました。

また、PHPerKaigi後に寄せられたフィードバックを確認していると、以下のフィードバックをいただきました。
(フィードバックありがとうございます!!)

IDEに組み込めばCIにあげる前に手元でチェックできるので、フィードバックサイクルを早められてよいと思いました。

PhpStormにPHP_CodeSnifferを設定する際は、公式のドキュメントを参考にすれば導入しやすいと思います。

pleiades.io

導入

PHP_CodeSnifferをインストールする

公式のドキュメントによると

PHP_CodeSnifferをComposerと共にインストールすると、PhpStormは必要なスクリプトを自動的にダウンロードし、IDEに登録し、オプションで対応するコードインスペクションを有効にして構成します。

とのことなので、composerをインストールします。

php composer.phar install

PhpStorm の設定画面を開き、PHP_CodeSniffer の実行設定を行う

Settingsを開きます。
PHP > Quality Tools内にPHP_CodeSnifferがあるので、そこから設定することができます。

インタプリタの設定を追加

※設定例
PHP_CodeSniffer path:/usr/local/phpcs/vendor/bin/phpcs
Path to phpcbf:/usr/local/phpcs/vendor/bin/phpcbf

その後

実装中にPHP_CodeSnifferの確認ができるようになった

PhpStormにPHP_CodeSnifferを導入することで、問題点であった「PHP_CodeSnifferを確認できるのがGitLabにpushすることだけ」を解決することができました。

PHP_CodeSnifferをCIに組み込んだときに出た良い副産物として、
開発中に細かいCommit粒度でGitLabへpushするようになり、「開発→CIでコードを確認→修正」のサイクルで実装に集中しやすい状態になりましたが、
PhpStormにPHP_CodeSnifferを導入することで、「開発→静的解析→修正」のサイクルを回すことができるようになり、より実装に集中しやすい環境になりました!!

CIの自動チェック完了までにタイムラグがあり、待ちの時間ができる問題について

こちらの問題は、PhpStormにPHP_CodeSnifferを導入しても解決することはできません。
根本的な原因として、CIのジョブがいつ完了しているかわからないので定期的にGitLabを確認しなければなりませんでした。
なので、CIのジョブが完了したら連絡が来る仕組みを作って対応しています。

まとめ

静的解析ツールはやはり最高でした!! コーディング時の早い段階でエラーを検出できるため、バグ修正コストを抑制できることや、共通のコーディングスタイルを推進できるため、コードの可読性や保守性が向上するなどの多くの利点があります。 皆さんも是非、静的解析ツールを利用して快適な開発ライフをお過ごしください。 ただプロジェクトにもよりますが、PHP_CodeSnifferは「IDEへの導入」「CIでの自動チェック」「CIのジョブ連絡」この3つが揃うことで真の快適さが得られると感じました。

Copyright © RAKUS Co., Ltd. All rights reserved.