InfoQ

News

Java上のPHP: それぞれの長所は?

作者 Mark Figley, 翻訳者 佐野 徹郎 投稿日 2007年10月29日 午前12時13分

コミュニティ
Java,
Architecture
トピック
Webフレームワーク,
アプリケーションサーバ
タグ
言語,
PHP

Java/EEの開発コミュニティにおけるPHPのプロファイルと妥当性の向上は収束するように見える。IBMとCouchoの双方はJavaアーキテクチャ上のPHPに大きな投資をしている。またSun、Oracle、BEAも過去18ヶ月以内にPHPの統合やZendとの提携を発表している。私たちはPHPがJavaスペースで適合するところについて、IBMのWebSphere CTOであるJerry Cuomo氏と、Resin Java Application Serverや最近ではQuercus PHP engine(サイト・英語)の作者でもあるScott Ferguson氏に話を聞いた。Java/PHPのハイブリッドスタックにおけるIBMの目立つ投資は、スクリプティング言語のGroovyとPHPをサポートする新しいWebフレームワーク、Project Zero(サイト・英語)の開発だ。IBMがProject ZeroでPHPのサポートを選択した理由について、ジェリーは以下のように語った。

Jerry: 3つの単語...アジリティ、コンテンツ、エデュケイテッド
  • アジリティ J2EEアプリケーションは「永続的な価値」...つまり永遠に稼動するものを書くことに最適化されています。PHPスクリプトは「今週金曜日までに稼動させる」ような、よくあるちょっとしたアプリケーションのために、すばやくコンパクトにコードを書けるように最適化されています。
  • コンテンツ 私たちはこれを「カットアンドペーストによるプログラミング」と呼んでいます。PHPには有益なものがネット上に大量にあります。あなたが一から何かを書くことはほとんどありません。検索して、カット、ペースト、そして実行...(これは私たちをアジャイルにします)
  • エデュケイテッド PHPについて自分で学ぶのは本当に簡単です。コンピュータサイエンスの正式な教育を受けていなくても、多くの人にとってPHPスクリプトを書くのは簡単です。たとえば、あなたがPHPでスクリプトを書くときに、複雑なメモリやスレッドの管理について考えることはありません。そして最後のポイントに戻り、あなたのほとんどの時間は他の誰かのコードを変更することです。

CauchoのアプローチはIBMとは異なっている。Project ZeroはPHP言語もサポートするJava/Groovyフレームワークのように見える。一方でQuercusはmod_phpと競合するようなPHP言語の完全な優れた実装だ。PHPインタプリタは完全にJavaで書かれているので、ネイティブなJava/PHPの統合を提供できるだけでなく、JVMの能力によって優れたパフォーマンスとセキュリティを提供することも可能だ。JavaがどのようにQuercusを際立たせたか、そしてエンジニアリングの立場について、Scottは以下のように語った。

Scott: Javaのスレッディング、キャッシング、プーリングの機能はQuercusの成功に不可欠です。Quercusのライブラリの実装の多くは、Javaの機能をラップしています。例えば、データベースアクセスはJDBCをラップしています。Javaプラットフォームはすでに強大な基盤を提供しているので、Quercusはそれらの機能をただで手に入れることができます。

さらに、Quercusがうまくいくには、リフレクション、メモリ管理、JDK 1.5のアノテーション、動的なコンパイル/クラスローディングも必要です。CのPHPのような賢いポインタプログラミングは利用できませんが、クリーンなOOデザインとメモリの問題を扱うためにJavaを利用することができます。

もちろんプロファイリングも。Quercusは自動的にJVMのCPUとヒープのプロファイリングによる利益を得ることができます。Quercus関数がJavaメソッドにコンパイルされると、どこが遅いかやメモリを消費しているかを正確に知ることができます。

ラピッドでライトウェイトなWebティアフレームワークを広く採用するJavaプラットフォームのとらえどころのない目標と、Javaコミュニティが効率的なWebティア開発のためにJavaベースのフレームワークを利用することをあきらめて、その代わりに動的スクリプティング言語に向かっているためにPHPランタイムに投資しているのかについて、JerryとScottに聞いた。彼らは私の質問はJava離れの傾向が誇張されているとして、JavaとPHPの間のバランスについて以下のように述べた。

Jerry: 「移行する」や「あきらめる」は少し言い過ぎです。私たちは「Javaにエグゼクティブプロモーションを与える」と言いたいのです。Javaはそれを得ました。これはバイナリの問題ではありません。この現在の役割に加えて、私はJavaがこれらの動的スクリプティング言語のための「システムプログラミング」環境としての役割を果たすことができると信じています。JavaとC/C++の関係と同じように。現在、Java(およびJVM)はDSLをサポートする興味深い方法で成長(および縮小)する必要があります。例えば、今日のJavaは長期間稼動するアプリケーションやプロセスの実行に最適化されています。DSLは短命で、頻繁に入れ替わります。
Scott: 私たちはJavaを完全に捨て去ることを推奨しません。JavaはWebアプリケーションの基盤として素晴らしいです。Spring、JPA/Hibernateのようなフレームワークや、Coherenceのようなツール、そしてJUnitのようなテスティングフレームワークは、スクリプティングの世界のどんなものよりも優れています。加えて、アプリケーションレベルのキャッシング、サービス、イベント、およびスレッディングコードなどはJavaで行う方がずっといいです。Mediawiki(wikipedia)のようなPHPアプリケーションを見れば、下位レベルのコードはJavaで書いた方が良いことは明らかでしょう。

