PHPの時代はこれから: PHP 8とその先にあるもの
2005年、PHP バージョン5.3は、IBM i における真のオープンソース開発の時代の幕開けを告げました。バージョン5.3は、Zend社とIBMロチェスターの献身的な努力の賜物でした。PHPはちょうど大きな進化を遂げたところであり、バージョン5現象のただ中にあって一世を風靡していました。
多くのIBM i 開発者は、この大人気のスクリプティング テクノロジーをすぐに理解して、IFSファイルにコードを保存したり、直接IBM i で稼働しているページでDb2データを表示させたりするようになりました。Web上のHTMLでではないほぼすべてのbサイトには、多少なりともPHPが使用されており、それにはもっともな理由がありました。うまくいくからです。15年以上の時が流れた今、開発チームの注目を引こうと競い合っている、かなりの数のテクノロジーがありますが、重要な処理の大部分は、今もなおPHPが行っています。では、PHPが今いる場所、そして近い将来どこへ向かおうとしているのかについて見てみましょう。
W3techsによれば、今日、PHPはビジブルWebの78.9%を稼働しているということです。18億とされるネット上のWebサイト数( Statista社のレポートによる)から推定すれば、PHPを稼働しているサイトは10億を超えるということになります。それほどの数からすると、それなりの理由があるのでしょう。しかし、頭の中でこう考えるかもしれません。きっとその多くは古いバージョンのPHPを使用しているに違いない。ちょっと待ってください。 W3techs のレポートには、その数についてのデータもあります。それによれば、PHPサイトの約70%がPHP 7であり、30%は、今なお、信頼できるPHP 5バリアントを稼働しているとのことです。これはまずい事態なのではないでしょうか。もっとも、明快な答えとしては、状況次第ということになります。
IBM i には、企業のテクノロジーへの投資を守るという長きにわたる伝統があります。つまり、非常に古いバージョンのRPGでも、より新しいハードウェアで問題なく稼働できるという伝統です。とはいえ、PHPはRPGと同じではありません。けれども、チャンスはあります。多くの人々が気にするのは、ネットワーク監査で、その環境内で稼働している古いバージョンのPHPが見つかるからです。これは、最新バージョンのPHPへのアップデートを促す良い警鐘となります。アップデートを行うべき理由はいくつかあります。以降の段落では、そうした理由について詳しく見て行きます。「鼻先のニンジンとムチ」の喩えは、それぞれのシナリオにおける、理由の切迫度を表したものです。
セキュリティ - まずはムチから
HelpSystems社のレポートによると、セキュリティはIBM i のショップの最大の懸念事項だということです。近頃では、ランサムウェアによる、ハッキングや業務停止の被害に遭った企業の話を耳にしない日はないように思います。Statista 社による調査で明らかになったのは、「米国内の組織の68%が、その年にランサムウェア攻撃を受け、結果的に身代金を支払った」ということでした。その結果、企業は非常に真剣に受け止めるようになっています。PHPは「境界」のテクノロジーであるため、Webサーバーのすぐ後ろで、サーバーへの攻撃に対する防御の最前線となることが多くなります。どのような侵入経路も、迅速かつ確実に対処が必要です。PHPコミュニティでは、可能な限り頻繁にPHPスタックのアップデートを行うことがこれに対処するための最善の方法の1つです。
パフォーマンス - ニンジンでもあり、ムチでもある
従来のよりシンプルなWebページは、ロードするのに相応の時間がかかっていましたが、T1回線やダイヤルアップのようなあまり魅力のないテクノロジーによっても同様に時間を取られていました。今日のWebページは、HTMLに混ぜ込まれた大量のJavaScriptとの関わりがずっと深くなっており、こうしたパワーを大量消費するページは、PHPが提供できる大量のデータを必要とします。数年前、PHPコミュニティは、FacebookによるPHPの派生言語を使用している競合者からの「挑戦」に、後にPHP 7となったPHPngを提供することで立ち向かいました。パフォーマンスの競争は今日も続いています。最新バージョンのPHP 8では、さらに大幅なパフォーマンス向上が見られるでしょう。
留意しておくことが必要なのは、単一のPHPスクリプトの生のパフォーマンスでは、見比べても著しく改善されたようには見えないかもしれないということです。これは、主に、ムーアの法則の緩やかな減速と、ここ数年、プロセッサーのクロック スピードがあまり向上していないことによるものです。しかし、目に見えて分かるのは、メモリー使用量の大幅な減少のような、負荷時のスループットおよびリソース利用率の改善です。Linux実装では、このことは、サーバーを減らすことができるということを意味します。これは Badoo のPHP 7採用のケース スタディで示されている通りです。IBM i のショップでは、そのプラットフォーム上でいつもビジーである他のすべてのアプリケーションに、メモリーやその他のリソースをより多く振り向けることができるようになるということです。
オープンソースおよびLinux支援業務に注力している独立系企業のPharonix社が先ごろ公開したPHPの パフォーマンス ベンチマーク では、スループットの向上とリソースの節減が着実に前進していることが示されています。30%のショップが今なおPHP 5の派生バージョンを稼働していることからすると、誰もがパフォーマンスの改善による恩恵を受けられるはずですが、それぞれ状況は異なるかもしれません。
PHP 7、8、およびそれ以降の機能: これらは完全に鼻先にぶら下がったニンジン。ただし、キャラメル ソースで煮込んで、シナモンをまぶしてある
非常に素晴らしいパフォーマンスが提供されることに加えて、PHP 7では、数多くの機能が導入されています。いくつか例を挙げれば、スカラー型宣言、無名クラス、戻り値の型宣言などがありますが、私の個人的なお気に入りの1つは、define()を用いた定数配列宣言です。パフォーマンスに関してあれだけ熱心に取り組んだ後で、コア開発チームが、何とかこれらの機能を組み込んだことには、非常に驚かされました。興味深いのは、PHP 5.6標準できちんと書かれているコードを使用していたケースでは、概して、PHP 7+の世界へのマイグレーションがうまくいったということです。一方、PHP 4以前で悪習に染まっていたケースでは、非常に大変なようです。これはまったく驚きではなく、PHPのマイグレーションで目にする技術的負債の例として最もありがちなものの1つです。
PHP 8 は、様々なアップデートによるPHP 7の成果をすべて踏まえて構築されています。とりわけ、その1つに、@記号の挙動の修正があります。@は一部のエラーを黙って抑制しなくなりました。良い滑り出しを受けて、引き続き、期待しておきたいことは、かなり前から多くのメンテナンス プログラマーの悩みの元であった、最も有害な(しかし実に有用な)仕掛けの機能が、徐々に弱められて行くのを目にすることです。他にも、PHP 8の新機能には、メソッドおよび関数を呼び出す際の名前付き引数、コンストラクターのプロパティのプロモーション、match式などがあります。パフォーマンスに関する興味深い点としては、PHP 4スタイルのコンストラクターの除去によって、20%のパフォーマンスの向上が見られたことがあります。
PHP 8の新機能は、JIT(実行時)コンパイラーや、非同期でリクエストを処理する機能など、まだまだたくさんあります。そうです。他の言語の主要な機能の1つが、PHPに加わることになります。1つの機能のために、あるテクノロジーから別のテクノロジーへ飛び移るというのは、少し短絡的かもしれないということについて考えてみる良い機会だと思います。PHPから、非同期リクエストをサポートしている言語へ乗り換えようとしたものの、隣の芝生がそれほど青くなかったことを知った企業を数多く目にしたものです。おそらく派手な宣伝で期待し過ぎたのでしょうし、期待するほど実装が単純でないからです。そしてようやく、この機能がPHPに導入されます。これはPHPが他のテクノロジーと張り合おうとしているからではありません。この言語には、この機能を導入すべき時機だと考えた 非常に アクティブな開発コミュニティがあることによるところが大きいと言えます。
27年経っても、始まったばかり
PHPは、強力な安定性に素晴らしい新機能が加わることで、真価を発揮するようになります。セキュリティのためにPHPのバージョンを古いままにしておくというのは好ましいことではありませんが、古いバージョンの保守という技術的負債を加味すると、最新バージョンにすることが大きな課題となることもあり得ます。PHPの毎年のメジャー リリースの互換性を評価するための時間やリソースはないという企業が多いようですが、そのことを、コード ベースの進化が止まってしまう言い訳にしてはなりません。Perforce社では、コミュニティ レベルを越えてプロダクション レベル サポートを延長することができる唯一のPHP Long Term Supportを提供しています。これにより、企業はある程度の柔軟性を持って、技術的負債と向き合うことができるようになります。技術的負債は、時には開発チームを苦境に陥らせることもあるものの、古いバージョンを保護することである程度柔軟に処理することができ、重要なPHPコード ベースの耐用寿命を延ばすこともできます。
しかし、PHPを「最新バージョンにする」周期について気にしなくてよいとしたらどうでしょうか。いくつかのPHPバージョンには、 Long Term Support エディションがあります。Perforce社では、業界標準の3年間のサポートを、最短でもさらに2年延長します(それ以上の延長も多い)。このオプションのサポートを利用することにより、組織の目的に最も適合するPHPマイグレーションの優先度を検討する際に、組織はより柔軟に判断することができるようになります。最新であることは常に最善策ではあるものの、時には、別の優先事項の方が大事という場合もあるのです。
本記事は、 Perforce Software社による寄稿記事です。
【 訳注 】
「コンストラクターのプロパティのプロモーション」におけるPHP 4と8のコーディング比較例について、原文で参照されているイメージは小さ過ぎて読取困難なため、別途「PHP RFC: Constructor Property Promotion」に提示されている例に置換えています。