Preprocessor)もともとがCGIのマクロ的な位置付けから発祥したPHPは、関数を主体とした平易な言語です。ASPやJSPによく似たHTML埋め込み型言語を採用し、で囲まれた部分にロジックを記述します。以下に、PHPの最もシンプルな例を挙げてみることにしましょう。?></body></html>sample.php開発性の観点から上述したように、PHPはその機能の大部分を、端的に分かりやすい関数という形で提供します。その種類の多さは群を抜いており、例えば、配列関数だけで約60種類の関数が提供されているという一事をもってしても、その豊富さは十分に想像いただけることでしょう。した意味で、PHPのコンセプトは、ASP同様、とにかく手軽にかつ端的にエンドユーザー要件を表現できることにあるといえます。した関数の豊富さにもかかわらず(いや、それ故にこそ不十分とすら思われる)、重大な欠点をPHPは内包しています。(1)構造がフラットであるJavaは「パッケージ」でクラスライブラリをカテゴライズし、命名の一意性を保障しているのに対し、PHPの関数群はあくまでフラットです。そもそも関数という性質上、クラス・オブジェクト指向の世界ではメソッドやプロパティ(フィールド)としてまとめられた機能群も、PHPではすべてばらけた状態で提供されます(それはいうなれば、フォルダという概念のないファイルシステムのようなものです)。機能を意味的に関連付けるのは、構文規則から離れた(はなはだ信頼性に欠ける)命名規則のみであり(例えば、MySQL関数はmysql_〜で始まる、など)、拡張するに従って命名衝突の危険性は増します。フラットであるが故に、全体的な機能の分類を把握するのは難しく、これだけ潤沢な機能を提供しているにもかかわらず、実際に使用する側としてはどのような機能があるのか全体を把握するのが難しい(煩雑である)という、機能以前の体系的な「もったいなさ」があるのも事実です。(2)HTTPヘッダを意識しなければならないこれは必ずしもCGIのそれと同レベルの問題であると考えるべきではありません。PHPでもASPやJSP同様、一般的な出力のレベルでHTTPプロトコルを意識する必要はありません。リダイレクト機能、文字コードの宣言、HTTPステータスの出力など、ことにHTTPヘッダの制御にかかわる局面に至った場合、PHPではheader関数が用意されているのみなのです。これはこれだけ関数群が充実したPHPにおいては「あまりに不親切な」設計であるといわざるを得ません。ちなみに、この点はJSP&サーブレットではHttpServletResponseクラスなどによって、ASPでもResponseオブジェクトによってほぼ完全に隠ぺいしており、ユーザーにプロトコルを意識させる局面は少ないといえます。パフォーマンスの観点からパフォーマンスという見地から見たとき、PHPの特性は長所・短所含め、極めてASPに酷似しています(詳細はASPの項を参照してください)。遅延バインディングとしての制約ただし、2003年1月時点での最新バージョンPHP4ではインタプリタ言語としてのパフォーマンス的制約を克服するために、以下のような工夫が凝らされています。EngineはPHP4から導入された新たな実行エンジンの名称です。Engineは実行に先立って一括でコンパイル処理を行い、コンパイル済みの中間コードを実際の処理系に渡します。これによって、逐次処理によるオーバーヘッドの発生を極小化し、パフォーマンスの大幅な向上を図ります。Engineのコンパイルによって生成された中間コードをキャッシュするしくみを提供します。これによって、リクエストの都度、コンパイル処理が発生することを抑え、処理パフォーマンスを改善することができます。このしくみは、JSPが1度目のリクエストでいったんサーブレットに変換・コンパイルされ、「.class」ファイルとして保持されるのと酷似しています。JSP、PHPの実行されるまでの流れ可搬性の観点から可搬性の観点で、PHPのそれはASPよりもむしろJSP&サーブレットに類似しているといえます。以下の2点においてです。NetWare、OS/2などの主要なプラットフォームに対応しています。Anywhere(一度書けばどこでも動く)”の精神を実現しているというよりは、文字どおり、複数のプラットフォームに対応したという色合いが強いともいえます。(2)XCOPYインストールが可能PHPアプリケーションは原則、XCOPY——すなわち、フォルダのファイルシステム的なコピーによって、一連のアプリケーションをコピーすることが可能です。一連のアプリケーション設定も、php.iniと呼ばれるテキストファイル上に記述されていますので、異なるサーバに移行する場合も個別に設定の手間を必要としません。ここで注意しなければならないのは、Javaの「.war」ファイルと異なり、PHPではアプリケーションフォルダ内に拡張モジュール(「.dll」や「.so」)を含むことができないという点です。拡張モジュールを組み込むためには、ASPのCOM同様、個別にインストール作業を行う必要があります。PointPHPはUnix、Windows系など主要なOSで動作します。関数主体とした平易な言語体系は、小規模系のアプリケーションで強い力を発揮します。総括いかがでしたでしょうか。駆け足ではありましたが、JSP&サーブレットを主軸に置いた各技術特性の差異について、少しはご理解いただけたでしょうか。ここで皆さんがどのような感想をお持ちになるのも(もちろん)自由ですが、1つだけ誤解していただきたくないのは、本稿があくまでどの技術が優れている、劣っているという議論を目的としているわけではないという点です。それぞれの技術に一長一短があり、また、それぞれの設計思想によって、ある局面では短所と思われる特性も異なる局面では長所となり得る場合があります。ASPやPHPなどは変数宣言を強制しない構文的にもあいまいなスクリプト言語を採用していますが、実際のところ、これら技術がターゲットとする小規模系のシステムにおいては、それは「十分な」実装であるといえます。した手軽な開発においては、Javaの厳密なデータ型の制約は忌避されるところであるかもしれません。2.0/サーブレット2.4においても)、それは技術そのものの特性というよりも現時点でのスナップショット的な「状態」にすぎません。相対的にとらえ、今後、JSP&サーブレットプログラミング・設計を行っていくうえでの1つのよすがにしていただければ幸いです。最後にまとめとして、各技術を端的に比較した総括表を挙げておくことにします。これらは、あくまで各技術が持つさまざまな側面をひとつの視点でとらえたものにすぎませんが、特性を概観した参考資料としてご覧ください。〇豊富な関数群、平易な言語体系。◎組み込みオブジェクトと豊富なコンポーネント。〇インタプリタ言語(Zendによる一括コンパイル)。〇複数プラットフォームに対応。×Windowsにのみ対応。△PEAR、PHPLibなどの部品化技術。〇ページインラインとCOMの切り分け。△コンパイル、インタプリタ双方あり。△複数プラットフォームに対応。×純正のプログラムソース。設計ポリシー的な観点から多岐にわたった比較分析を、拙著『JSP/PHP/ASPサーバサイドプログラミング徹底比較(http://member.nifty.ne.jp/Y-Yamada/srv/)』(技術評論社)でより詳細に試みています。興味のある方は、ぜひご覧になってみてください。概略的なお話は今回で終わり、次回からはいよいよJSP&サーブレット環境の構築、そしてJSP構文の基本について、サンプルを交えながらご紹介していくことにします。