PHPの最新状況:PHP 7.4.0/7.4.1がリリース(第10回)

PHP

廣川類

2020年末にPHP 7.4が予定通りリリースされ、PHPカンファレンス2019での新機能やPHP 7.4の主要変更点が紹介されました。バグ修正版のPHP 7.4.1もリリースされ、セキュリティ関連の修正も行われています。そして次期メジャーバージョンとしてPHP 8の開発が進行中で、PHP 7系の最後のバージョンになる可能性があります。また、HTMLやCSSなどの言語で標準的な仕組みと見なされている「PHPエクステンション」の役割にも大きな変化が期待され、そうした変化によりPHPがより便利で使いやすいものになると予測されています。さらに重要な変更として、PHP 7.4ではPEARパッケージマネージャがデフォルトで無効化され、各パッケージが継続的にメンテナンスされるかどうかに注意が必要とされています。またSun Suraski氏による新言語P++の提案についても触れられています。

 2020年が始まりました。本年もよろしくお願いいたします。昨年末は、予定通り11月末にPHP 7.4がリリースされ、12月初めに開かれたPHPカンファレンス2019で「PHPの今とこれから2019」と題してPHP 7.4の新機能などを紹介させていただきました。PHP 7.4本体の主要な変更点はすでに数回にわたりこのコラムで紹介しています。今回のコラムでは、PHP 7.4以降、PHPの周辺にどのような変化が予想されるかについて考えてみたいと思います。

PHP 7.4のリリース状況

 PHPバージョン7の最新版としてPHP 7.4.0が予定通り2019年11月28日にリリースされました。その後、バグ修正版にあたるPHP 7.4.1が2019年12月18日にリリースされています。PHP 7.4.1では、セキュリティ関連を含む複数の修正が行われていますので、早めにアップデートすることを推奨します。なお、PHPの各バージョンのサポート期間は、リリース後2年とされており、これにセキュリティ関連の修正を1年行った3年間が過ぎると、EOL (End-of-Life)としてセキュリティ関連の修正を含むすべてのサポートが打ち切られることになっています。図1に主要なバージョンのサポート期間を示します。PHP 7においても、PHP 7.0のサポートはすでに2018年12月に終了しており、PHP 7.1についても2019年12月1日に終了しました。サポート終了後も各ディストリビュータでサポートが継続される可能性はありますが、早期のバージョン更新が必要となります。

図1 PHPの各バージョンのサポート期間

 サポートされている各バージョンについては、通常1月に1回のペースでバグ修正版がリリースされます。PHP 7.4の場合、2022年11月までセキュリティ修正版がリリースされる予定です。

 次のメジャーなバージョンとしてPHP 8の開発がすでに本格化していることから、このまま順調にいけば、PHP 7.4がPHP 7系の最後のバージョンになる予定です。PHP 8のリリース予定日はまだ決まっていません。ここ数年、PHP 7系のマイナーバージョンが年1回リリースされていたことを考えると、2020年の年末にリリースされることを期待したいところですが、新機能として比較的規模が大きいJIT (Just in time Compiler)が導入されることから、リリースが2021年以降となる可能性があります。

PHPの開発とメンテナンス

 PHPが1995年に誕生してからおよそ25年の間に大きく進化しています。図2にPHP各バージョンのステップ数をCソースコードの行数でカウントしたものを示します。PHPは、従来から主要なデータベースやライブラリへのインターフェイスを備えるなど、豊富な機能を提供してきました。PHP 5では、キャッシュなどの有用な機能を取り込むことで更に機能強化を図っています。この結果、PHP 5とPHP 7では110万ステップを超え、Python 3(42万)などの他のスクリプト言語と比べても大規模なソフトウエアとなっています。PHP 4からPHP 5の初期にかけては、本体に脆弱性が指摘されることも度々ありましたが、著名な静的解析ツールであるCoverity Scanのライセンスがオープンソースプロジェクトに無償提供されるようになったこともあり、その多くが修正されています。

PHP 7では、PHP 5に比べてソフトウエアの規模が大幅に大きくなるような変更は行われていませんが、この規模のソフトウエアを継続的に維持することは容易ではありません。

図2 PHP各バージョンのステップ数

 このような状況の中、PHP 8では、メンテナンスが十分にされていないエクステンションをPHP本体のソースコードにバンドルしないようにするという提案が行われています。

https://wiki.php.net/rfc/unbunle-unmaintained-extensions-php8

 このような議論は、過去にも行われており、PHP 7.4でも以下に示すような変更が行われています。

  1. OPCacheのプリローディング機能追加
  2. FFI機能追加
  3. PEARがデフォルトで無効になった

