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

2025年3月23日日曜日

【大阪】Kansai WordPress Meetup@大阪&神戸『WordCamp Asia 2025』を振り返るに参加して#WMKansai

昨年は、いろいろ予定が詰まってしまいバタバタしていたこともあって、WordPress 関連については疎遠になってしまっていました。今年は、積極的に Meetup 等イベントに参加していきたいと思っています。


結構な人数が参加していましたね!


さて、今年始めて参加した WordPress Meetup は、大阪です!
会場は、グラングリーン大阪北館3F Blooming Camp by さくらインターネットです。

会場は上の写真から右奥に入ったところにあるガラス張りの別空間でした。見晴らしがいいですね!

さて今回は、マニラ(フィリピン)で開催された WordCamp Asia 2025を振り返るということ。筆者は2024年7月にフィリピンに始めて訪れました。といっても場所はマニラ市から北東にあるケソン市というところなのでした。残念ながら WordCamp Asia にはまだ参加したことはありません。


うめきた公園


久しぶりの大阪で、大きな公園が出来ているということで様子を見てきました。



半端ない人たちですね、や、焼けそう〜って思いつつ、まぁ外から眺めるだけでいいかなぁという雰囲気でした。

子供連れがとても多かったですね〜

プログラム


お菓子も用意されていました。おお、岡山のきびだんごもありましたね〜



さて最初に会場説明があり、その後に全員の自己紹介タイム。その後に振り返りがありました。名古屋など遠くから来られた方や外国人の方もおられて盛況でした。

以下、筆者が聞き取った内容のメモが主になります。聞き取りミスったり、筆者の理解が異なることで、発表者の意図とは異なってしまう可能性はあります。そのことを念頭においてください。

WordCamp Asia 2025の様子は、当時のハッシュタグ #WCAsia でも確認できます。
https://x.com/hashtag/WCAsia


『WordCamp Asia 2025』に行ってきたよ! 参加者全員 



冒頭、WordCamp Asia 2025に参加された方からの紹介。
日本からはいくつかのグループになってホテルも一緒にとったとのこと。


とにかく会場がでかい!イオンモールの大きさのものが何個も集まっているぐらいでかいらしい。コントリビューターDAYは500名ぐらいが参加していたということ。
コントリビューターDAYの全体リードが日本人(Toruさん)だったことも印象的。


翻訳について、どこから翻訳するのかについても若干の説明もあった。
会場の昼食、食べ放題で、とても美味しかったとのこと。

発表者がオススメのセッション


DataViews and DataForms: The future of structured content in WordPress

After the Browser: AI Assistants as the New Gateway to Digital Services
*これまではユーザーは問題を解決するために、検索してサイトを探してアクセスして情報を得るということをしていた。つまりサイトに訪れるときに広告による収益モデルだったが、生成AIはサイトには訪れないという問題がある。つまりこの収益モデルが破壊されてしまうのではないか。そうした話の模様。発表者はあとで今後どうしていったらいいのかと聞いたら、「どうしたらいいものか、幸先不透明」ということだった模様。


他の参加者からの体験を少しずつ紹介。
途中で体調不良になって大変だったらしい。


受付をやった方もいた模様。当日ボランティアはチケットが無料になるとか。英語力が上がってよかった。


スポンサーとして参加された方。いろいろ聞かれて楽しかったとのこと。



スポンサーブースを見て回ると、年々もらえるものが多くなってきてすごくなっていっている印象があった。朝一の最初にいくともらえやすいということ。


YouthCamp (8〜17歳の参加)をみていると、 WordPress . com でサイトを作るなどをしていたとのこと。スタッフの子供さんも結構いて、親はかなり真剣になっていたとのこと。子どもたちもかなり楽しそうで、Geek な子供もいたとのこと。

Social Night(写真)は、スポンサーやスタッフなど会場関係者のみの前夜祭とのこと。

海外の WordCamp にいきなりいくと、わけがわからない状況になるかもしれない。しかし、その熱気を味わうだけでも価値があると思うとのこと。英語が不得意な人たちも結構いるので、英語が不得意、出来ないからという理由だけで尻込みする必要はない。一緒に行動もすればいいという面もある。

質疑応答一覧


抽選会盛り上がっていたが一番の景品は

> MacBookAir や iPad Pro のフルセット

セッションで言い合いになったことはあったか

> Matt Q&Aコーナー において、https://youtu.be/LEm2NXwbZKc?si=vejIqKCbVcRQBgKU&t=1306 (21:46)
「Automattic 社がコードの60-70%の貢献をしているが、その貢献を取りやめるといっている。しかし WordPress はビジネスにおける重要なものであり、少なくてもコア開発はもっとリソースを提供してほしい」ような質問はあった。
しかし法廷で争っていることもあり、明確な回答は避けたという感じ。一瞬ピリッとしたらしいが、しかし平和裏に終わったという印象だったとのこと。

