WordPressプラグイン開発でphpcsを使った静的解析をする方法

開発の品質を高めるための一つの鍵は、コードの静的解析です。WordPressプラグイン開発において、この手法は特に重要です。

この記事では、私がWordPressプラグインの開発中に直面した様々な課題と、それらを克服するためにphpcsを用いた静的解析の導入方法について共有します。

初心者から経験豊富な開発者まで、効率的で堅牢なWordPressプラグインを開発するための実践的なアドバイスを提供します。コードの品質を高め、信頼性のあるプラグイン開発を目指しましょう。

静的解析で解決できる事

設定方法を紹介する前に、静的解析を行う必要があるのか、静的解析をする事で何を得られるのかを明確にしておきます。

コードの標準化

まず初めにコードの記述方法を統一させるためという点があります。

静的解析ツールは、WordPressコーディング標準に従っているかどうかをチェックし、一貫性のあるコーディングスタイルを保つのに役立ちます。これにより可読性が向上し、メンテナンスが容易になります。

バグの早期発見

静的解析を利用することで、実行前にコード内のエラーや潜在的な問題を発見できます。これにより、デバッグの時間が大幅に削減され、より効率的な開発が可能になります。

セキュリティリスクの低減

バグの早期発見と似ていますが、セキュリティの脆弱性は、しばしばコードの特定のパターンによって引き起こされます。

静的解析はこれらのパターンを識別し、セキュリティ上の問題を未然に防ぐのに役立ちます。

パフォーマンスの最適化

不要なコードや効率的でない処理を指摘することで、プラグインのパフォーマンスを向上させることができます。

これにより、ユーザー体験の向上にもつながります。

コードの理解と教育

最後に、プラグイン製作者である自分自身の理解不足であったり経験値を高めるために必要な項目になります。

静的解析ツールは、特に新しい開発者にとって、ベストプラクティスやコーディングの標準について学ぶ機会を提供します。これによりよりよいプラグイン制作のためのスキル向上に貢献します。

以上が静的解析ツールを導入して得られる事、利点になります。

次はその静的解析を実行するためのphpcsを設定する方法を解説していきます。

phpcsの設定方法

PHPの静的解析ツールは様々なものがありますが、一番ポピュラーでWordPress用のルールも提供されている phpcs の WordPress-Coding-Standards を設定していきます。

https://github.com/WordPress/WordPress-Coding-Standards

こちらはphpcsのWordPress用のルールセットとして提供されているものになります。

最初にサンプル用のプラグインを作成して、設定方法を順に紹介していきます。今回はブロックエディタを提供するプラグインを例にしております。

$ npx @wordpress/create-block@latest example-plugin
$ cd example-plugin
$ composer require --dev wp-coding-standards/wpcs:"^3.0"
$ composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true

導入自体はこれだけで完了になります。

実行方法はこちら

$ vendor/bin/phpcs -ps example-plugin.php --standard=WordPress  
. 1 / 1 (100%)


Time: 49ms; Memory: 12MB

実行できるコマンドは2種類あります

  • phpcs
    • ルールセットに違反しているものが無いか確認
  • phpcbf
    • ルールセットに違反しているものを可能であれば自動で整形

この2種類のコマンドを活用することで静的解析を実現することができます。

ただ、このままだと単体ファイルの静的解析は出来るのですが、プラグインで記述しているPHPコードをまとめて静的解析ができないので少々手間です。

# プロジェクト内全てを対象として実行するとcomposerで入れた関係ないファイルまで解析しようとします

$ vendor/bin/phpcs -ps . --standard=WordPress
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE    60 / 27145 (0%)
EEEEEEEESSSEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /path/to/example-plugin/vendor/squizlabs/php_codesniffer/src/Reporter.php on line 372

The PHP_CodeSniffer "phpcs" command ran out of memory.
Either raise the "memory_limit" of PHP in the php.ini file or raise the memory limit at runtime
using `phpcs -d memory_limit=512M` (replace 512M with the desired memory limit).

除外ファイルの設定であったり、毎回 --standard=WordPress の引数を指定する手間をなくすために 設定ファイルを導入します。

サンプルの設定ファイルは公式から配布されているこちらを活用します

https://github.com/WordPress/WordPress-Coding-Standards/blob/develop/phpcs.xml.dist.sample

$ wget https://raw.githubusercontent.com/WordPress/WordPress-Coding-Standards/develop/phpcs.xml.dist.sample
$ cp phpcs.xml.dist.sample phpcs.xml.dist
$ vi phpcs.xml.dist
$ diff phpcs.xml.dist phpcs.xml.dist.sample 
32,35d31
< <!-- ブロック -->
< <exclude-pattern>/build/*</exclude-pattern>
< <exclude-pattern>/src/*.js</exclude-pattern>
<  112c108,109
< <element value="example-plugin"/>
---
> <element value="my-textdomain"/>
> <element value="library-textdomain"/>
120c117
< <element value="example_plugin"/>
---
> <element value="my_prefix"/>

途中でファイル内を編集しています。ブロックエディタ用のjsファイルを除外したり、プラグイン用のドメインやプレフィックスを適応しているので、適時ご自分の設定に合うように編集してください。

これで以下のように実行することができます。

# 何も問題が無いので出力は無し
$ phpcs

# 編集対象が無し
$ phpcbf

No fixable errors were found

Time: 72ms; Memory: 10MB

あとはご自分のエディタツールから実行したり、githookやCIツールでの実行など、設定してみてください。

お疲れ様でした。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA