WordPressのPHPUnitが刷新、プラグイン・テーマはポリフィル利用を

二週間ほど前の発表になるが、WordPress コアのユニットテストで利用しているPHPUnitのバージョンが9.x系にアップグレードされ、ユニットテストを新しくする試みがおこなわれている。これまではPHPUnit7系と8系でエラーを吐いていたのだが、これらの問題は解消されたようだ。

さて、コアの方は改善してめでたしめでたしなのだが、これまでのWordPressテーマ・プラグイン開発の定石として「コアの提供するユニットテストを利用する」という手法がとられていた。多くは WP-CLI の scaffold コマンドで生成される bin/install-wp-tests.sh を利用する。これはWordPressとコアのユニットテストフレームワークをダウンロードして結合テストの状態で始められる便利コマンドなので、GitHub ActionsのようなCI/CDのDockerコンテナ上で環境を揃えることができる。

ところが、WordPressコアのPHPUnitが刷新されたことによって、このシェルスクリプトで構築される環境のPHPUnitが古いWordPressおよびPHPバージョン7.0以下(戻り値型voidが原因らしい)でエラーになってしまう。

WordPress 5.5 でエラー。

このエラーは特にいじっていないリポジトリでも発生してしまうので、筆者のように数十のプラグインをメンテナンスしている人はけっこうな苦労をすることになるだろう。

解決策は2つある。

  1. サポートするWordPressのバージョンを限定する。
  2. Yoastの提供するPHPUnit-Polyfills を使う。筆者はこちらが楽だと思う。

後者を選択した場合、composer.jsonは次のようになる。実際にテストが通るサンプルはこちら

	"require-dev": {
		"phpunit/phpunit": "^5.7|^6",
		"squizlabs/php_codesniffer": "^3.0",
		"wp-coding-standards/wpcs": "^2.0",
		"yoast/phpunit-polyfills": "^1.0"
	},

また、コアで推奨されるPHPUnitのバージョン指定は次のものが正しいらしい。

	"require-dev": {
		"phpunit/phpunit": "^5.7.21 || ^6.5 || ^7.5",
		"yoast/phpunit-polyfills": "^1.0"
	},

このように書いておくと複数のPHPとWordPressバージョンでもいい感じにしてくれるだろう。

なお、WordPressは今後もユニットテストの改善を続けていく予定だ。いままではある一定のバージョンで構築されたテストフレームワークを使い続けていたが、今後は継続的に環境をアップデートしていくようだ。要するにPHPUnitのアップデートに追従していくということである。ややレガシーな側面が多く見られるWordPressだが、そうした部分もアップデートされているわけだ。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください