2025年9月13日土曜日

【大阪】Kansai WordPress Meetup@大阪『WP-CLIの基礎を学ぶ会』#WMKansai #WMOsaka

 今回は普段からサーバー上の WordPress システムの管理運用に大変お世話になっている WP-CLI 絡みということで、是が非でもいかねば!とおもって参加しました。


ちょっといろいろバタバタしていて、WordPress Meetup は3月に参加して以来、久しぶりになります。

場所は、前回参加した場所と同じ、グラングリーン大阪北館3F Blooming Camp by さくらインターネットさんのところでした。

WordCamp, WordPress Meetup 等 WordPress 関連のお土産品(自由にお取りください!)がずらりと並んでいました。結構、いろいろありますね!

WordPress Meetup 広島からは、きびだんごを、それ以外にもいろいろお菓子があるということです!

そうそう、昼食は大阪駅にあるルクアの地下2Fの、とんかつ新宿さぼてん ルクア大阪店で食べました。


また大阪駅にフランスのアーティスト作品、テッド・イベールなる緑色のくま?が鎮座していました。



プログラム



冒頭、WordCamp Kansai 2025 の告知がありました。チケット販売も昨日から開始したということ。筆者も実行委員として参加します。次回、10月11日の本イベント、Kansai WordPress Meetup@大阪で、このWordCamp Kansai 2025 の見どころを発表するということ!

参加者の一人が3D Wapuu を作ったということで、それを元に試行錯誤して作成した Wapuu を紹介していました!

以下、いつもながら筆者が聞き取った内容のメモです。
そのため、必ずしも発表者の意図した通りの内容になっているかの保証はしません。
筆者のコメントは # をいれてます。


『WP-CLIの基礎を学ぶ(前半)』




スピーカー:浅川幸宣(あさかわゆきのぶ)
https://profiles.wordpress.org/yukinobu/

セッションスライド(Googleスライド)

前半は WP-CLI について説明、後半はローカル環境をインストールして、実際にいろいろ試してもらう(ハンズオン)。

WP-CLIは、WordPress のような動的処理を行うシステムの場合、コマンドを使って WordPress にログインしなくてもいろいろなことが出来るのが便利。複数サイトの管理や、ブログ更新等。

昔は インターネット回線が遅く、GUIで遠隔地のサーバーを管理することが困難だったこともあり、CUIであることが多かった(Windowsサーバーは古くから GUIだったが)。


実践!


Macはターミナル、PC(Windows OS)はコマンドプロンプトを起動する!

下記は Macのターミナル
下記は PC (Windows OS) のコマンドプロンプト



