はじめに
こんにちは。配配メール開発チームに所属しているmrstsgkです。
2023年3月23日から3月25日に開催されたPHPerKaigiに参加しました!
(LT枠で登壇しました!とても楽しかったです!)
発表後、PHP_CodeSnifferについて進展があったので、このブログで紹介いたします。
PHP_CodeSnifferとは
コーディング規約の違反を検出するライブラリです。
PSRやPEARなどの様々なコーディング規約を指定して検査を実施しています。
独自の規約を追加することも可能です。
私たちのチームでは、独自のルールセットを採用しています。
原則 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を設定する際は、公式のドキュメントを参考にすれば導入しやすいと思います。
導入
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つが揃うことで真の快適さが得られると感じました。