2025年3月30日日曜日

GitHub Actions で WordPress の PHPUnit テストをする方法

開発した WordPress プラグインなどを GitHub で公開しているなら、ローカルで PHPUnit テストをするのではなく、GitHub Actions でやりたい!ということはあるかもしれません。ただ、出来た!と思っても、GitHub側のシステム、 WordPress の本体バージョン、PHPのバージョン、MySQLのバージョンなどによって動かなくなることもあります。

そこで、GitHub Actions で WordPress の PHPUnit テストをする方法についてまとめページを作ろうと思いました。

ここでは、 WordPress の PHPUnit のテストが GitHub Actions で動くまでを書きます。2025年3月30日時点では、PHP7.4, 8.0〜8.4までのテストを対象にしています。

なお、ここでの作業のみでは GitHub Actions で WordPress の環境を作って、プラグインを有効化して致命的なエラーなく動作はするまでのテストができるということになります。

もし各プラグイン等でいろいろテストしたい場合の実装は PHP テストの作成(WordPress.org)を参考にしてみてください。

以下は下記の筆者の極めてシンプルなプラグイン(プラグインは WordPress が用意するショートコード一覧を表示する)をベースに説明していきます。

https://github.com/kimipooh/view-shortcodes

検証日:2025年3月30日


STEP 1. GitHub の環境を整える


こちらについては、出来ているものとします。


あたりで GitHub を使えるようにした上で、Sourcetree のような GUI ツールを使うのもありかなと思います。

STEP 2. PHPUnit をインストールする


こちらについても、ローカルではできているものとします。

WordPressでテスト駆動開発(PHPUnit)〜インストール編 | 【新潟】WordPressならminescope

https://phpunit.de/getting-started/phpunit-9.html

あたりを参考に Composer を使ったローカルでテスト環境を1つは作成してください。

とりあえず体験してみたい!という場合には、下記を参考にしてみてください。


このあたりがわからない場合


下記より PHPUnit 環境込みのプラグインデータをダウンロードして、

https://github.com/kimipooh/view-shortcodes

自分のプラグインフォルダへ

composer.json
phpunit.xml.dist
phpunit フォルダ
tests フォルダ

をコピーした上で、次に進んでください。


STEP 3. 必要なファイルを用意する



を例にとって説明していきます。
こちらのプラグインは WordPress が用意するショートコード一覧を表示するだけであり、特別なテストは不要です。WordPress 上でプラグインを有効化して致命的なエラーがでなければ良しとしています。

以下、上記のデータをベースに変更箇所についてお伝えします。
すでにローカルでテストされているなら、「1」「2」は不要な場合もあります。
また 「2」「3」については、補足説明します。

1) tests/bootstrap.php 

require dirname( dirname( __FILE__ ) ) . '/view-shortcodes.php';

require dirname( dirname( __FILE__ ) ) . '/自分のプラグインのメインファイル名.php';

に置き換える。

2) composer.json

        "name": "kimipooh/view-shortcodes",

        "description": "The plugin is for displaying active shortcodes in the admin main menu.",

        "name": "ご自身のGitHubユーザー/自分のプラグインのメインファイル名",

        "description": "自分のプラグインの説明",

に置き換える。

また "authors" にある、下記も変更してください。

                       "name": "自分の名前を入れる",

                       "email": "公開するメールアドレスを入れる"



3) .github/workflows/wordpress.yml(隠しファイル)

name: view-shortcodes plugin test

name: 自分のプラグインのメインファイル名 plugin test

に置き換える。


補足説明


直感的にわかりにくいところの説明をします。

composer.json


         "phpunit/phpunit": "^9.5 || ^10.5 | ^11.5 | ^12.0"

上記は PHPUnit テストのどのバージョンを使うかを指定します。複数使いたい場合には || で区切ります。上記のケースでは、 9.5、10.5、11.5、12.0 のそれぞれ最新版を使うということです。11.5.13 などピンポイントで指定することもできます。