01.初歩的なコマンドのサンプル に沿ってコマンドを試してみる。
*Windowsでもコマンドプロンプトでは、get-date がないので date を入れる(新しい日付は何もいれずにEnterで無視する
*Windowsでは、PowerShell というのを使えば、get-dateを使える

以下の PowerShell(コマンドプロンプトよりも高機能な CLI)は、検索で PowerShell と検索すると出てくる。


Macのターミナルでの日付計算
  • echo $(( ( $(date +%s) - $(date -j -f "%Y-%m-%d" "2003-05-27" +%s) ) / 31556952 ))
*date +%s で現在の日時を数値に変換
  数値変換:1970-01-01 00:00:00 UTC からの秒数に変換

*date -j -f "%Y-%m-%d" "2003-05-27"  は、
 2003年 5月27日 火曜日 15時24分03秒 JST などのように表示される。
 -j が日を二桁表示だけれど、0をつけない(8日だと 08日ではなく 8日とする)
 -f は次の "%Y-%m-%d" 形式(年-月-日)で年月日を表示するフォーマットを指定
ですので、date が
2025年 9月13日 土曜日 15時25分58秒 JST
だとするなら、
2025年 9月13日 15時25分58秒を数値変換  -  2003年5月27日 15時25分58秒を数値変換の差(秒数)をとって、それを 31556952 で割る(グレゴリオ暦の1年=365.2425日(正確には31556952秒))と、年数がわかるということ。今回は 22 が出力される。

Windowsの場合の日付計算
  • powershell -Command "$birthday = Get-Date '2003-05-27'; $now = Get-Date; [math]::Floor(($now - $birthday).TotalDays / 365.2425)"
上記も現在日時 - 2023-05-27(Floorで小数点以下は切り上げして整数化) をするために、TotalDays メソッドを呼び出してうまく数値化して計算。それを、365.2425(1年)で割ると年数がわかるということをしている。今回は 22 が出力される。


『WP-CLIの基礎を学ぶ(後半)』


Local を以前いれていて、しかしログインパスワードがわからないという人がいたのでフォロー。

参考:【Local by Flywheel】パスワードを忘れたときの対処法

wp user list
でユーザーを確認して、下記のコマンドでユーザーのパスワードを変更するというもの
wp user update {メールアドレス} --user_pass={新しいパスワード}

# Local でパスワードを忘れたときにどうするかは経験してなかったので、体験できたのはよかったです!

質問


本番のリモートで使うには?


*本番環境で WP-CLI等コマンド操作をするときは、かなり慎重になってください。場合によっては本番環境のデータを消してしまう可能性もあるためです。基本的にユーザーや記事などを「消す」系のコマンドは使わないことを強く推奨します。またシステム更新などをする場合には、その前にバックアップは必ず取っておいてください。
  • SSHを使ってサーバーにリモートログインする
  • WordPress の本体が入っているフォルダに移動する(移動は cdコマンドを使う)
    • cd www/hogehoge (さくらインターネットの場合、hogehoge にインストールされているとこのようになる)
  • WP-CLIで WordPress のコアバージョンをチェック
    • wp core version
サーバーで主に使うのは、下記の2つです。それ以外にもいろいろあります。
cd :フォルダ(ディレクトリ)の移動
 cd フォルダ名
 cd ../ (一つ前のフォルダに戻る)
ls:今いるフォルダ(ディレクトリ)に何が入っているのかリスト表示

複数のサーバーがある場合には?

#以下、筆者説明

個々のサーバーにログインして、WP-CLIが出来るようになるぐらいに操作になれてくれば、次にやりたいのは、サーバーにログインせずとも確認する手段を持つということです。
それは下記を使えば可能です。

端末から直接複数サーバーに対して WP-CLIをする方法
Knowledge for WordPress: 【備忘録】WP-CLI エイリアスを利用したリモートサーバーの WordPress 管理 #wckyoto2017

また同一サーバー上で複数のサイトがある場合に、これを自動バックアップしてメンテナンスするということをしたければ、バックアップを何らかの方法でやったとして、下記のような WordPress ごとにアップデートをするようなコマンドを並べておいて、これを Linux OSや FreeBSD OS などの場合には、cron を使って自動スケジュールをしておけば、自動メンテナンスをすることが可能です。

cd $HOME/www/WordPressAのフォルダ

wp core update
wp core update-db
wp plugin update --all
wp theme update --all
wp language core update

cd $HOME/www/WordPressBのフォルダ

wp core update
wp core update-db
wp plugin update --all
wp theme update --all
wp language core update

バックアップについては、BackWPUP や、UpdraftPlusプレミアム(有料版)であえれば、WP-CLI に対応しているので、下記をアップデートをする前に実行するようにしておけば、安全です。

UpdraftPlus
wp updraftsplus backup --label="プラグイン UpDrafts 上のラベル" 


BackWPUP
wp backwpup  start jobID

参照:

 筆者はバックアッププラグインBackWPUP はバージョン5.0 から開発者が変更してUIがつかいにくくなってので使わなくなってしまいました。
 現在は、下記の GitHUBにあげているスクリプトを実行しています。ちょっと複雑のため、サーバー管理をしたことがある人向けになります(何やっているか、大まかにでも理解せずには使わないでください)。何をしているかわからない場合には、こういったプログラムを通じて WordPress が増えても自動処理を楽にしているんだーという理解ぐらいでいいかなと思います。
やっていることは次の通りです。
  1. どのようにバックアップするか  wp-backup-targets.dat に指定する
  2. wp-update.csh を深夜に自動実行するよう cron でスケジュールしておく
  3. wp-update.csh は、wp-backup-targets.dat の中身を読み取って、バックアップする対象の WordPress に対して、データベースデータのエクスポートを WP-CLIコマンドで実行
    wp db export --default-character-set=utf8mb4
  4. WordPress のフォルダ直下に .sql ファイルとしてバックアップデータが保存される
  5. WordPress フォルダを、丸ごと圧縮して保存
    *tar+gzip, tar+bzip2, tar+xz, zip の4つのいずれかの方法で、世代バックアップ(毎日1度ずつ 7日間保存など)。
    *指定した日数以上の古いバックアップデータがあれば削除
  6. エクスポートしたデータベースのデータ .sql ファイルを削除

さくらインターネットの WP-CLI は古いこともあるので(勝手に更新する権限がない)、自前で指定の位置に wp コマンドをインストールしています。
$HOME/backup/bin/wp に wpが存在することを前提にしてます。ここは自動化忘れてます。これがなければ警告がでてプログラムは実行されずに終了するようにはしています。
*スクリプトを作っている間に力尽きて、ここはもういいや〜ってなってしまったのだと思います。

サーバーで隠しフォルダを作れないのか?


UNIX系OS(Linux OS等)のサーバーについては、ディレクトリ(フォルダ)やファイルの名前の先頭にピリオド(.)をつけることで隠しファイルやフォルダになる。
しかし見えなくなるであり、実際にはユーザーやグループに対して適切な権限を付与してアクセスできなくさせることになる。

# WordPress に関連する大きな隠しファイルは、Webサーバーとして有名な apache を使っている場合、WordPress でパーマネントリンクを設定したり、SiteGuard 等セキュリティ系プラグインをいれると、.htaccess という隠しファイルを WordPress は自動で作成します。セキュリティ対策系では、ログインを制限(/wp-admin や /wp-login.php)をすることが多いです。たださくらインターネットの場合には、国外IPアドレスフィルタのように海外からのアクセスをブロックするフィルタを明示的に無効化していない限り、自動で有効になっているなど、レンタルサーバーによっては別途セキュリティ対策がされている場合もあります。

その他筆者のメモ


かなり古い情報ですが、2018年6月に開催した WordBench大阪(WordPress Meetup の前身)で筆者が発表した、「WordBench大阪 6月 実践!WP-CLIを使って WordPress の管理運用してみよう!」の前半のセッション部分の説明スライドも、少しは参考になるかと思います。

実践!WP-CLIを使って WordPress の管理運用してみよう! -前半- セミナー


懇親会(楽韓堂 グランフロント店)


セッションは17時に終わり、そのまま会場にて18時ぐらいまでいたあと、残ったメンバー8名で懇親会となりました。


グランフロント大阪をうろうろしていると、写真展をしているのが目に止まりました。
その後、懇親会の場所として楽韓堂にふらっと入ったのでした。



 *顔出しOKということで、懇親会の雰囲気が少しは分かる感じになっているかと思います。

以下、手前のテーブルで注文した料理の数々は下記の通り。
2時間ほど歓談して20時すぎに解散となりました!




2025年9月13日 @kimipooh


2025年7月19日土曜日

MAMP 7.2 へのアップグレード(mysql 5.7系→ 8.0系へのアップグレード含む)

macOS の MAMP上で、PHPプログラムで作成したデータベースのテストや、WordPress のいくつかをテストしていることもあり、MAMPもたまにアップグレードしています。

今回は、MAMP 6.8 に php 8.4系と 8.3 系の最新をカスタムインストールしていたものを、MAMP 7.2 へアップグレードする方法を備忘録として残します。

この php バージョンのカスタマイズについては、下記を参考にしてみてください。

動作チェック環境

  • M2 MacBookPro 14inch
  • macOS Sequoia 15.5

STEP 1. 既存のMAMPを退避させる


/Applications/MAMP (Macintosh HD > アプリケーション > MAMP)

について MAMP2 など別の名前に変更します。

*先に MySQL データを phpmyadmin ツールで、エクスポートしておいてもOKです(WordPressなど)

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


https://www.mamp.info/en/mac/

上記よりダウンロードしてインストールしましょう。

そして一旦動作するかどうか、MAMPを開いてみてください。そして「Start」ボタンを押してエラー無く動作するか確認してください。うまく動いたら「Stop」ボタンを押してサービスを終了したあとで、MAMPを終了してください。

STEP 3. データベースとデータをもとに戻す


/Applications/MAMP (Macintosh HD > アプリケーション > MAMP)

db をdb.org など別名にしてください。
また htdocs も htdocs.org など別名にしてください。

古いMAMPのフォルダから、dbとhtdocs を 新しくインストールした MAMPフォルダのへ移動するかコピーしてください。

/Applications/MAMP2 (Macintosh HD > アプリケーション > MAMP2)

そして db野中に mysql57とsqlite しかない状態であれば、
次に、db.org (新しいMAMPのDB)の中から、mysql8、redis、sasl フォルダーを dbへをコピーしてください。

もし dbや htdocs を Dropbox の領域に移動しており(複数端末で同一DBとデータを使いたいなら)、シンボリックリンクでMAMPと連携させているなら(~/Dropbox/MAMP/db と ~/Dropbox/MAMP/htdocs)
  • ln -s ~/Dropbox/MAMP/db /Applications/MAMP/db 
  • ln -s ~/Dropbox/MAMP/htdocs /Applications/MAMP/htdocs 
とした上でDropbox について、同期を「オフラインのみ」にしている場合には、一旦 Dropbox からサインアウトした上で、再度ログインするときに下記をしてオフライン利用(各端末の ~/Dropbox にデータが完全にダウンロードされて同期する手法)にしてください。
  • 「オンラインのみ」としてファイルを保存(オフにする)
  • 詳細設定にある「File Provider でのDroxbox fro macOS 改訂版を「オプトアウト」:

STEP 4. MAMPを起動する


もし http について 80番ポートを使っているなら、Preferences で 8888ポートから80ポートへ変更してください。
さらに、下記の手法でSSL化しているなら、再度下記の手法でSSL化してください。
また、Preferences の Server にある MySQL は 5.7.44 にしておいてください。




もし MySQL 5.7 系のDBを使っている(WordPress等)のであれば、そのDBをバックアップしておいてください。MAMPでバックアップするなら

https://localhost/MAMP(http://localhost/MAMP あるいは http://localhost:8888/MAMP など人による) などにアクセスすることで phpmyadmin ツールが使えます。

STEP5. MySQL を 8.0系にする





Preferences の Server より MySQL を 8.0系にします。
MAMPを起動しなおしてください。
そしてサービスを Start としてください。
もし https://localhost がウェブサイトのトップであるなら
https://localhost/MAMPにアクセスし、上部「Tools」より「phpMyAdmin」を開くてください。


「データベース」より以前作成していた(バックアップした)、データベース名と同じデータベースを作成してください。


できたデータベースにアクセスして、「インポート」より、バックアップしたDBデータをインポートしてください。

これで従来アクセスできていた WordPress などにもアクセスできるようになるはずです!



STEP 6. Apacheの mod_rewrite.so モジュールを有効にする


WordPress など mod_rewrite モジュールを使っているサイトの場合、index.php?p=456 などパラメーターではアクセスできるものの、パーマネントによるアクセス( /index.php/****/ )はすべて404エラーになることがあります。

これは MAMPの Apacheのデフォルト設定では、rewriteモジュールが無効になっているからです。

/Applications/MAMP/conf/apache/httpd.conf
#LoadModule rewrite_module modules/mod_rewrite.so 
を下記のようにコメントを外しておいてください

LoadModule rewrite_module modules/mod_rewrite.so 



2025年7月19日 @kimipooh
2025年9月3日
 

2025年4月30日水曜日

BackWPUP 5.2 のアップデートした後に WordPress サイトがアクセスできなくなった問題への対処と起こった理由

2025年4月30日、手持ちの WordPress サイトについて「重大なエラー」ということでサイトにアクセスできなくなる問題が発生しました。実際にはキャッシュ系プラグインをいれていたおかげて、本日更新したか(キャッシュ更新した)、最近アクセスしていなかった(キャッシュがない)場合にのみでていたので、気づくのに少し時間がかかりました。

WordPress のデバッグを有効にしてみると、下記のようなエラーが表示されました。
Query Monitor というデバッグ用のプラグインもいれていたので、整理された状態でエラーがでてますね。原因は、「cal_days_in_month」関数が定義されていないよというもの

対処方法


暫定的な対応としては、FTPなどをつかってサーバーにある WordPress フォルダから、 wp-content > plugins に移動して、「backwpup」のフォルダを削除する、ということになります。ようするにプラグインを WordPress から消すということです。

今回の問題が修正されたあとに、改めてBackWPUP プラグインを新規インストールすれば、設定などはデータベース側に残っているのでそのまま使えるでしょう。

あるいは他のプラグインの乗り換えるという手もあります。
また、自前でバックアップシステムを構築可能なら、その方が安全かもしれません。


自前でバックアップシステムを構築する(技術者向け)


サーバーを管理運用している人対象、つまりはサーバーに ssh などでログインして、シェルスクリプトや cron などを使って自動バックアップなどを手掛けたりしているなら、参考になるかなと思います。

WP-CLI を利用したバックアップツールを作成して、下記に置きました。
UNIX系OSのサーバー管理をしているならわかるかなと思います。自由に使ってもらっても構いません。



WordPress には、WP-CLI というコマンドベースでユーザー制御したり、データベースからデータをバックアップしたり、プラグインや本体のアップデートなども可能なツールがあります。プラグインが WP-CLI に対応していれば、コマンドからプラグインの対応している機能を実行できたりします。BackWPUP も対応しており、WP-CLI を通じてバックアップを行うこともできます。

筆者も下記のような感じでバックアップしておりました。

Knowledge for WordPress: 複数サイトのメンテナンスを WP-CLI でやろう!(サーバー管理者編)

こうしたものを使えば

1. WP-CLI をサーバーにインストールする
*単体で実行可能。レンタルサーバーによっては wp コマンドとして存在する場合もあるがバージョンが古いこともある

2. WordPress のデータベースバックアップ
wp db export --default-character-set=utf8mb4

コマンド(4バイト UTF-8に対応)でSQL形式でバックアップできます。

3. WordPress本体を tar コマンドで tar.gz 形式でバックアップ

これらができれば、プラグインに頼らずともバックアップ可能になります。
ただ古いバックアップを削除するときには、下記のように7日より古いファイルは削除するなどの find コマンドなどの併用利用は必要になってくるでしょう。ただこのあたりはコマンドの意図するところを正しく理解できないなら、使うべきではありません。うっかり本体データごと削除してしまうおそれがあるためです。

find バックアップフォルダ/ -name "backup_*.tar.gz" -type f -mtime +7 -exec rm -f "{}" \;

以下、今回なぜこんなことが起こったのかをまとめておきます。

cal_days_in_month 関数が未定義のためにエラーがでた


PHPの公式ドキュメントによれば、年月をいれるとその月が何日あるのかを調べることができる関数のようですね。

PHP: cal_days_in_month - Manual

特に PHP8など最新版でも動作するようなので、これだけ見ると???という感じです。

いずれにせよ関数がないなら、Warningだけにとどめて無視してほしいという気持ちもありますが、それはそれで意図した動作をしないおそれもあるのでエラーで気づかせてくれるというのもまた必要ではあるので難しいところです。


cal_days_in_month 関数は標準で実装されていないかもしれない問題

下記をみると、Windows版 PHP にはこの関数は標準実装されているようですが、Linux OS 等が利用されてることも多い、レンタルサーバーなどでは明示的に別途 PHP を --enable-calendar オプションつきで実装(コンパイル)する必要があるようです。

PHP: Installation - Manual
https://www.php.net/manual/en/calendar.installation.php

手持ちのさくらインターネットのサーバーで、下記のようにテストコードを書いて、phpコマンドから実行すると、

 <?php
ini_set('display_errors', "On");
cal_days_in_month(CAL_GREGORIAN,2,2025);

下記のように関数が定義されていないとエラーになります。

Fatal error: Uncaught Error: Call to undefined function cal_days_in_month() in /home/****/sample.php:4
Stack trace:
#0 {main}
  thrown in /home/***/sample.php on line 4

さくらインターネットのWeb UIから、php.ini において下記を参考に

さくらのレンタルサーバのPHPの環境を確認、整えてみよう | さくらのホームページ教室

extension = calendar.so

をいれてみるも駄目。

phpinfo() コマンドで calendar 系のモジュールが入っているがどうか調べると、一応入っているのは入っているが、この関数が使えるものではなさそう。

% php -r "echo phpinfo();" |grep -i calendar
Calendar => Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong

そのため、結局はプラグイン作者側が未定義関数がでそうなものについては、その関数がない場合のエラー処理をしてくれているのがよいということになるなぁという感じです。それ以前に、GitHub Actions 等標準的な環境での PHP Unit Test を開発者側もしてほしいものですね。もし、していても問題が発覚しないならどうしようもないですけれども...

2025年4月30日 @kimipooh


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