1番目と2番目はすでに本コラムで紹介済みの機能追加です。OPCacheへのプリロード機能追加は、Webサーバ起動時の応答性を改善するものですが、FFI機能がこのプリロード機能を利用していることに意味があります。FFI機能は、外部ライブラリの機能をPHPスクリプトからアクセス可能にするものです。このような機能は従来エクステンションで提供されてきました。例えば、MySQLやPostgreSQLなどのデータベースへの接続機能は、エクステンションで実現されていますが、データベースとの通信処理は各データベース専用のインターフェイスライブラリの機能を呼び出すことで実現されています。FFIエクステンションおよびOPCacheのプリロード機能を組み合わせることで、外部APIがPHPのネーティブ関数と同様に利用できるようになります。これにより、従来はPHPエクステンションとして提供されていた機能が、FFIエクステンションを用いるPHPスクリプトとして提供されていくようになることが予想されます。

 3番目のPEARパッケージマネージャがデフォルトで無効化されたことも同様に時代の流れを表しています。PEARはPHPの有用なパッケージを配布するPHPの標準的な仕組みとして活用されてきましたが、PHP 5の時代により高い機能を有するComposerが普及したことで、ユーザが大幅に減少し、メンテナンスもあまり行われなくなっている状態に陥っていました。十分にメンテナンスが継続されていないプログラムが標準ツールとして提供されつづけることは、セキュリティ上も好ましくありません。2019年1月にPEARの配布元であるpear.php.netが攻撃を受け、同サイトで提供されているPEARのインストーラgo-pear.pharに不正なコード(バックドア)が埋め込まれていたことが明らかになりました。2018年7月から2019年1月までの間にpear.php.netからgo-pear.pharをダウンロードしたユーザが影響を受ける可能性があり、正規のアーカイブを入手して更新することを推奨されています。多くのユーザはComposerなどに移行していたためか、このニュースはあまり話題になりませんでしたが、問題の発見や対応に長い期間を有したということは、メンテナンスが十分に行われていないことを示しているといえます。

PHPエクステンションの標準レポジトリであるPECLについては、pecl.php.netで提供されていますが、各パッケージが継続的にメンテナンスされているかについては同様に注意が必要です。

PHPの未来

PHPの開発は、RFCという仕組みで機能追加・変更の提案を行い、開発者の投票で採用・不採用が決められるという民主的な仕組みで運営されています。もはや、PHPの作者であるRasmus Lerdorf氏ですら、開発者としての1票しか投じることができないのです。

PHPの大きな特徴は、実行時に動的な型付けを行う言語であることです。ただし、自由度が高すぎるため、意図しない不具合を発生したり、性能の最適化が難しいことが指摘されてきました。2014年には、PHPをベースにしたスクリプト言語HackがFacebookにより開発され、公開されました。Hackの実行環境であるHHVMは、PHPにも対応しており、JITに対応することで当時の最新版であるPHP 5よりも高速に動作しました。

このHackとHHVMは、PHPにも影響を与えています。HHVM+Hackの後にリリースされたPHP 7では、スクリプトエンジンの大幅な改良により、HHVMに匹敵する速度を実現しています。また、タイプヒンティングというHackの型指定と同様の仕組みが数値や文字列といったスカラー型にも導入され、関数(クラスのメソッド)の引数や戻り値で型を指定できるようになっています。これは、動的な型付けを行う言語において型に関するアノテーションを行う仕組みでPython においてもバージョン3.5でも、同様な仕組みが導入されています。

一方、PHPに静的な型付けを行う機能を本格的に導入したいという要望は少なからずあり、かなり以前から議論が行われています。しかし、PHPが動的な型付けを行う言語であることを当然と思う開発者が多数派であり、こうしたアイデアはことごとく否定されてきました。2019年8月にPHPのスクリプトエンジンであるZendエンジンの開発者であるZeev SuraskiがP++というPHPから派生した新しい言語を作り、同じコードベースで開発・配布を行うというアイデアを提案しました。C言語に対するC++言語のような位置づけをイメージした提案でしたが、開発者の多くはこの提案を受け入れませんでした。この提案の後、PHP 7.4のリリースマネージャであるDerick RethansがP++の実現性に関する議論を行うかという投票を提案、提案が行われましたが、この提案は0対56という圧倒的差で否決されました。(少し面白いのはZeev自身が反対票を投じていることです。)

PHPには、これからも少しずつ機能が追加され、便利になっていくはずですが、基本的な特徴は受け継がれていくものと思われます。

<< PHPの最新状況:PHP 7.4の開発状況(第9回 著:廣川類氏)PHPの最新状況:PHP 8.0開発が進む(第11回) >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解