PHPカンファレンス2008レポート(前編)
PHPに押し寄せるリスクと国際化の波
岡田大助
@IT編集部
2008/10/07
2008年7月21日、日本PHPユーザ会主催のイベント「PHPカンファレンス2008」が東京・大田区産業プラザ(PiO)で開催された。今回のPHPカンファレンスでは、プログラムをテクニカルセッションとビギナーズセッションの2つに分け、エンタープライズにおける大規模運用の裏側から、とにかく動的なWebサイトを作ってみたいという入門編までを幅広く取り扱った。
どのセッションも非常に充実しており、今回のレポートは3回に分けてお届けしようと思う。前編となる本稿では、廣川 類氏(日本PHPユーザ会)による基調講演「PHPの今とこれから 2008」の様子をお届けする。
PHP4のサポートが終了、継続運用はリスキー
基調講演を行ったのは日本PHPユーザ会の廣川 類氏。講演は、PHP4からPHP5への移行状況の報告から始まった。PHP4が登場したのは2000年5月、PHP5は2004年7月。すでにPHP5のリリースから4年が経ち、そろそろPHP6が登場してもおかしくないはずだが、こちらはunicode対応の部分でリリースが遅れている。
廣川 類氏 (写真提供:月宮 紀柳氏) |
このような状況の中で、PHP4からPHP5への移行はあまり進んでいないのが現状だ。廣川氏は、「Web上のシグネチャを分析した結果、PHP4がまだ61%も利用されている。昨年度の調査では75%だったので移行が行われているとはいえ、これは危機的な状況だ」と語る。
なぜならば、PHP4の開発やバグフィックスなどのサポートは2007年末に終了しており、重大なセキュリティフィックスも2008年8月8日に終了するからだ。廣川氏も「PHP4.3などはすでにセキュリティフィックスも行われていない状態にも関わらず、依然として運用されている。これはかなりリスキーな運用をしていると思う」と述べる。
PHP5への移行については、2007年より「GO PHP5」という支援活動が行われている。移行時に注意すべきポイントは、クラス(オブジェクト)に関する部分だという。廣川氏も「ここでつまずかなければ移行はうまく行くだろう」と説明したが、テストをすることが重要だとも付け加えている。テストはZend Engine 1互換モードで行われることが多いが、これはPHP5.3で廃止される予定だ。
なお、PHP5の開発も進み、「当初、PHP4の方が速いといわれていたが、5.1、5.2でZend Engineが大幅に高速化され、5.2ではメモリ使用の効率化も図られたので、いまでは倍以上速くなっている」という。このような状況を考えると、PHP5への移行を真剣に考えた方がいいかもしれない。
PHP5.3はPHP6登場までの“つなぎ”なのか
さて、2008年10月にも登場するといわれているPHP5.3とはどういったものだろうか。PHP6はunicode対応の部分で開発が遅れてしまっており、PHP6用に開発したさまざまな新機能のうちunicode対応部分以外の機能の多くがPHP5.3に投入されたため、「PHP5.3はPHP6までのつなぎ」といわれている。
ただし、廣川氏は「つなぎとはいうが、PHP6のリリースが見えてこない状況になってしまった以上、当面の本命だ」とコメントする。単純化して考えるとPHP5.3とは、PHP6からunicodeを抜いて、代わりに拡張ライブラリサービスPECL(PHP Extension Community Library)で提供される国際化処理のエクステンション「intl」を入れたものとなる。
このほか、JavaのアーカイブであるJarのPHP版となる「Phar」もPHP5.3からネイティブで実装される。さまざまなファイルをまとめることが簡単になるため、PHPアプリケーションの配布が容易になるといわれている。しかし、廣川氏によれば「PharがPHP本体に組み込まれたことによって、一部のマルチバイトコードと干渉するなど、挙動が不安定になっている」とのことだ。
また、スキャナ(字句解析器)もflexからre2cに変更となった。ところが、廣川氏は「これが問題で、藤本氏(GREEのCTOである藤本真樹氏)が作成したzend-multibyteが動かない状態になっている」と指摘する。
PHPが大きく変わるPHP5.3の新機能
PHP5.3の新機能として、循環コレクタ(Cycle collector)が注目される。従来、リファレンスカウンティング(参照カウント)と呼ばれる、自分の変数がカウントされたものだけを集めて、カウントが0になったら破棄するようなシンプルなガベッジコレクタが実装されていた。ところが、自分自身を参照するようなものはカウントすることができないという問題があった。
この問題に対して、David Wangという人物がGoogleのイベントで開発したサイクル検知の仕組みが好評だったため、PHP6とPHP5.3で採用(デフォルトで有効)されることとなった。廣川氏によれば実行時間は若干増加するものの、メモリ消費量が1/2から1/22まで低下するという。
また、MySQL ND(Native Driver)が標準的にバンドルされることとなった。これまでは、MySQLのライブラリである「libmysql」が入っていたが、libmysqlのライセンスはGPLであり例外規定での取り扱いだった。MySQL NDを使うことでlibmysqlを排除することができるだけでなく、データベースインターフェイスをPHPから管理できるようになるためメモリ管理などが柔軟に行えるようになった。また、仕組みが単純化するため、メモリ使用量も40%減になるという。
PHP6からバックポートされた機能の代表的なものは名前空間の採用だ。namespaceで名前空間を定義できるため、変数や関数名の衝突を回避するために長い名前を付ける必要がなくなった。
ラムダ関数やクロージャもPHP5.3からサポートされることとなった。これはコールバック関数を局所的、一時的に記述したい場合に有効な関数で、廣川氏によれば「名前なんか要らないと思うときに使うと、不必要に名前空間を汚染しないので便利だ」とのことだ。
「国際化対応がPHP6まで待てない人のために」と廣川氏が切り出したのは、国際化処理を行うエクステンションintlだ。同氏は国際化について「日本の開発者にとって国際化処理はマルチバイト対応のことになってくるかもしれないが、シングルバイト圏の開発者にとっては通貨の比較や表示、単位の処理、正規化、フォーマットなどがメインになってくる」と解説する。むしろ、文字コードや文字列処理などを行うmbstringの機能に対応していないのは気になるところだ。
このほか、スタティックイベントをコンパイル時ではなく実行時に処理するLate Static Bindingや3項演算子の省略形である?:演算子、HEREDOCの変数を展開しない形となるNOWDOC、そしてgoto文がサポートされることが紹介された。
PHPの品質向上のために、もっとテストを
言語としてPHPを見た場合、廣川氏は「PHP自体のコード品質は比較的高いと思う。場合によっては、ほかのオープンソースソフトウェアや商用ソフトウェアよりも良いこともある」という。これは、米国土安全保障省による信頼性評価「Scan Report on Open Source Software 2008」などでも指摘されている。
問題は、ライブラリなど外部にあるコードを呼んだときの品質の低下だ。それは「テストされていないコードには欠陥がある(廣川氏)」ことにほかならない。現在、PHPのコードに対するテストのカバレッジ率は約55%である。およそ半数のコードが未テストの状態のままとなっており、これを100%に近づける努力が必要だ。
そのために廣川氏は、「ユーザーの参加によってPHPを改善することができる。できればまだテストされてない領域用のテストコードを書いて欲しい」とユーザーの積極的なテストへの協力を呼びかけた。
最後に廣川氏は、PHP6への移行について「PHP5が登場して4年経過したが、PHP4からの移行は進んでいない。PHP5.3で多くの新機能がPHP6から前倒しで投入されることになると、PHP6への移行へのモチベーションは上がらないのではないか」と懸念を表明した。
次回は、楽天、ぐるなび、サイボウズにおけるPHP導入事例をレポートする。
Coding Edgeフォーラム トップページ |
PHP関連記事 |
例外処理の実装を把握する PHP5で広がる! 開発環境(1) PHP4のサポートが終了し、いよいよPHP5への移行を視野に入れる時期が来た。PHP5の機能を生かした開発のポイントを紹介 |
|
クライアントPCに言語環境を入れる理由 Mac OS X+PHPでオールインワン環境(準備編) Webアプリ開発者に人気のMac OS X。効率的な開発のために複数バージョンのPHPを実行する環境を構築してみよう |
|
PHPに押し寄せるリスクと国際化の波 PHPカンファレンス2008レポート(前編) PHP4のサポートが完全に終了する。多くの新機能が投入されるPHP5.3へ移行か、国際化対応で開発が遅れるPHP6を待つか |
|
PHPによる大規模商用サービスの裏側 PHPカンファレンス2008レポート(中編) 企業のWebアプリケーション開発現場で利用されるPHP。開発現場の裏側にはさまざまなドラマが隠されている |
|
PHPユーザーは本当にほかの言語を知らないのか? PHPカンファレンス2008レポート(後編) PHPは本当にダメな言語なのだろうか。Perl、Ruby、Python、Java、JavaScriptの使い手が白熱した議論を行った |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|