PHPUnit として使えるバージョンは、下記のサイトを確認してみてください。

https://phar.phpunit.de/

また PHPUnitのバージョンによっては利用できる PHPバージョンも異なります。

こちらについては下記を参考にしてください。

https://phpunit.de/supported-versions.html

PHP7.4 や 8.0 をテストしたいなら、PHPUnit 9が必要

PHP8.1 なら PHPUnit 10を、PHP8.2 なら PHPUnit 11を、PHP8.3なら PHPUnit 12がサポートしています。ただし。サポートしていなくても動く場合もあります。PHP8.4 については PHPUnit 12で動作しました。

wordpress.yml


こちらについては GitHub Actions のワークフローファイルになります。
拡張子 yml のファイルを .github/workflows/ フォルダ以下にいれることで GitHub Actions で読み込まれます。

参考:GitHub Actions のクイックスタート - GitHub Docs

matrix: 以下にテストしたい PHP バージョンや WordPress バージョン、PHPUnit テストバージョンを列挙していくということになります。

こちらのテスト環境については、下記などを参照・利用しています。

https://github.com/shivammathur/setup-php

WordPress 5.4 や MySQL 5.6 や 8.0 などの条件分岐を設けていたりしますが、大きく分けて PHP 8.0 以上か、それ未満かで Composer の v1 か v2 のいずれを使うかが異なるのでその部分の条件分岐もいれています。

また WordPress のマルチサイトのテストも含めています。

STEP 4. GitHub へプラグインとPHPUnit テストをアップロードする

問題なければ下記のようにテストが成功します。


付録. エラー例




上図のようにすべてのテストが失敗することもありますし、一部バージョンのみだめな場合もあります。


エラー例1)SVNコマンドが GitHub Actions が利用するOS (Ubuntu) から削除されていた


エラー情報


+ svn co --quiet https://develop.svn.wordpress.org/tags/6.7.2/src/ /tmp/wordpress/
phpunit/install.sh: line 38: svn: command not found
Error: Process completed with exit code 127.

phpunit テストが GitHub Actions でエラーが起きてますね。

下記をみると svn コマンドが削除されていたようで、存在しないというエラーになっていました。つまりは明示的にインストールする命令を与えないといけないようですね。

参考:Build/CI: Explicitly install SVN within GitHub Actions due to Ubuntu 24.04 update #337

上記を参考に、下記のようなコードが必要でした。

phpunit/install.sh において

install_wp_and_test_suite() {

の前に下記を追加。

install_svn() {
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}

# Check if SVN is installed
if command_exists svn; then
echo "SVN is already installed."
else
echo "SVN is not installed. Installing SVN..."
# Install SVN
sudo apt-get install -y subversion
fi
}

その上で、一番下の関数を呼び出している
install_wp_and_test_suite
の前に
install_svn を追加する必要ありました。

全体は、下記を参考にしてみてください。


エラー例2)PHP8.1 以降で Configuration.php on line 570 とでて GitHub Actionsが止まる


Run vendor/bin/phpunit
PHP Fatal error:  Cannot acquire reference to $GLOBALS in /home/runner/work/view-shortcodes/vendor/phpunit/phpunit/src/Util/Configuration.php on line 570
Error: Process completed with exit code 255

下記にあるように、PHP 8.1 以降の $GLOBAL の扱いが変わったことが問題でした。

こちらについては テストする PHPバージョンに対して、 PHPUnit が古いことが原因でした。

PHPUnitの Supported Versionsを参考にすると、
  • 9.5の最新:PHP7.4と8.0用
  • 10.5の最新:PHP8.1用
  • 11.5の最新:PHP8.2用
  • 12.0の最新:PHP8.3と8.4用
となっていますが、PHP 8.0以降すべて PHPUnit 9.5 を使っていたため、PHP8.1 以降にエラーがでていたのでした。

2025年3月30日 @kimipooh

0 件のコメント:

コメントを投稿