さくらのレンタルサーバーでWP-CLIを実行するPHPのバージョンを変更する

こんにちは。今日はさくらのレンタルサーバーに関するちょっとニッチなTIPSです。

弊社のWordPress運用保守サービスでは「WordPressの更新やサーバーの面倒を見る」というプランが存在します。ここでは必ずしもAWSなどのクラウドホスティングだけではなく、月額費用を安価に抑えられるレンタルサーバーでのプランも提供しています。弊社ではそうした場合、さくらのレンタルサーバーを利用しています。

さて、さくらのレンタルサーバーではWP-CLIというWordPressのコマンドラインツールが入っているのをご存知でしょうか。WordPressのユーザーとしてはほとんど使うことはないでしょうが、開発者としてはあると便利です。

WP-CLI on さくらのレンタルサーバー

さて、ではこのWP-CLIがどこにインストールされているかというと、次のようなコマンドを打つとわかります。

cat /usr/local/bin/wp

#!/bin/sh

/usr/local/php/default/bin/php /usr/local/bin/wp-cli.phar "$@"

実際のpharファイルは /usr/local/bin/wp-cli.phar に存在していて、エイリアスコマンドとして wp を登録している、という運用のようです。pharを実行するときのPHPバイナリは /usr/local/php/default/bin/php にあって、このバージョンを確認すると、2025年6月現在でPHP 7.4.33 であることがわかります。

さて、さくらのレンタルサーバーではサーバーのPHPバージョンをユーザーが変更できるので、PHPを8.2にした状態でWP-CLIを走らせてみると……

wp plugin list
Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.0.0". You are running 7.4.33. in /home/xxxx/www/wordpress/wp-content/plugins/official-facebook-pixel/vendor/composer/platform_check.php on line 24
Error: このサイトで重大なエラーが発生しました。WordPress のトラブルシューティングについてはこちらをご覧ください。 このサイトで重大なエラーが発生しました。

なぜこんなことが起きるのか、説明します。

  • WordPressはPHPが8.2以上なので、PHP8.0以上にしか対応していないプラグイン(Requires PHP: 8.0)もインストールできる。
  • そのプラグインがcomposerに依存しており、かつcomposerでもPHP 8.0以上を要求("php": ">=8.0")している場合、PHP8.0未満で実行すると致命的なエラーが発生する。
  • WP-CLIはPHP 7.4で実行されるので、この条件に合致しない。

では、これをどうやって防げば良いかというと、エイリアスの登録を行えば良いのです。手順は次の通り。

まずパスを通します。ホームディレクトリの ~/bin を優先するよう、次のように .bash_profile などに書き込みます。ディレクトリが存在しない場合は作ってください。

PATH=$HOME/bin:$PATH
export PATH

source .bash_profile などを行い、設定を有効化しましょう。なお、さくらのデフォルトのログインシェルはcshなので、「さくらのレンタルサーバーでシェルをbashに変更する」などを参考に変更しておいてください。もちろん変更しなくてもいいのですが、その場合はCLIの作業を読み替えてもらえれば幸いです。

続いて、 ~/bin/wp にシンボリックリンクを貼り、/usr/local/bin/wp-cli.phar を指すようにします。

cd ~/bin
ln -s /usr/local/bin/wp-cli.phar ./wp

さくらのレンタルサーバーでは、コントロールパネルからPHPのバージョンを変更した場合、CLIのPHPバージョンもそれと同じになります。pharファイルを直接実行すれば、デフォルトのPHPが使われるようになるので、WP-CLIの実行PHPとサーバーのPHPが一致してハッピー・レンサバ・ライフが送れますね!

おまけ: APCuも工夫が必要

さて、これまたさらにニッチな情報です。WordPressのオブジェクトキャッシュ機能は高速化に欠かせない便利な機能ですが、以下のような理由からレンタルサーバーで利用できる選択肢が非常に少ないです。

  • メンテナンスされているプラグインはRedis, Memcachedなどに対応したものが多く、そもそもレンタルサーバーで使えない。
  • ファイルシステムに保存するプラグインも存在するが、危なすぎて使えない。実際、そうしたプラグインは過去にかっ飛んだ脆弱性を出している。

そこで、レンタルサーバーでも唯一使えそうなのがAPCu拡張で、さくらのレンタルサーバーではphp.iniを編集することでAPCuが利用可能です。APCuでのオブジェクトキャッシュに対応したプラグインがatec Cache APCuになります。

atec Cache APCu

さて、私はWP-CLIからオブジェクトキャッシュを使いたいと思うことがよくあるのですが、なんとCLIだとAPUuが有効になっておらず、Fatal Errorが発生します! 理由は次の通りです。

  • さくらのレンタルサーバーでは ~/www/php.ini で拡張機能をオンにできる
  • しかし、CLIで実行するときは全ユーザー共通のiniファイルが読み込まれる
  • したがって、 apc.enable_cli=1 の設定が無視される

なんということでしょう。では、この問題に対応するため、PHPRC環境変数を利用して、CLIでも自分で作ったiniファイルを読み込むようにします。~/.bash_profile の末尾に次のような行を書き込みます。

export PHPRC=$HOME/www

これでWP-CLIを実行したときにも ~/www/php.ini が読み込まれることでAPCuが有効になり、キャッシュを削除できるようになりました! やったー!

 

以上、さくらのレンタルサーバーでWP-CLIを利用するときのお役立ち情報でした。レンタルサーバーでのパフォーマンスを限界まであげることに興味のある人はぜひ一度面接に来てください。