オープン・ソースのWebアプリケーション開発/実行環境「PHP」,その開発の中心メンバーとなっているZeev Suraski氏に,今後の拡張計画などを聞いた。次期版のPHP5ではtry,catch文を導入するなど,よりJavaに近付き,大規模システムの開発を容易にすると語る。(聞き手は高橋 信頼=日経オープンシステム)

Zeev Suraski氏
---PHPの開発を始めた経緯は
 PHPはRasmus Lerdorf氏が1995年の始めに公開した。僕がかかわるようになったのは,97年,イスラエル大学のホームページやオンライン・ショッピングのサイトを作っていた際に,当時PHP/FI(Personal Home Page/Form Interpreter)と呼ばれていたツールを使ったことがきっかけだ。使っているうちに,大きなバグを発見してしまった。ソース・コードが公開されているので,原因を調べて修正したのだが,調べているうちに,改善の余地が大きいことに気が付いた。そこで,同じプロジェクトで働いていたAndi GutmansとともにPHP/FIのスクリプト実行エンジンを書き直すことにした。こうして書き直した実行エンジンを,Lerdorf氏らに提供したところ,新しいバージョンPHP3.0の正式な実行エンジンになった。

 我々はスクリプト実行エンジンを改良し,さらに高速なZend Engineを開発した。Zendは,ZeevとAndiを組み合わせた名前だ。Zend Engineを組み込んだPHPが現在のバージョンであるPHP4だ。それまで,スクリプトを読み込みながら解釈して実行する方式だったが,これではループを実行するたびに解釈することになる。100回ループを実行する場合,100回同じ解釈処理を行うわけだ。Zend Engineでは最初にファイル全体のスクリプトを解釈して,それから実行するようにした。解釈処理を大幅に減らし,非常に高速に実行できるようになった。

 PHP4は最初の2カ月間で26万5000回ダウンロードされた。米国の調査会社Netcraftによれば,PHPは600万以上のドメインのサーバーにインストールされている。

 PHPが受け入れられた最も大きな理由は,簡単に使える,ということだと思う。「プログラム経験はないが,PHPを使って3時間で簡単なプログラムを書けるようになった」というメールをもらったことがある。Javaではこうはいかない。また,PHPはWWWのために開発された。だから,Cookieやフォームも簡単に扱える。

 PHPは無償であり,今後も無償で公開されていくが,商用のサポートや支援製品も必要だと考え,1999年に設立したのがイスラエルZendだ。PHPを高速化するソフトウエアや統合開発ツールを開発し,販売している。

---2002年末にリリース予定の次バージョンPHP5では,どのような機能拡張を予定しているのか
 オブジェクト指向機能をさらに改良し,大規模システムの開発を容易にする。PHPはクラスやクラス継承などを既に備えているが,PHP5ではよりJavaに近くなる。try,catch文などJavaの持つ例外処理構文を取り入れる。

 PHP4では,関数は引き数としてオブジェクトを与えられてもその値を変更できない。PHPは値渡しが標準であり,オブジェクトも値渡しとなるため,関数にはオブジェクトそのものではなくそのコピーが渡されるためだ。関数がオブジェクトの値を変更したい場合は,引き数であるオブジェクトの前に「&」記号をつけて参照渡しを指定する必要があった。Javaではそんな必要はない。PHP5ではJavaと同じモデルを採用する。

 また,ネーム・スペースを導入する。ネーム・スペースを宣言すると,関数や変数,クラス名の有効範囲はそのネーム・スペース内に限られる。ネーム・スペースを分ければ,名前の重複を気にせずに変数や関数名を使えるようになり,大規模な開発がやりやすくなる。

 ストリームと呼ぶ新機能も便利な機能だ。WWWサーバーやftpサーバー上のファイルをローカルのファイルと同じ関数で使える。つまりfopen("ローカル・ファイル名")のかわりにfopen("http://ホスト名/ファイル名")のような使い方ができる。圧縮ファイルも,通常の非圧縮ファイルと同じように扱えるようになる。ストリームはPHP5を待たずに,PHP4の将来のリリースで実装する予定だ。

---PHPはHTML埋め込み型のため,Javaのようにプレゼンテーションとロジックを分離することが難しく,モジュール化が困難,という意見がある
 PHPを使っても,プレゼンテーションとロジックを分離することはできる。PHPはJavaオブジェクトを呼び出す機能がある。PHPをプレゼンテーション層として,Javaオブジェクトをロジック層として使用する方法が考えられる。

 もう一つは,テンプレート・ライブラリSmartyを使う方法だ。Smartyは,HTMLテンプレートから動的にHTMLを生成するツールだ。HTMLに全くPHPのロジックを書かなくとも,PHPの実行結果をHTMLに反映して生成することができる。

 とはいえプレゼンテーションとロジックを分離するとことが,必ずしもすべての場合に有利なわけではない。小規模なシステムの場合,分離すると複雑になるため,全体を把握しにくくなったり開発効率が落ちるというデメリットもあるからだ。

---2002年2月末,PHPに深刻なセキュリティ・ホールが発見された
 PHPには約5年間,あまり深刻なセキュリティ・ホールは発見されなかったが,2月末,残念ながらファイルのアップロード機能に問題が見つかった。

 セキュリティは極めて重大な問題と認識している。我々は2つのことを行った。まず,セキュリティ・ホールが報告されてから30時間でパッチを作成,公開した。セキュリティ・ホールが絶対に発見されないという保証は,どんなソフトウエアにもない。今後も,深刻なセキュリティ問題が発見されれば,全力を挙げて迅速に対応する。

 次に,PHPのソース・コードを調べ上げる,セキュリティ監査を開始した。それ自体セキュリティ・ホールでなくとも,ぜい弱性につながる可能性のある部分を調べ,修正する作業を進めている。

---日本の開発者をどう見ているか
 2001年6月に公開したPHPバージョン4.0.6から,日本語版と英語版が統合された。これは,廣川類氏が提供してくれたパッチによるものだ。

 また,PHPの最もアクティブな開発者の一人に大垣靖男氏がいる。彼はセッション管理や出力バッファリング機能の充実に貢献してくれている。日本PHPユーザー会をはじめとする日本の開発者の貢献は非常に大きい。