Quercus/PHPが成功するのはプレゼンテーションレイヤやスクリプティングとしてより柔軟性を必要とするところです。JSF、JSP/JSTL、Struts、VelocityのようなJavaのプレゼンテーションフレームワークには、完全なスクリプティング言語の持つ柔軟性やライブラリの機能がありません。JSP/JSTLのような多くのフレームワークは、不完全なスクリプティング言語の実装です。なぜ多くのライブラリと多くのサイトで成功した実績のある完全なスクリプティング言語を使用しないのでしょうか。

私たちは(バックエンドのモデルと基礎的なサービスのための)Javaとプレゼンテーションレイヤと(BPELを置き換えるなど)任意のスクリプティングのためのPHP/Quercusの連携が最善の選択だと思います。

私たちはまたPHPとRubyやGroovyのような言語の比較や対比についても聞いてみた。ScottになぜRubyインタプリタの代わりにPHPを書いたのか聞いた。

Scott: 私たちはWeb開発のコミュニティですでに実績のあるスクリプティング言語を選択する必要があり、PHPは有力なスクリプティング言語でした。現在、Rubyはまだ実験的なスクリプティング言語です。Ruby言語には多くの良いところがありますが、いくつかの懸念もあります。Rubyはクロージャや継続のような多くの先進的な言語の機能を利用しており、Schemeに似ています。個人的には、それらの機能が好きですが、多くのプログラマはそれらを導入することに消極的であることを身をもって知りました。PHPはBASICのように、だれでも使うことができます。私はRubyを応援しています。それが成功するのを見たいですが、私たちの限られた時間においては、様子を見る必要があります。

私たちは将来的にPHPがRuby on Railsのように成長を続けるか、Jerryに聞いた。私たちはまたPHP5に導入されたオブジェクト指向によって、PHPがProject Zeroのようなフレームワークとの関連を増すかについて聞いた。最後に私たちは、Project ZeroはGroovyとPHPの両方をサポートするが、どちらの言語も知らない新しいProject Zeroの開発者にGroovyとPHPのどちらを推奨するか、Jerryに聞いた。

Jerry: PHPはRubyやGroovyのような動的なスクリプティング言語ではありません。それは確かです。しかし、これらの言語には世界で最も人気のある(WordpressやPHPBBのような)アプリケーションが書かれるようになるまでに長い道のりがあります。PHPアプリケーションを拡張できる限り、新たな人がPHPを学ぶでしょう。大学生に人気のあるツールの多くはPHPで書かれているので、新たなPHPプログラマは誕生し続けるでしょう。

とは言うものの、現在PHPが実際に成長しているかは不明です…PHPはすでにかなり大きく、世の中には構文的によりクリーンでよりコンパクトな別の言語が多くあります。いずれ分かるでしょう。

しかし、これ(PHPの言語機能にOO)があるかどうかはPHPがProject Zeroに含まれた理由ではありません。それがそこにあるのは最適だからです。…もしあなたがJavaエンジニアなら、Groovyから始めるべきです。JavaエンジニアはProject Zeroが提供するアジリティな特徴を切望しています。私たちは「同時2つのものを」手に入れることができると言いたいのです。あるいは「Javaも動的なスクリプティングも」手に入れることができると言うべきでしょうか。しかし、もしあなたが多くのJavaのバックグラウンドを持たないか、既存のWebコンテンツを頼りにしているなら、PHPはアジャイルなアプリケーションを作成する手段を提供します。
原文はこちらです:http://www.infoq.com/news/2007/10/php-java-stack
ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

クラウドコンピューティング ~ EC2、Mosso、GoGrid

クラウドコンピューティングのプロバイダーであるEC2、Mosso、GoGridの新しいユーザーエクスペリエンスと、それぞれの機能の違いについて学びます。

仮想化入門

このArticleでは仮想化に関する利点と欠点を見ながら、仮想化の違いについて詳しく追っていきます。

Java 6のスレッド最適化は実際に動作しているのか? - パートII

パート2では、ベンチマークの結果を検証するために用いられるテクニックについてさらに深く見ていきたいと思います。最後に、「なぜプロセッサが異なるとロックのコストも大きく異なるのか」と言う真の疑問に答えます。

RESTアンチパターン

本稿では、Stefan Tilkov氏が「RESTful」な設計であると主張するアプリケーションに見受けられる最も一般的なアンチパターンのいくつかについて説明し、それらを避けるための方法を提案しています。

モデル駆動ソフトウェア開発のためのベストプラクティス

Sven Efftinge氏、Peter Friese氏とJan Köhnlein氏が、MDDを取り入れて成功した経験から、ベストプラクティスの解説を行います。

スケーラビリティの構築とパフォーマンスの達成:バーチャルパネル

Our panel of leading experts explores some of the challenges and thought processes that go into making their apps as scalable and performant as possible.

Spring 2.5:Spring MVCの新機能

この記事は、Spring 2.5で導入されたアノテーションを探究する3部作の第2弾です。Web層におけるアノテーションのサポートを扱います。最後の論文では、統合と検査で利用できる追加機能を説明する予定です。

"YUKATA"から始まるコミュニケーション(Agile2008 ライトニングトークより)

私は「浴衣」を着てパーティーに参加したことで、たくさん声を掛けていただけました。 そこで感じたことは、このカンファレンスが人との繋がりを生み出し、また言葉の壁を越えて積極的に交流する場所であることです。民族衣装はそれらを助けてくれるものでした。きっとこの交流が、新たなムーブメントをアジア圏の仲間たちにも与えてくれると確信しています。