WordpressやFacebookなど、Webのさまざまなサービスで使われているPHP言語。約10年ぶりのメジャーバージョンアップとなる「PHP 7」がもうすぐ登場予定です。

PHP 7では互換性を維持しつつ、従来のPHP 5と比べて2倍以上の性能向上やメモリ使用量を低減するなど、大きな改善が実現されます。

（本記事は「「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015（前編）」の続きです。

Drupalでは実行速度は2倍、レイテンシは半分

ここでいくつかのベンチマークを紹介しましょう。ただし私の数字を信じることなく、自分でも確かめてください。

試した環境はこれ。

今年リリースされたDrupalの新しいバージョン。Drupal 8について。処理されたリクエストの数。PHP 5.4、5.5、5.6と比べるとPHP 7はほぼ倍になり、レイテンシはほぼ半分に下がっています。

HHVMよりも高速になっています。

Wordpress 4.1.1。PHP 7はHHVMほど早くなっていないが、PHP 5.3とくらべると約3倍になっています。これはPHPのチームもHHVMのチームもWordpressをユースケースに使っていて、どちらのチームもWordpressをめぐって競争をしているのでHHVMに勝てなかったのです。

とはいこれは少々問題ではあるので、どうやってさらに改善できるのか考えたところ、GCC Feedback-Directed Optimization（FDO）というGCCの最適化を使うと実行中のプロファイル情報を使って最適化できます。これで実行した結果はほとんどHHVM 3.7と変わらなくなりました。

もしもWordpressをヘビーに使っているユーザーなら、この最適化オプションを使ってみる価値はあるでしょう。

phpBB、MediaWiki、Geeklogなど

phpBBも早くなっています。

MediaWiki。これはHHVMほど早くありませんでした。

こうして見ると、HHVMが最適化対象としているWordpressやMediaWikiについてはHHVMの方が速いということが分かります。しかし最適化対象ではないものではPHP 7の方が速くなっています。

eコマースのプラットフォームであるOpencart。これはPHP 5と比べて2倍の性能と言うにはほど遠い値ですが、それはこのアプリケーションの実行時間のほとんどをデータベースアクセスに使っているためです。

WardrobeCMS。これをサンプルとして選んだのは、モダンなPHPのスタイルとしてよく見られるSymfonyやLaravelなどを使っているためです。それらを使ったPHPアプリケーションでは、このレベルの改善が見られると期待していいでしょう。

Geeklogでも、ほかのベンチマークで見られたのと同じような改善が見られます。

Traq。これもPHP 7では高速化されています。たくさんのPHPアプリケーションを試しましたが。PHP 7で実行するときにコードの修正が必要だったのはこれ1つでした。Avalonというデータベースライブラリを使っていて、その一部をカーリープレイスで修正しました。

つまり、いままでのすべてのPHPアプリケーションはまったく変更なしにPHP 7で動いたということです。そして既存のコードに問題があったとしても簡単に問題点を追跡してフィクスできます。

Cachetも2倍以上速くなっています。

Moodleは米国と欧州で人気のある教育向けのパッケージです。MoodleはHHVMでは実行できませんでした。

ぜひ試してバグレポートを

もうすぐPHP 7をリリースに当たり、多くの人に自分のコードをテストしていただき、なにか問題があれば連絡をください。リリースした後にたくさんのバグレポートが送られると、一気にチームが不機嫌なってしまいます（笑）。すぐにでもバグレポートをいただければ、にこにこと親切に対応できます。

テストはとても簡単にできるようになっています。Dockerイメージも、Vagrant Boxもあります。

バグがもし見つからなければ、バグを直す手伝いをしてください。ランダムバグというボタンがありますので、それを押すと任意のバグが表示されます。直せるぞ、というのが出てきたらぜひおねがいします。

会場から質問

──── PHP 7へマイグレーションするうえで気をつけるポイントがあれば教えてください。

Lerdorf氏 ちょっと答えにくい質問ですが、まずとにかくテストをしてください。そして正直に言うと、私もPHP 7を本番環境にすぐ使いたいとは思いません。ただし堅牢なコードになると思うので、PHP 7.1までは待たなくてもいいと考えています。

──── 日本語でPHPアプリケーションを開発するときは、マルチバイト用のmbが付く命令を使うことになりますが、いつかmbの付く命令と付かない命令は統合されるのでしょうか？

Lerdorf氏 いまのところ統合する予定はありません。新しい解決方法が見つかればそうなるかもしれませんが、PHP 7ではそうなっていません。

──── PHPにはたくさんのフレームワークがあります。PHP言語を作っている側として、現状に対して思っていることがあれば教えてください。

Lerdorf氏 それって結局、どのフレームワークがいいっていう質問じゃないの？（笑）

私はその質問に答える人としては適切ではありませんね。PHPはPHPで書かれているのではなくてCで書かれているので、私はふだん、C言語でプログラミングをしてCコンパイラとかgdbデバッガとかを使っているのです。私のPHPフレームワークに関する知識は、ベンチマークをして遅くなっている原因を調べるのか、といったことでしかありません。

それでもなにかアドバイスをするとすれば、モジュラー構造にして必要な機能を採用する、という方がいいと思います。

──── PHP 7を使いたいのですがPHP 5に依存した拡張ライブラリを使っています。PHP 5の拡張ライブラリをPHP 7用に変換するツールの予定はありますか？

Lerdorf氏 C言語で書かれた拡張ですよね？ ああ、それは大変ですね。PHP 7では言語の互換性を維持しつつ、より高速に実行できるようにするため内部では多くの変更が行われています。ですのでC言語のAPIレベルでは非常に異なったものになっています。いままでの拡張ライブラリを7に合わせるのは大変だと思います。

ただ、こうした例はたくさんあるので、PHP 5用の拡張ライブラリでPHP 7用に移植されたものもたくさんあります。これらのパターンを見て移植するのがいいのではないでしょうか。

資料「SPEEDING UP THE WEB WITH PHP 7」

前編を見る：「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015（前編）

参考：PHP 5からPHP 7への移行で、Tumblrはレイテンシが半分、CPU負荷も半減。テストツールでPHP 7への移行に問題ないかをチェック

参考：「PHP 7」正式版が登場。PHPにとって10年ぶりのメジャーバージョンアップ。実行速度は旧バージョンの2倍以上