WordPress Coreが7.1に向けてPR時のPHPUnitテストをPHP3バージョンに絞った
目次
Make WordPress Coreは2026年7月30日、7.1へ向けたPHPUnit実行の削減を発表した。
PHPUnitはPHPやデータベースのバージョンを掛け合わせた組み合わせ(マトリクス)ごとにジョブを走らせる。全組み合わせを大量のPRやバックポートブランチで同時に走らせると、GitHub Actions側の容量を圧迫するためだ。
| 指標 | 変化 |
|---|---|
| 1回の実行あたりのジョブ数 | 約52%減 |
| 1回の実行あたりのジョブ分 | 約54%減 |
| 成功状態にするため再実行が必要だった実行 | 約68% → 約36% |
GitHub Actions APIで変更前後の比較可能な実行を取り、ジョブ数、実行時間、再実行数を測ったとしている。
PRでテストするPHPを3バージョンに絞った
| ブランチ | PR | PR時にテストするPHP | 外した中間バージョンの検出方法 |
|---|---|---|---|
| trunk | #12719 | 7.4、8.0、8.5 | 日曜cronの週次スケジュールで全バージョン |
| 7.0 | #12720 | 下限側と上限側(組み合わせ約168 → 約72) | なし |
| 6.8 | #12726 | 7.2、7.4、8.0、8.4(約198 → 約99ジョブ) | 記載なし |
trunkでは、PR時に走るテストがPHPの下限側と上限側になり、外した中間バージョンの失敗は週1回の日曜cronで検出される。
flowchart TD
PR[PRとプッシュ] --> BASE[基本の組み合わせだけ実行<br/>PHPは下限と上限]
BASE --> MERGE[trunkへマージ]
MERGE --> CRON[日曜cronで週1回<br/>全PHPバージョンを実行]
CRON --> MID[中間バージョンの失敗は<br/>ここで検出]
trunk向けのPR #12719では、中間の 8.1、8.2、8.3、8.4 を基本の組み合わせから外した。
ただし、変更対象外の include ジョブでは、8.3 と 8.4 の一部がPR時にも残る。
7.0ブランチでは、スケジュールワークフローがデフォルトブランチからしか動かないため、trunkのような週次の全組み合わせ実行は設定されていない。
Make投稿は、PHPの対応範囲は維持し、重複するデータベース組み合わせを削ったと書いている。
一方で、#12719と#12720のPR本文は、少なくともその変更範囲をPHPバージョンのみと明記し、データベースバージョン、マルチサイト、memcached、include ジョブは変更していないとしている。
6.8ブランチはテストの組み合わせが多い
Make投稿の次の予定には、6.8ブランチのテスト組み合わせの削減が挙がっていた。
PR #12726側では、7.2 から 8.4 までの全PHPバージョンを3つのジョブグループで回していた構成を、表の4バージョンへ絞る内容になっている。
そもそもPHP 7系がテストに残るのは、WordPressの利用率基準による。
WordPressは、監視対象サイトでの利用率が約5%を下回ったPHPバージョンを廃止候補にしており、7.2と7.3は合計の利用率が4%を下回ったため、2026年1月に廃止が発表された。
WordPress 7.0で最低サポートはPHP 7.4になり、trunkのPR時テストの 7.4 始まりはこれと対応する。
推奨バージョンの8.3以上は、この最低サポートバージョンとは別に案内されている。
6.8は古いPHP下限を維持しているため、下限側と上限側として残すバージョンもtrunkや7.0とは違う。
複数ブランチを同時に回すセキュリティリリースやドライランでは、6.8のテスト組み合わせが多いぶん同時実行数も増える。
GutenbergとDockerイメージの取得では失敗の種類が違う
Gutenbergビルドも、ジョブごとの取得からワークフロー実行ごとに1回の取得へ変わった。
変更前は同じ成果物をジョブごとに取り直しており、ネットワーク依存で失敗する箇所もジョブの数だけあった。
発表では、これとDockerイメージ取得の上限付きリトライを合わせて、再実行が必要な割合が下がったとしている。
| 対策 | 変更 | 減らす失敗 |
|---|---|---|
| Gutenbergビルドの取得 | ジョブごと → ワークフロー実行ごとに1回 | ジョブ数に比例するネットワーク依存の失敗 |
| Dockerイメージの事前取得(#12703) | env:start の前にComposeサービスを取得。最大3回、失敗後に10秒・20秒待ちで再試行 | Docker Hubやネットワークの一時的な失敗 |
Dockerイメージ取得のPR #12703は、再利用可能なPHPUnitワークフローで env:start の前に必要なComposeサービスを先に取得する変更だった。
対象は wordpress-develop、php、mysql、cli で、memcachedが有効な時だけ memcached も含める。
Dockerイメージ取得のリトライは、ジョブ数削減とは別の対策で、Docker Hubやネットワークの一時的な失敗を減らす。
PHPUnitのテストケース自体の実行時間は変わらない。
Make投稿も、今回の削減はジョブ数を削るもので、テストそのものはまだ調整できる、と書いている。
PRテストをさらに減らす案も出ていた
Make投稿のコメント欄では、PR上のテストをもっと減らし、trunkへマージした後にスケジュールテストで検出する案も出ていた。
この案ではCI使用量をさらに減らせるが、失敗検出がマージ後へずれる。
参考
- Make WordPress Core: Leaner, steadier PHPUnit runs for upcoming releases
- Make WordPress Core: Dropping support for PHP 7.2 and 7.3
- PHP Compatibility and WordPress Versions
- WordPress/wordpress-develop #12719
- WordPress/wordpress-develop #12720
- WordPress/wordpress-develop #12701
- WordPress/wordpress-develop #12726
- WordPress/wordpress-develop #12703