いまおすすめの言語はPHP −Javaジャバ言ってる間にも(3)
予算や技術や要件についてそれぞれエキスパートが十分に考え抜いて 言語やツールを選択しているシステム開発プロジェクト−Web/非web問わず− というものはめったにない。
逆に、ことWebシステムの構築プロジェクトにおいて 開発言語にJavaを使う理由の9割以上は、そのプロジェクトにかかわる人々が 「とりあえず「ジャバ」という単語を口に出しておけば間違いはなかろう」 という強力な催眠術にかかっているケースだろう。
Webシステムの開発に限って言えば、開発言語として、いま、ベストな選択はPHPである。 以下、技術的な用語を極力避けつつ、その理由を述べたい。
「フォームに入力された内容をwebマスター宛にメールしたい」という要件があったとしよう。
PHPで書く場合:
<?php
$subject="タイトル";
$body ="本文";
mb_send_mail("hoge@example.com",$subject,$body);
?>
Javaで書く場合:
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;
public class sendmail {
try {
Session session = Session.getDefaultInstance(prop, null);
MimeMessage mail = new MimeMessage(session);
mail.setRecipients(Message.RecipientType.TO,
"hoge@example.com");
mail.setHeader("Content-Type", "text/plain");
mail.setSubject("タイトル", "iso-2022-jp");
mail.setText(text, "iso-2022-jp");
Transport.send(mail);
}
//ここでははかなり簡略して書いてる。
//実際まったく不足だがとりあえず省略。
}
もちろんJavaでのコーディング方法はもっと簡単な方法もある。しかしいずれにせよどう書いても、
手軽さ、学びやすさ、ぱっと見の理解しやすさにおいて、JavaはPHPに全く及ばない。
これが、筆者がJAVAではなくPHPをすすめる理由である。
素人でも学びやすく、書きやすい。もしも「Webデザインだけじゃ食ってけないし、
もっと複雑なことができる言語でも学ぼうかな」と思っているWebデザイナーがいたら、
迷わずPHPを学び始めることをおすすめする。
Javaが全面的によくないわけではまったくない。ハサミは使いようだ。 だが、それほど複雑な機能を必要としないWebサイト=おそらく世の中の8,9割がたのWebサイト= においてはJavaでつくるよりPHPのほうが早道である。つくりやすさだけで言うとperlという手もあるが、 perlによるWebシステムは実行速度の点で難がありすぎる。Apache+mod_perlという手もあるが、 そこまでやるならPHPで考え直したほうがよいだろう。
Javaを使えば、書いたコード=部品=の再利用性が向上するとか拡張性が向上するとかいう話もいろいろあるが、 ぶっちゃけ、部品を再利用し拡張することを考えるような事態になるときは、 結局Webサイト自体をすべて作り直すような結論に達することが多いので、 再利用性も拡張性もたいした意味をなさない。 繰り返すようだがそもそも世の中の8,9割がたのサイトは、Javaがもたらすコード再利用性や拡張性に頼らなければならないほど複雑巨大な機能をもたないし必要としていないのだ。
もちろん、PHPにできないこともJAVAならできるということもある。なぜなら、、PHPは完全にWebシステム開発専用の言語であるのに対し、JavaはWebシステム/Webサイト構築に限った言語ではないからだ。PHPはWebサーバ(Apacheなど)に寄生する形で稼動し、HTML言語に埋め込む形で書かれることを前提としている。だからこそPHPはWebシステム構築に用いる言語の選択肢としてJavaより有利な立場にある。
Yahoo!、オープンソースの PHP スクリプト言語に移行 (Japan.internet.com 2002/10)まんまと催眠術にかかってJavaジャバ言ってる間にも、 Webの世界のリーダー達は、すでに、自分自身の選択眼でツールや言語を選んでいる。
See also:
Javaジャバ言ってる間にも
(2003/12)
Javaジャバ言ってる間にも(2)
(2004/3)
いまおすすめの言語はPHP
−Javaジャバ言ってる間にも(3)(2004/5)
Javaジャバ言ってる間にも(4) −
FriendSterはJavaからPHPに乗り換えていた(2004/9)
IBM、PHPの支持を表明 − Javaジャバ言ってる間にも(5)(2005/3)
「従来のEJBは存在自体が間違いだった」 - Javaジャバ言ってる間にも(6)
(2005/6)
アマゾンはperlでできている - Javaジャバ言ってる間にも(7)
(2005/7)