日本人は何人ぐらい参加しましたか

> 30人以上はいていた気がする。Chatなどでのやり取りをみると40人は超えていたのではないかということ。

日本の WordCamp との違い

> ご飯が食べ放題(予算規模が異なる)。イベント会社に頼めるようだ(フラグシップ限定)。

その後、フリー歓談タイプに移行した。

WordPress でおきた怪奇現象


セキュリティ対策 SiteGuard プラグインを使ってログインURLを変更したが、3, 4日ごとに SiteGuardのプラグインが無効化されてしまう!?


プラグインが無効化されたログはないなど不審なことはなかった。

回答:FTPアクセス権限のある担当者の一人が、URL変更されたことでログインできないということに困って、FTPでアクセスして、プラグインのフォルダを一瞬名前変更してもとに戻して、強制無効化していた。
*FTPでそのような結構詳しくないとできないことについては、生成AIでその情報を得ていた可能性もあるということ。

これに関連して、URLの変更をしたほうがいいのか、しないほうがいいのかの議論。非暗号のFTPをもし使っているなら、その運用はやめたほうがいいだろう。

誰かが質問した一覧(特にやり取りはなし)


以下、自己紹介も含めて WordCamp Asia 2025に対する質問を聞いていて、そのときに出てきたもの、筆者が思ったことの一覧。特にやり取りのなかったものたちの備忘録。

筆者の質問:Contributor Day で翻訳はどのような雰囲気だったのか

下記がその翻訳に関する言語別報告として載っているのを発見。

WordCamp Asia 2025- Contributor Day

これによれば、92名のコントリビューターで、ウクライナ語が2名で 31021と一桁多い。そんな多いの!?って驚いてしまいました。

筆者の質問:Contributor Day でどんなテーマやプラグインの翻訳がされたのか
MattのQ&A の 26:46 あたりに翻訳チームのリーダーが 全員で 35000文字の翻訳をしたといっている。凄まじい。

筆者の質問:WordCamp Asia 2025の Wapuu のコンセプトは?(自己解決した)


下記をみると、フィリピンの伝統的な豆腐スイーツ「Taho」をモチーフにしているということ。

下記をみるとどんなスイーツなのか紹介されています。筆者はフィリピンでハロハロは食べましたが、タホは食べなかったなぁと思ったのでした。

タホ | 【公式】フィリピン政府観光省

また下記が Taho の売人画像のようで、まさにWapuu のような感じですよね!


WordPress の未来を知りたい

スポンサーブースでどのようなものがもらえたのか知りたい

面白いセッションがあったら教えて!

マニラで面白かったことを教えて!

次のWordCamp Asia 行ってみたいけど、インドはどうなのか知りたい

夜のハイテンションな画像等を見せてほしい!


関連情報

以下、筆者が本 Meetup 参加前に、WordCamp Asia 2025で公開されたビデオを事前視聴した事に関する感想です。
  • Matt Q&Aコーナー
    • https://youtu.be/LEm2NXwbZKc?si=5wsdPfXJNn9InxT4&t=2167 (36:07)
      • 事前に筆者が上記を視聴すると、「WordPress にはたくさんのプラグインがあり、それぞれについてデータをどう送信するかコントロールしている。これに対して、コア側でデータを送信するかどうかの一括制御ができるページを作ってはどうか」のような提案があって、Matt氏がナイスなアイデアといっていたのが印象的でした。
        • たしかに!という感じですね!
    • https://youtu.be/LEm2NXwbZKc?si=r3x-UQMiA8vvouL3&t=2473 (41:13)
      • 事前に筆者が上記を視聴すると、「WordPress の未来はどうなるか。偶然飛行機で隣に座っている人とのやり取りで、ウェブサイトをもっている、Notion を使っている。WordPress は必要ないの?、必要ない。このように一部の人はブログは必要ないといっている。Googleがサイトにトラフィックを送らないから」という質問も興味深かったですね。これに対して Matt氏は、「Notion も素晴らしいが、無料でできる範囲は決まっており有限。WordPress はその限界がない点が魅力」と回答していました。
        • 何でもかんでも WordPress ではなく、目的に応じて考えるのは大事ですよね!

懇親会(四季彩 梅田店



最終的に18名が参加。敷居を取っ払って、かなり広い空間で歓談することができました。
QRコードをつかって各自で自由に注文するというスタイルということもあり、食べ物も飲み物もかなりの量を注文して、皆、お腹いっぱいになりました! 店に滞在したのが 17時〜20時40分ぐらいであり、3時間半以上も歓談していていた計算になります。

筆者が写真にとった食べ物リストは下記の通り。多いでしょう!




2025年3月23日 @kimipooh