Engine Yard Blog RSS Feed

PHP 5.0.0が10周年を迎えました

本記事は英語版ブログで公開された記事の翻訳版です。

10年前の昨日、2004年7月13日、PHP 5.0.0が世界に向けて公開されました。Zend Engine 2を搭載し、実質的に生まれ変わったPHPです。

Zend Engine 2自体はPHP 4.3.0のいくつかのアルファ版から(試験的にですが)すでに公開されていました。一般的なユーザーにとって目立つ大きな違いは、オブジェクトの参照渡しがデフォルトになったことと、新しいオブジェクトモデルのサポートです。細かいことはさておき。

実は、PHP 4以前のPHPは基本的に手続き型言語で、クラスやオブジェクトをサポートしてはいましたが、いずれも後付けの機能だったのです。その歴史は現在でもデフォルト機能セットの多くに――最近追加されたパスワードハッシュAPIなどの新機能にさえ――見てとることができます。

それでも、いざ本格的な(「マシになっただけ」と主張する人もいますが)オブジェクトモデルを手にしてみると、コミュニティはそれをどうしたらいいのか分からなかったのも事実です。

すべての要素をまとめあげた、ある印象的な名前のフレームワークが現れて初めて、人々はPHP 5が何をもたらしたのか理解しはじめたのでした。そのフレームワークとは?もちろんRuby on Railsです。

個人的に、Ruby on Railsの登場はPHPにとって最大の事件だったと思います。

PHPコミュニティではおなじみの反応として、人々はまずそれを真似たCakePHPを作り、次に独自のものを作りはじめました。Zend FrameworkSymfony、後にはLithiumLaravel、他にも色々――出来がいいものも、それほどでもないものもありますが、ほとんどすべてがRailsの提示したMVCパターンに基づいて構築されていました。

しかし10年とは長いもので、PHP 5.0.0が初めてリリースされてからずいぶんと多くの変化がありました。そこで私たちはリサーチの一環としてコミュニティのメンバーの何人かにアンケートをとってみることにしました。

この10年でPHPに起きた最大の変化は何だと思いますか?

名前空間だという人もいれば、PHP 5.0の登場とオブジェクトモデルの変化だという人もいましたが、最も変わったのはコミュニティだという意見が圧倒的でした。

PHPはWebに影響を与えたと思いますか?

簡単に使え、「糊」として機能するため、PHPはWebサーバーの約80%にインストールされ、Webサイトの約50%で使用されています――つまりあなたがアクセスするWebサイトの2つに1つは何らかの形でPHPを使っているということです。PHPがWebに影響を与えたことはまちがいありません。

他の言語ほどクールでも流行りでもを押さえてもいませんが(現実を直視しましょう、そうだったことは一度もありません)、それでも私たちの多くは「仕事を成し遂げる技術」としてPHPを好んで使います。

この10年でPHPコミュニティに起きた最大の変化は?

この10年間には様々なことが起きましたが、その原因となった最大の変化はコミュニティの成熟でした。

この質問に対する回答は、等値演算子問題への認識の向上からベストプラクティスの作成と使用まで多岐にわたりました。多くの人が挙げていたのは、Composerに代表される現在の「ルネッサンス」です。

PHPコミュニティにおけるコミュニケーションレベルに、Facebookよりも何よりも影響を与えたのはTwitterでした。現在PHPコミュニティの会話はもっぱらTwitter上で行われています。

Cal Evans

クラウドは今後PHPにどれくらい影響を及ぼすと思いますか?

意外にも、ほぼ全員が「ごくわずか」という回答でした。PHPは元からシェアードナッシングなので、「言語としては」無限に水平スケーリングが可能であり、クラウドには最適です。

ただし 共有リソースを使うコードを書きはじめると、組み込みのファイルベースのセッションを使うといった単純なことを実装するだけでも、たちまち厄介な事態になってきます。

PHP自体はクラウドの影響を受けないとはいえ、それが糊付けする物のほうには大いに関係があるのです。そこでPHPコミュニティは重点的にこの問題に取り組んでいます。たとえばmemcacheによるセッションのスケーリング、MySQLやPostgreSQL向けのレプリケーション、リレーショナルデータベースからの完全な脱却などです。

PHPにとって最も差し迫った問題は何だと思いますか?

ほぼ例外なく、PHPのコア部分にもっと一貫性を持たせたいという明確な意思が感じられる回答が返ってきました。たとえばNeedle/haystack(haystack/needle?)の矛盾は、PHPがダメな言語である証拠の1つとして、しじゅう槍玉に挙げられます。それが元凶ではないことはPHPコミュニティの誰もが知っていますが、できれば変えていきたいところです。

新しい機能の導入を妨げているレガシーな方針を廃止すべき、メジャーバージョンアップをもっと早めに出してほしい、という意見も多くありました。

PHPは、まだまだ解決すべき矛盾点が残っているとはいえ、それ以外は調和のとれたオブジェクト指向言語らしく見えるようになってきた、と言ってもそろそろいいかなと思います。PHP 10周年おめでとう、ハッピーバースデー!いつも言ってることですけど、このコミュニティはほんとにすばらしい。みんなをハグしてお祝いしたいです :)

Michelle Sanver

次のメジャーバージョンに期待するものは?

パフォーマンスという回答が多かったのは意外でしたが、これは最近HHVM関連のプロジェクトが盛り上がったために、たまたまメンバーの念頭にあったからかもしれません。

それ以外で多かった要望としては、組み込みのセキュリティ、匿名型オブジェクト、非同期型関数、タイプヒンティング、ジェネリクスなどがありました――まだまだ今後の改良に向けたアイデアは尽きないようです。

