1. プログラム プログラム名: Language Update PHP): 発表者名: 廣川 類 (日本PHPユーザー会) 記録者名: 織田 澄人 2. 時間 開始時刻: 10:30 終了時刻: 11:00 (質疑応答: 10:50 〜 11:00) 3. 発表の概要、論点 ・PHPとは ・特徴 ・良いところ/悪いところ ・歴史 ・ユーザ会 ・マルチバイトの対応 ・PHPの言語としての特徴 ・環境の強化 ・性能・開発効率の改善 ・PHPのこれから(PHP5) ・まとめ 4. 発表の流れ、内容 PHPとは PHPは"PHP: Hypertext Preprocessor"の略です。 GNUなどと同様ソフトウェア業界の伝統に則り、再帰的な名称となっています。 (注:元々は"Personal Home Page tools"から) 特徴 その名(Hypertext Preprocessor)の通り、WebPageを構成するhtmlを生成するのに適した言語で、htmlブロック内にPHPのスクリプトを埋め込み、これをPHPに通すことによって実行することが出来ます。 このためWebアプリケーションを構成するミドルウェアの言語としてよく使われています。 LAMP(Linux+Apache+MySQL+PHP)のセットで利用されることが多いのですが、マルチプラットフォームでサーバ環境を選びません。 良いところ 他言語の良いとこ取りで、構文がPerl,Java,Cに似ている。またhtmlにスクリプトが埋め込みが可能でエラー表示も該当行をそのままブラウザの画面に出力でき、デバッグがしやすく習得が容易です。 また、POST,GET,Cookie,サーバ環境変数が自動的にスクリプト内の変数として取り込まれ、データベース接続,XML,PDF,画像,メール,その他最初から標準的に組み込まれる機能が豊富なため、導入〜Webアプリケーションを作るまでが非常に楽です。マルチプラットフォームのためサーバのステップアップもしやすくなっています。 標準的な機能以外にも、PerlのCPANにあたる PEAR/PECLにより更に機能拡張が可能となっています。 悪いところ Webでは良く使われるが、それ以外で使われることが非常に少ない。 PHP5でかなり強化されるが、根本的にオブジェクト指向のサポートは貧弱。 現在のところデータベース接続においてコネクションプーリングが出来ないので、大規模Webアプリケーションには難がある。 歴史 Netcraft(http://www.netcraft.com/)の調査によると、2003年8月現在で 13,376,000ドメインに導入されています。これはインターネット全体の3割、サーバとしてApacheを利用しているところの5割にあたります。 もっともこのデータは、簡単なサーバレスポンスに基づくインストール率であって利用率と同値とは言えませんが、それでもかなりの利用度と言えるのではないでしょうか。 PHPの最初のバージョンは1994年に生まれ、これにformからの入力機能が追加されたPHP/FIというバージョンとなり、1997年にはPHP/FI2がリリースされました。この後1998年に完全に書き直された PHP3が、2000年には現在主流となっているPHP4がリリースされました。最新版はPHP4.3.3とPHP5.0.0 Beta1です。 日本語対応に関しては、PHP/FI2〜PHP3の間は日本語パッチ及びパッチのあたった国際化版として存在していました。 PHP4でこれがマージされ、標準で正規表現や各種文字コード変換が可能なようになっています。 ユーザ会 日本PHPユーザ会(http://www.php.gr.jp/)は、2000年に日本でのPHPの普及と発展を目的として発足しました。 ユーザ会として、MLの運営,ドキュメントの整備,国際化(コード及びドキュメントの国際化は本家といっしょに活動)、また毎年夏に行われるPHPカンファレンスの主催を行っています。 (本年は8月30日開催。http://www.php.gr.jp/seminar/20030830/ を参照) 良くある質問として「ユーザ会に入会するには?」というのがあるのですが、答えは「MLに参加して、趣旨に賛同して自分で会員だなと思った時が入会」です。特に入会というものを設けていません。「自分で思った」がポイントです。 PHPの言語としての特徴 ・構文がPerl,Java,Cに似ているため、他言語の習熟者は言語習得するのが容易です。 ・httpd経由で入ってくるブラウザからの入力を変数に自動取得出来る等、Webにフォーカスした作りとなっています。 ・動的に型が決定される弱い型付けの言語です。 ・変数スコープが、グローバル,関数内,クラス内の3種類(PHP4)。残念ながら予定されていた名前空間は、PHP5でも実現されないかも。 ・文字列処理に多くの関数が用意され、正規表現もPOSIX互換/Perl互換/マルチバイト対応(Ruby由来)があります。 ・例外処理はAPIに依存(PHP4)。言語仕様としては、try〜throw〜catchがPHP5でサポートされます。 マルチバイトの対応 PHP内部のエンジン、Zend Engine(PHP4)を作っているZend Technologies Ltd.がイスラエルの企業ということもあり、元々余りマルチバイトは考慮されていません。 PHP4で国際化パッチがマージされ、現在ではCJK(日本語・中国語・韓国語)をサポートしています。 変換の作りは、 ・ブラウザ→入力パーザ (エンコード判別(自動/手動)、内部エンコーディングへ変換)、 ・ブラウザ←出力バッファ (内部エンコーディングから変換)、 ・スクリプト→ローダ (エンコーディング判別(自動も可能だがあまりしない)、内部エンコーディングへ変換) という感じになっていて、スクリプトは内部エンコーディングで処理されています。 またデータベース入出力,画像関数,ファイルI/O、その他エンコーディング変換が必要なものは、それぞれの関数APIにフィルタを設けて変換を行う形になっています。 環境の強化 Webアプリケーション以外の用途で広く使われるようになって欲しい。 CUIでは従来のCGI版PHPだけではなくコマンドライン版のPHP-CLIが、GUIではPHP-GTKがある。 組み込みでは、MySQLのプロシージャ言語として利用するmyphpなどのPHP/embedプロジェクト。 Webサービス・メッセージングでは、SOAP、XML-RPC対応の強化など。 性能・開発効率の改善 統合開発環境(IDE)の拡充 ・Zend Studio - http://www.zend.co.jp/products/studio/ ・Eclipse+TruStudio(旧WebStudio) - http://www.xored.com/products.php (注:TruStudioは今のところPythonに対応。PHPはWebStudioで日本語にも対応) ・Komodo - http://www.activestate.com/Products/Komodo/ (注:Perl/Pythonにも対応しています。PHPは日本語で扱うのに難ありでしたが、他言語は如何に) Webテンプレート ・Smartyテンプレートエンジン - http://smarty.php.net/ 標準ライブラリ ・PEAR/PECL - http://pear.php.net/ 主要なライブラリはドキュメントも整備され、ここ1〜2年で充分使えるようになってきました。 PHPのこれから(PHP5) PHPは現在次のメジャーバージョンであるPHP5のリリースを控えています。 既にPHP5.0.0 Beta1がリリースされテスト中ですが、その新機能と PHP4からの変更点を説明します。 スクリプトエンジンがZend EngineからZend Engine2に変わります。 これによりオブジェクト指向の大幅強化が図られます。 ・オブジェクトのデフォルト渡しの変更 今まで「値渡し」だったデフォルトの渡し方が、「参照渡し」に変更されます。 ・名前空間 パフォーマンスの問題で外されることになりました。もしかすると復活するかも知れません。 ・プロパティ・メソッドへのアクセス制限 従来はvar=publicのみでしたが、public, private, protectedとなります。 ・クラス定数 constを用いて、クラス定数を定義できるようになりました。 ・クラス変数 インスタンスを1つも作らない状態でも、きちんと指定した値で初期化されるようになりました。 クラス名::$変数名でアクセスします。 ・仕様・実装の分離 interface, implementsにより、仕様・実装の分離が図れます。 ・オーバーライドの制限 finalによりオーバーライドの制限が掛けられます。 ・コンストラクタ名の統一 従来はクラス名だったものが、__construct()に統一されます。 但し互換性のため従来のクラス名によるコンストラクタがあればそちらが優先されます。 ・デストラクタ追加 従来はリソース開放のみでしたが、__destruct()として追加されます。 ・プロパティのオーバーローディング 存在しないプロパティへの代入/参照のアクセスを上書きする __set(),__get()の追加 ・メソッドのオーバーローディング 存在しないメソッドを上書きする __call()の追加 ・例外処理(try〜throw〜catch)の追加 APIに依存していた例外処理が、try〜throw〜catchの言語仕様として追加されました。 オブジェクト指向に関係のないPHP5での変更点 ・XML対応強化 バンドルされるXMLライブラリが、expatからlibxml2に変更されました。 DOMエクステンション、XSLエクステンションが新しくされ、SimpleXMLエクステンションが新規に追加されました。 SimpleXMLでは一般にオブジェクトマッピングXML APIと言われているものを利用します。 これはDOMのような木構造とは違いプログラムで使用するネイティブなデータ型に直接変換できる、つまりXMLのエレメントが直接PHPのオブジェクトのプロパティとして取り込めるため、非常に簡単にXMLを扱える機能です。 ・画像関連の強化 アンチエイリアシングの機能が追加されました。 ・ストリームAPI強化 ・外部オブジェクト(Java等)のオーバーロードが容易になりました。 ・マルチバイト対応 正規表現にRubyの鬼車を採用。ライセンスに違反しないよう配布形態を工夫します。ひょっとしたらRubyよりも先に出ちゃう?(笑) ・SQLiteバンドル PHP4でバンドルしているMySQLのライブラリ(PDS)では最新のMySQLには接続できなくなったが、接続出来る最新のMySQLのライブラリはGPLのため、PHPにバンドル出来ない。 (ライセンスの問題。PHPは独自のPHPライセンスで、GPLとはマッチしない) それもあって、MySQL拡張機能が標準のバンドルから外され、SQLiteが標準バンドルされることになりました。 対応する文字エンコーディングはUTF-8/ISO8859で、恐らくバンドル時のデフォルト設定ISO8859。 SQLiteは簡易的なデータベースエンジンも含んだ形のデータベースで、データベースをファイルまたはメモリに保持し、それだけでSQLを解釈するデータベースとして動くので、結構面白いかも。 ただ余り大量のデータだと問題が出るかも知れません。 ・Javaとの連携 J2EEとの連携について、Zend Technologies Ltd.とSun Microsystems, Inc.との間で協議中。 エンタープライズ用途に何らかの形で関わっていくものと思われます。 PHP5のリリースは2003年末頃と思われますが、PEAR関係などでも問題も多く、標準モジュールを減らしたりしてリリースを遅らせないようにしないとね。 PHP6になる時にParrotになる!? なると良いですねぇ。 まとめ PHP5になっても初心者に優しいスクリプト言語であり続けられれば、Webアプリケーション構築用言語の定番を維持しつつ、発展できるのではないだろうか。 更にPHP5で強化されるオブジェクト指向対応で、エンタープライズ用途への足がかりとし、負荷テスト等で実績・ノウハウを積み上げを図る、 5. 質疑応答・議論の流れ、内容 質疑応答1 (小飼) PerlやRubyと違って、演算子の優先順位が違うのはそのまま? (廣川) 特に問題になっていないので、そのままだと思います。 (廣川) 個人的に変という認識はしてないが、具体的にどの辺りが変なのでしょう? (小飼) うーん、長くなりそうなんで後で話しましょう。 (注:私も変という認識がないです。変ですかねぇ、PHP。参考「各言語の演算子の優先順序(添付ファイル)」) 質疑応答2 (台場) 負荷テストはどうやるの? (廣川) OSDNの機材を借りて、またロードバランサなども組み合わせて、多数のリクエストが届いた場合の反応をみます。 (台場) 結局ハードウェアのテストになってしまわない? (廣川) WebサーバとDBサーバの間がネックになるケースが多くあるので、そこが見えるようにテストを工夫します。 (廣川) Web+DBで採用が多いPHPなので、その方面の実務向けのデータを取る。最適な相互の設定や条件をみつけるのが目的のひとつ。 (台場) クラックコンテストやるなら呼んでネ。 質疑応答3 (質問者) PHP5のJavaフューチャって、具体的には? JSPの置き換えをPHPでやる? (廣川) 具体的に決まってるのはひとつだけ。 (廣川) 年末までに「何か」を作る(ZendとSunとの約束)ということだけです(笑) (廣川) 今(PHP4)でもJavaのクラスは普通に呼べるので、PHP5で結局なにが変わるのか判らない。安定性かな? (発表者注) JavaのクラスはPHP4でも呼べますが、例外処理や多重被参照等の仕組がPHP5で追加されることにより、よりJavaライクに簡明に記述できるようになります。安定性向上も課題です。 6. 発表の総括 オブジェクト指向のサポートの貧弱さもPHP5の登場で強化され、今までちょっとoo度の高い作りを始めると直ぐに突き当たっていた言語仕様による壁も、幾分か取り払われました。自由度が増した分、高度な分野もこれまで以上にカバーできるようになるでしょう。しかしPHPの手軽さは変わらず、新機能の拡充と相まって更に「お買い得」感の高い言語となるのではないでしょうか。 7. 所感 PHP5。個人的にはoo的なものも、そうでないものも「ようこそ!」の気分ですが、これからの市中の移行スケジュールを考えるとなかなか気が重いかもしれません。 半年ぐらいで概ね入れ替わってくれれば万々歳なのですが、甘いでしょうね。 8. 特記事項 (オプション) (特になし) $Id: p1-php.log,v 1.1 2004/03/24 04:00:34 ryuchi Exp $