WordPress4.7のリリースに合わせ、WordPress.orgの推奨環境が変わったのはご存知だろうか。現在は次のようになっている。
- PHP7以上
- MySQL5.6以上またはMariaDB10.0以上
- HTTPSのサポート
これを見たのだろう、筆者の元にタイトルでしめした相談メッセージが届いたので、個人的な意見を書いてみたい。
結論
まずはじめに結論から述べておくが、PHP7にすべきである。理由はWordPressとは関係なく、その方が早いし安全だからだ。
しかしそれはおそらく質問者も知っているはずで、PHPのバージョンアップに躊躇している理由があるのだろう。まずは幾つかの事実を列挙し、そのメリットおよびデメリットを挙げていく。その上で決めてほしい。
事実1 WordPressコアは7.0でなくても動く
WordPressのコアはPHP7でなければ動かない新機能、たとえば戻り値の型宣言 function(): array{}
や引数のスカラー型宣言 function(int $var)
、NULL合体演算子 ??
、スペースシップ演算子 <=>
などを使っていない。
したがって、WordPress.orgのrequirementsページに書かれている通り、PHP7は推奨であり必須ではない。
事実2 PHP5までは動いたがPHP7で動かなくなる記法がある
下位互換のない変更点はいくつかあるのだが、その中でも下記の2点が与える影響が大きい。
- new文で作成されたオブジェクトの参照渡し
$c =& new MyClass()
が廃止 - PHP4形式のコンストラクタ(クラス名と同名のメソッド)がエラーを吐く
これら2点は「レガシーな記法がついに廃止された」のだが、プラグインの質によっては上記のエラーに引っかかることがある。したがって、場合によっては「サイトが真っ白」ということもありえるだろう。
事実3 WordPress.orgの推奨要件は態度表明である
WordPressは後方互換をかなりしっかりやっているソフトウェアであり、たとえばPythonを2.7から3.5に上げる時のインパクトに比べれば、その影響度ははるかに小さい。いまでも律儀にPHP5.2をサポートしている。
しかし、その後方互換のために無駄な労力が割かれていることも事実だ。たとえば、筆者は自身の公開しているWordPressプラグインがPHP5.2でエラーを起こさないよう、ブートストラップファイルの中に無名関数ではなくcreate_functionのような恥ずべき機能を使っているのだが、正直もう辞めたい。無名関数の中に$thisを書きたい。
WordPressのコミュニティの大方針は、おそらく「古い環境にとどまっているユーザーを切り捨てるのではなく、新しい環境を推薦していこう」というソフトランディング路線である。ホスティング会社のリストもその一環だろうし、それに同調するプラグイン作者もいる。
事実から導き出せること
上記の事実から、次のようなことがわかる。
- WordPress本体はPHP7ではなくても動く
- プラグインやテーマは場合によっては動かないかもしれない
- WordPressコミュニティはPHP7に移行して欲しがっている
Pros & Cons
さて、PHP7に移行した場合のメリットとデメリットを上げていこう。メリットは次の通り。
- 高速である。WordPressで利用した場合、2倍近く高速になる。
- 安全である。PHPセキュリティサポートはすでに5.5までが終了しており、AWSのEC2 Amazon LinuxではPHP5.5をインストールすることさえできない。
これに対するデメリットは何かというと、次の通り。
- PHP7で廃止された機能を使っているプラグインやテーマがあった場合、Parser Errorでサイトが停止する可能性がある。
- OSが古い場合、PHP7のインストールに手間取る可能性がある。epel, remi そして果てしないGoogling。
- レンタルサーバが対応していない場合は、サーバを引っ越さなければならない。
上記の通り、デメリットは基本的にあなたの個別具体的な状況に応じたものであり、WordPressやPHPとはあまり関係がない。
また、PHP7に対応していないプラグインやテーマを使い続けているのは危険でもあるので、そもそもなんでそんなことになってしまったのかをよく考え直してほしい。
上記のメリットとデメリットを比較し、検討していただければ幸いである。
補足・このようなことで悩まないために
WordPressに限らず、Webサイト、いやそもそもソフトウェアというのは継続的にアップデートしていくべきである。そのためにはアップデートに強い環境を作ることが先決だ。以下のことをよく念頭においてほしい。
- 最新環境のキャッチアップが早いホスティング企業を選ぶ。たとえばwpXやファーストサーバーはLet’s Encryptによる無料SSLに対応しており、SSL元年である2017年に対応できている。
- クラウドなどの変更に強いホスティング環境を選ぶ。たとえば、AWS, Azureなど。勘違いしてはいけないのだが、レンタルサーバの方がクラウドよりは月額費用が安い。クラウドを選ぶ理由は安さではなく柔軟性であり、それがお得かどうかはそのサイトの人件費に関わってくる。どうしても月500円でないといけないなら、どうしようもないのだが。
- 開発環境とバックアップを用意しておく。アップデートの基本はやってみてダメだったら原因を特定することだ。アップデートする前に原因をあれこれ推察するのは時間の無駄である。商用環境の一発アップデートで成功しようとするのがそもそもの間違いだ。FlyWheel Localなどの記事も参考あれ。
- 運用計画にアップデートを含める。これまで筆者は深刻な脆弱性の発見に伴っておおわらわになる現場を何度も見てきたが、そうしたリスクを事前に見積もり、運用計画に含めることだ。深刻な事態が発生したらサイトを丸一日停止させればたいていのことは解決する。もしあなたが受託仕事をしているなら、その費用をクライアントに請求しておけばよいし、そもそもすべての責任をあなたが負う必要もない。
- ソースコードを読んで解決しようとしない。問題が存在しないうちからソースコードを読んで安全か確認してほしいという依頼があるのだが、こんな馬鹿げたことはない。あなたは車を運転する前にいちいちエンジンルームをすべて分解して安全かどうか確かめるのだろうか? 車検や自動車保険を利用していないだろうか? Webサイトも同じである。
- アップデートをしても絶対に大丈夫か聞かない。筆者はこれまで何度も聞かれたのだが……正直にいって、わからない。世の中に絶対はないのだ。もしどうしても保証が欲しければ、新宿東口に行き、占い師にお金を払うといい。きっとあなたに満足が行く答えを用意してくれるだろう。
変更しやすく、代替可能な環境にWebサイトを置いておけば、いつも早いし安全、いうことはなしだ。なによりあなた自身が楽になる。
もし不明な点などがあれば、コメント欄でお待ちしている。