これからのPHPは、セキュリティ面の「リブート」に重点を置いていくべきだと思うんです。アプリケーションのセキュリティを固める方法を調べだすと、「これをこの通りの方法でやらないと動かない」というのが山ほどあります。データベースクエリのセキュリティ、出力の保護、入力のフィルタリング辺りは一応ベストプラクティスが確立されていますけど、もっとシンプルにできるはずです。

Chris Cornutt

タイムライン

Zend Engine 2が初めてリリースされてから、最新のPHP 5.6がリリースされるまでの出来事を、以下にタイムラインとしてまとめました。

2002

Zend Engine 2 Public Preview

2002年5月~9月、Zend Engine 2を組み込んだPHP 4.3-dev のプレビュー版と3つのアルファ版が初めて公開される。

2003

PHP 5.0 Beta 2

2003年10月30日

PHP 5.0 Beta 1

2003年6月29日

PHP 5.0 Beta 3

2003年12月21日

2004

PHP 5.0 Release Candidate

2004年3月18日

PHP 5.0 Release Candidate 3

2004年6月8日

PHP 5.0 Beta 4

2004年2月12日

PHP 5.0 Release Candidate 2

2004年4月15日

PHP 5.0.0 ファイナルリリース

2004年7月13日

PHP 5.0.0では多くの機能が強化されました。

  • 新しいオブジェクトモデル
  • SPL(イテレータ)
  • リフレクション
  • クラスのオートローディング
  • SimpleXMLを含むXMLサポートを完全に一新
  • MySQLの機能向上に対応したMySQLi拡張
  • SQLiteサポート
  • ストリームの改良

2005

PHP 5.1 リリース

2005年11月24日

PHP 6.0ブランチが作成される

2005年8月9日

php-internalsメーリングリストへの投稿で、 次の開発バージョンに5.5ではなく6.0を採択したことが発表されました。狙いはコア部分にUnicodeサポートを 導入することです。

2006

PHP 5.2 リリース

2006年11月2日

2008

PHP 5.3 alpha 1

2008年8月1日

PHP 6とUnicodeに3年間取り組んだ後、PHPは5.xシリーズで開発を進めることになりました。

2009

PHP 5.3 リリース

2009年6月30日

PHP 5.3は実質上、PHP 6.0からUnicode実装を抜いたもので、これまでにリリースされたPHPの中では最も多くの主要機能が 追加されました。

2010

さらばPHP 6.0 Unicode

2010年3月11日

5.3の次期バージョンをどうするかという議論が活発化し、実質上5.3にUnicodeを実装するだけの内容だったPHP 6.0の開発停止 が決定され、 改めて5.xシリーズの開発を進めていくことになりました。

2011

RFCとリリースプロセスの制定

2011年6月

機能のRFC投票制度リリース プロセスが制定されました。以後1年単位のリリースをめざすことに。

2012

PHP 5.4 リリース

2012年3月1日

PHP 5.4はregister_globalsをはじめとする レガシーオプションの廃止をようやく実現したリリースです。しかしそれだけではありません。

  • ショートアレイ シンタックス
  • トレイト
  • クロージャの機能強化
  • ショートechoタグが常時利用可能に
  • ビルトインウェブサーバー

2013

PHP 5.5 リリース

2013年6月20日

PHP 5.5の開発は順調でしたが、APCに代わるZend OpCacheを追加するため、3か月遅れでリリースされました。 他の大きな変更点は

  • ジェネレータとコルーチン
  • try/catchで「Finally」が使えるように
  • シンプルなパスワードハッシュAPI

2014

PHP 5.6

PHP 5.6はまもなく公開予定(現在Release Candidate 2)で、 5.xシリーズの開発再開以来、最も小規模なリリースになります。

  • 関数に可変長引数が使えるように
  • 引数のアンパッキング(スプラット)
  • 定数のスカラー表現

PHP Next Generation (phpng)

2014年5月5日

Zendは、Zend Engineをリファクタリングする「hpng」プロジェクトを発表しました。これは大幅なパフォーマンスの向上を 示したものの、既存の拡張も合わせて更新していく必要があり、 完成まではまだ時間が必要です。

PHPの
未来
2015年以降

PHP-NEXT

後方互換性が失われるようなRFCの提案が増えてきたため、 次期メジャーバージョンのブランチを作ることも検討されています。

PHP 6.0 (また?)

2014年5月5日

すると次は6.0かどうか、という問題になります。現在、この問題を提起するための RFCが出ています。次は 混乱を避けるため6.0を飛ばして7.0に進むべきでしょうか?

PHP 5.3 vs PHP 6.0

すべて順調にいけば、PHP 6.0は何年も前に、PHP 5.2の後継としてリリースされているはずでした。内部処理をすべてUnicode(UTF-16)で行うことで、漢字やキリル文字を識別子に使う、あらゆるストリングス関数がバイトではなく文字を操作できる、といったことが実現する予定でした。

しかし計画通りにはいかず、最終的に6.0で予定されていた機能のほとんど(Unicodeへの移行以外のすべて)をPHP 5.3としてリリースするという結論になりました。

そしてついにはPHP 6.0のユニコード実装への取り組み自体が中止され、PHP 5.4が後を継ぎました。

PHPの未来

PHPは常にコミュニティの手で進化を続けてきました。誰でもWebの未来を作る取り組みに加わることができるのです。

PHP 5.6のリリースが楽しみですか?PHP-NEXTで取り組んでほしいアイデアがありますか?ぜひコメントでご意見ご感想をお寄せください。

(翻訳:福嶋美絵子)


Tagged:

comments powered by Disqus