コメント
>ぶっちゃけ、部品を再利用し拡張することを考えるような事態になるときは、結局Webサイト自体をすべて作り直すような結論に達することが多いので、再利用性も拡張性もたいした意味をなさない。
それは、作り直さなければいけないほどひどいソースを書いたからではないでしょうか?
>繰り返すようだがそもそも世の中の8,9割がたのサイトは、Javaがもたらすコード再利用性や拡張性に頼らなければならないほど複雑巨大な機能をもたないし必要としていないのだ。
これは確かにそういえると思います。Javaは拡張性&再利用性があってといって、PHP,Perlを除外している人は結構私の周りで見かけます。
>PHPはWebサーバ(Apacheなど)に寄生する形で稼動し、HTML言語に埋め込む形で書かれることを前提としている。だからこそPHPはWebシステム構築に用いる言語の選択肢としてJavaより有利な立場にある。
ちょっと強引すぎる気がしますが。。。。
Javaを使う利点として、経験のある技術者が見つけやすい(イメージがある)やフリーの優れた開発環境であるEclipseがあるなどということも有ると思います。経験の浅いPGにでもEclipseを使わせると結構生産性を高めて仕事をさせられて助かった経験があります。
クラス、メソッドのインクリメンタルサーチなどもついているので保守性も非常に高かったです。
PHPはそこらへんなにか便利なものはあるんですかね?
Posted by eirom at 2004年5月11日
開発環境で言えば、eclipseでphpコードを書くための
プラグインとして
TruStudio
http://webstudio.japansite.org/
なんてのもありますね。
本で言えば
EclipseによるPHPスクリプト開発
http://www.amazon.co.jp/exec/obidos/ASIN/4798006165/
なども。
Posted by phpfun at 2004年5月11日
こんにちは。いつも参考にさせてもらってます。最近デザインの話が多かったので久しぶりにシステム的な話が聞けてうれしいです。ちなみにわたしはphpeditorというのを使ってます。けっこう使えてますよ。
Posted by けんぞー at 2004年5月11日
すみません。aタグでリンクかけないんですかね。とりあえずURLそのまま書いてみます。
http://fol.axisz.jp/php/
Posted by けんぞー at 2004年5月11日
PHPだ、Javaだっていってるけど、結局のところどっちでもいいのでは?
要は、クライアントの望むものを、望む金額で実現できるのであれば、言語なんて気にする必要がないと思うのですが。。。
サンプルコードだって、Javaよりに書こうと思えばいくらでも操作できるわけだし、WebにはPHPって安易すぎると思うのですが?
Webビジネスコンサルタントを名乗るのなら、その辺りを正しく理解してもらいたいものです。
ただ自分の意見であるPHP>Javaを説明したいだけの文面にしか受け取れません。
Posted by 通りすがりのPHPプログラマー at 2004年5月11日
えーっと、だから、筆者さんは「ハサミは使いようだ」と書いてると思うのですが。。。
Posted by けんぞー at 2004年5月11日
phpfunさん、けんぞーさん情報ありがとうございます。
phpfunさんがリンクしてくれたプラグインは聞いたことはありますね。でも使い勝手はどうなんでしょうね?昔使ったときはまだまだと感じました。
けんぞーさんのphpeditorというやつは初めて知りました。ちょっと今度使ってみます。
Posted by eirom at 2004年5月11日
どうも、筆者です。めずらしくいっぱいコメントがついてうれしいです。
PHPがオススメだという理由に、もう少し補足しましょう。
MovableTypeはなんでここまで爆発的に普及したのでしょうか?
その機能の良さもさることながら、perlで書かれていることが重要な要素です。
perlで書かれているということは、世の中のほとんどのプロバイダのホームページサービスやレンタルサーバにおいて、それが稼動できる、ということを意味します。
だからこそ誰もが「自分のところで試しに動かしてみよう」となったのです。
もしこれがPHPやJavaで書かれていたらこうはならなかったでしょう。
世の中のWEBサイトは9割がたが共用レンタルサーバー上にあるはずです。企業内イントラネット上でさえそうかもしれません。そこではすでにperl実行環境があるでしょうし、PHPが動く環境も用意されるようになってゆくでしょう。
現に「うちのサーバはPHPも動きますよ」といったことを売り文句レンタルサーバ業者は増加の一途ですが、Java(JSP)が動くような環境(=JavaVM+Tomcatとか?)を用意するには、現段階では、共用ではなく専用サーバを使わなければならないケースがほとんどでしょう。
「そんな金は出せん。いま借りてるサーバーでperlかPHPが動くならそのどっちかで作ってくれ。JAVAが必要なほど大きな機能を求めてるわけじゃないんだし。え?perlだと実行が遅いの?じゃPHPだね。」自分がWEBサイト運営者なら、そう言います。
Posted by watanabe at 2004年5月12日
補足とおっしゃってますが、とても重要な視点だと思います。本文より説得力があります(笑)
専任者がいない、いてもプログラムはあまりできない、だけど簡単な修正は自社内で行いたいという場合は、間違いなくperlやPHPがおすすめですね。
Posted by xyz at 2004年5月12日
PHPとJAVAどっちがいいって言われたら、自分はPHPです。
サーバーサイドJAVAの嫌なところは、TomcatやらApacheやら、最初にやらなければいけない事が多いし、動かすにしても、web.xmlの編集もしなければいけません。だから少し嫌いですね。JAVAは。
Posted by nohohon at 2004年5月19日
作った Web アプリを納品する場合、Java ならコンパイルしてますが、php はどうなんでしょう?あんまりソースを人目(この場合納品先のみですが)に晒したくない、場合はやはり Java の方がいいように思うんですがどうでしょう?
Posted by kimitake at 2004年8月 4日
納品先にソースを見せない(=ソースファイルを納品しない)のですか?
システム開発でそんな契約ってありうるのでしょうか? 聞いたこと無いです。
Posted by watanabe at 2004年8月 4日
例えば掲示板でもなんでもいいんですが、Windows ベースのTomcat 上で動きますよーという Java 製品を作って、それを大量に売りさばく場合、ソースごと売ったりはしないと思いますが? 確かに JSP 部分は見られますが、servlet 部分はある程度隠蔽できますよね?
PHP の場合サーバーサイドスクリプトってことで、すべてのコードを見ることができるわけですが、これを隠蔽する手段はないものかと最近調べてるんですが、ご存じないですか?
確かに必ずソースファイルを納品しなければいけない、というのであれば PHP だろうがなんだろうが気にする必要はないんですが、そうとは限らない場合はどうされるんでしょうか?いや現実そういう契約はあります。
Posted by kimitake at 2004年8月 6日
zendが出してるエンコーダーありますね。
http://www.zend.co.jp/products/encoder/
Posted by 通りすがり at 2004年8月 6日
情報ありがとうございます。でもちょっと高いっす ^^;
Java なら無料でいろいろ構築できるのに(ぶつぶつ...)
Posted by kimitake at 2004年8月 6日
ionCube社のPHP Encoderはどうでしょう?
http://www.asial.co.jp/products/ioncube/encoder/products.php
キャッシュツールのAccelerator(無料)は、
大変に有効です。PHP標準のモジュールに入れて
ほしいくらいです。
Posted by jens at 2004年8月 9日
今更ながら・・・。
Javaは私も使えますけど
勉強すれば勉強するほどJavaにはがっかりさせられました
確かに言語自体のパフォーマンスは高いのは
ベンチなど取って感じたのですが
やはり構築しやすさ、環境の整備への手間を考えると
Perl,PHPなどスクリプト言語になりますね
私はPHP派ですけど
PHP4でたぐらいからのPerlの進化は久しぶりのライバルに活気が出たみたいで
mod_perl2を使えば今のところWEBパフォーマンス的には
悲しいですがZendのPHPよりも高速です
(mod_perlの時点でほとんど負けてましたが)
しかし速度も問題ながらやはりモジュール追加のやり方ですね
perlはCPANがありますけど
PHPのモジュール追加って何かと面倒で
これはあまり体験した人少ないと思いますが
Apacheモジュールとして入れてるからこそ
他のApacheモジュールへの悪影響もあったりします
だからと言ってじゃPerlにしようってことを言ってるのではありませんが
現実をとらえることは大事です
あと個人的なPHPの問題点としては、ほとんど関数にしてしまうと
便利な反面、重要な処理をブラックボックス化してしまい
開発者の理解なく作れてしまうという点も懸念しています
(こういうのも使ってる人しかわかりませんけど)
ちなみにPerl6からParrotになるのでPHPも順次合わせると思いますが
コンパイラが両方実装される計画です
これが実現するとPerl,PHPどちらで記述しても同じコードができることになります
(できたらできたで問題はできるでしょうけれども)
watanabeさんがいうようにMovableTypeは言語云々ではないという現実を
示した素晴らしいソフトだと思います
そして私も長年この業界にいますが
ソースを隠さないといけない契約などしたことも聞いたこともありません
DelphiやJavaでの開発も納品するときはソースも渡します
私が逆の立場ならセキリュティの面からしてもかなり怖い商品ですから。
(パッケージとして売るなら別ですけども)
現実問題としてjavaの逆コンパイラぐらいかなりありますから事実上無駄なあがきだと思いますよ。
Posted by pon at 2004年11月16日
JavaとPHPとの比較の話がでていますが、
Tomcatのweb.xml編集が面倒臭いという
問題もXDocletで簡単に解決できます。
TomcatへのデプロイもApache Antで解決できます。
今仕事でPHP5を使ってでXMLから送られてきた複雑な
データをデータベースにある
複数のテーブルに保存するコードを書いていますが
ちょっとやりにくいです。
オブジェクト指向に慣れた人間としてはPHPは非常に
使いにくいです。
型の概念があまりにも曖昧で
出力されるべきエラーメッセージも
少なく、バグを検出しにくいつらさがあります。
殆どの変数に型宣言ができないので
どこにバグが潜んでいるのかを掴みにくい問題があります。
error_reaporting(E_ALL);
を設定してもまだまだ使いにくいです。
メソッドのオーバーロードもしずらく
Javaのfinalに相当する(一回しか代入が許されない)変数
を定義する(constではこれができない!!!)ことも
できず、Javaのstaticイニシャライザに相当する機能も
実現しにくくやりにくいです。
デザインパターンの実装もしずらいです。
PHP5は名前空間の概念が無いため、アクセス権を設定できず
クラスはすべてpublicになってしまい
Facadeパターンらしいクラスを実装することができません。
require_once()がJavaのimportのように使いにくいのも
難点です。ディレクトリの位置関係を気にしないと
いけないのでちょっと厄介です。
クラスの数が2,3個程度ならいいですが
私の場合、クラスを2,30以上は作ってしまうので
require.incというファイルにrequireを列挙すると
他の人にソースを見せるとき見通しがわるくなってしまいます。
PHP5からは__autoload()という関数が用意され
これをオーバーライドすればある程度は
解決できるみたいですが・・・。
SimpleXMLは簡単ですけど何かちょっといまいちなところがあります。
PEARライブラリはオブジェクト指向を使って
作られていて標準で用意されている
関数よりも使い勝手が良く、PEAR::DBを使っていますが、
まだまだな感がします。
JavaのHibernate, CayenneやRelaxor, Castorのような
PHPに対応したO-Rマッピングツール、
データバインディングツールというものがあればいいのですが。
PHP5で導入される予定だったはずの、
大規模開発では必要不可欠な名前空間(namespace)が
なくなったのは非常にがっかりしました。
私もPerl6に期待しています。これでPHPが一層Javaよりも
使いやすい言語になればと思います。
Posted by h at 2005年7月29日
筆者です。なんかコメントが増えてきてうれしいです。
さて、いろんな人が、数行から数十行まで、沢山書いていただいてるのですが、
その1行1行にコメント返しするのは難しいので、
筆者の思うところだけを追記するような感じでいきます。
やはり、
>やはり構築しやすさ、環境の整備への手間を考えると
>Perl,PHPなどスクリプト言語になりますね
というあたりが一番気になっているというか、同感なのです。
JavaでWebアプリをつくるとしましょう。
サーバーにApacheを入れて、mod_jkを入れて設定し、JavaVMも入れて、tomcatを入れて、必要ならtomcatの起動パラメータ(メモリとか)を調整し、web.xmlを調整し、apacheとtomcat両方のログ出力(ローテーション含む)を調整し、jarなりwarなりをアップロードし、なんか調子悪いなと思うと結局tomcatごと再起動し、、、
一方で開発環境では、やはりJavaVMをいれ、Eclipseを入れ、プラグインをいくつかダウンロードして入れ、必要なライブラリをかき集めてクラスパスを通し、antのビルドファイルの調整方法を覚え、XdocletやHibernateの作法も覚え、antを覚えたと思ったら今度は必要なライブラリを自動で集めてくれるというmavenとかいうのが出てきてそっちのほうがよさそうで、、、
いったいいつになったらプログラミングを開始できるのだろう?(笑)
そう思ってしまう今日この頃。
そうそう、perlのCPANにあたるのがPHPのpear。
pearコマンド一発で指定のライブラリをダウンロードしてインストールしてくれますね。
Javaはそういうのあるんだろうか・・・。mavenかなあ。
Posted by watanabe at 2005年7月29日
またまたレスをしますが、気になってしまったのでコメントします。
> JavaでWebアプリをつくるとしましょう。
>
> サーバーにApacheを入れて、mod_jkを入れて設定し、JavaVMも入れて、tomcatを入れて、必要ならtomcatの起動パラメータ(メモリとか)を調整し、
Fedora Core3,4ならばmod_jkを入れる設定をする必要がなく、Tomcatを入れて
workser2.propertiesをちょっと弄れば設定は完了します。
> web.xmlを調整し、
XDocletで自動化すれば調整する必要はありません。
とにかく、Antなどを上手く使って自動化しましょう。
> apacheとtomcat両方のログ出力(ローテーション含む)を調整し、jarなりwarな
>りをアップロードし、なんか調子悪いなと思うと結局tomcatごと再起動し、、、
それもTomcatのAdmin Tool, Manager ToolとAntにより容易になりました。
> 一方で開発環境では、やはりJavaVMをいれ、Eclipseを入れ、プラグインをいくつか
>ダウンロードして入れ、必要なライブラリをかき集めてクラスパスを通し、
Eclipseのそういった点に不満を感じ、NetBeansやJBuilderなどを
好んで使う人もいるようです。WebSphereなんてものもありますが、
Eclipsen上位版で使いやすいようですがタダというわけにはいかないようですね。
Eclipse上でのクラスパスの設定はJARファイルを「ライブラリ」としてまとめておけば
簡単にインポートできます。
ライブラリ専用のプロジェクトを作っておいてそれを他のプロジェクトから参照する
というテクニックもあります。
Eclipseのインストールも一度環境を作ってしまえば
他の人に使わせるときも、プラグイン付きEclipseディレクトリを
コピーするだけで簡単にセットアップが完了します。
プラグインのインストールもアップデートマネージャを使えば簡単です。
アップデートサイトもフィーチャも無いプラグイン
をアップデートマネージャを使ってインストールするには
どこかのサーバにあらかじめアップデートサイトとなるプラグインを
置くディレクトリを作っておけばチームで開発するときに
容易にプラグインのインストールができるというテクニックもあるようです。
>antのビルドファイルの調整方法を覚え、XdocletやHibernateの作法も覚え、antを覚
>えたと思ったら今度は必要なライブラリを自動で集めてくれるというmavenとかいう
>のが出てきてそっちのほうがよさそうで、、、
Javaを使いこなすには確かにスキルと経験が必要な点が多いですね。
自動化ツールの使い方、存在すら知らなかったために効率の悪いやり方を
している人達を今まで散々見てきました。
ツールの使い方も慣れればどうってことでも無いものです。
Mavenが出たのでAntを覚えるのは無駄かというとまだそうでも無く
MavenをカスタマイズするにはAntを使うところがあります。
> そうそう、perlのCPANにあたるのがPHPのpear。
> pearコマンド一発で指定のライブラリをダウンロードしてインストールしてくれますね。
> Javaはそういうのあるんだろうか・・・。mavenかなあ。
JJarというものがあります。MavenはJJarを使って自動ダウンロードをしますが
まだまだ不完全で必要なJARをタグで書かないといけないという難点があるのでMaven2というものが今開発されています。他の解決方法としては
EclipseのMevenide, Maven Workshopプラグインを使うこと、Maven Repo Searchプラグインを使うことです。
Javaに限らないことですが、Javaのような言語で開発する際、
自動化は非常に重要です。テストでも何でも、
何か自動化しなければ開発効率は一向に向上しません。
PHPを使うかJavaを使うかそのほかの言語を使うかの
切り替えを的確に行うにもかなりの経験が必要そうですね。
大抵は自分の知っている範囲の知識のみや勘や個人の好みといった
主観的な判断で言語を決めてしまっているのが現実なようですが。
Posted by h at 2005年8月13日
Java & PHP両方使ったことがありますが、
複雑な処理をするWebアプリを作る場合はしっかりとしたプログラミング言語であるJavaの方が良いのではと思います。
SOAPとかが本格的に普及したらJavaの方がベターでしょうし。
Posted by どちらかといえばJavaかな at 2005年9月27日
javaは使ったことはありますが、サーバーサイドのjavaは使ったことがありません。確かに使おうとすると使い出すために準備する事柄が多すぎて簡単には使える状況ではないので、まずその時点で必ず1回はいやになってしまいます。
その点ではPHPは何も考えなくても簡単に使えるので大変よいです。インストールがちょっと自動化が足りないぐらいです。そこさえなんとか乗り越えれば本当にすぐに使えます。
但し、最初の段階でページ単位で作っている時は、非常にわかりやすいのですが、少し規模が大きいものを作ろうとするとちょっとそれまでの考えを捨てて新しい考えを取り入れなければならない時期が必ずやってきます。
要はオブジェクト指向とMVCモデルを取り入れる時期がやって来るのです。しかし、それを勉強しながらうまく取り入れていけば、おのずとステップアップができますので、何も恐れるには足りません。
極論するならば、Webアプリとは本質的には、MVCモデルの世界です。このことはまったく言語にはよりません。
しかし、現在ではPerlのほうがPHPよりも速度が速いとははじめて知りました。ぜひPHPにも頑張って抜き返してもらわなくては困りますね。
Posted by surferome at 2005年9月28日
私はJAVAを使っています。PHPは使ったことがないですが、試してみてもいいかなと皆様の書き込みを見て思っているところです。perlはちょっと使ったことがあるのですが、型宣言に違和感を感じました。「え?これで大丈夫なの??」という感じです。簡単でいいんだけど不安が残るってとこですかね。簡単なテストアプリだったのでたいした問題も発生しませんでしたが、経済状況が厳しくなって激化する競争を乗り切るためにWEBアプリも内部処理が複雑化するかもしれません。そうなってくるとエラーが分かりやすならないとノイローゼになっちゃいます(^-^ ) 笑いながら言うことでもないですけど・・・。そういう意味でも「予想されるエラーが起こったらこうしなさい」をいちいち書かないと前に進めない、もしくは書かなかったとしても発生したらひっかかった場所をいちいち教えてくれるJAVAの方がいいような気がします。
WEBアプリが複雑化しないならそうでもないです。
Posted by java派 at 2005年10月12日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)