こんな記事まで出ていることだし。

プログラムをたしなまない方にご注意:

こちらのPHPとはちょっと違います:-p

各論

使うは天国、インストールは地獄

PHPが一旦インストールされたら、それを使うのは確かに簡単だ。普通にHTMLを書く感覚で

<p>以下の環境変数が設定されています:</p>
<pre>
<?php
while(list($k, $v) = each($_SERVER)){
    echo "$k=$v\n";
}
?>
</pre>

とか書けばいい。しかし、PHPでいろいろやるためには、実際にはさまざまなライブラリーをあらかじめインストールした上で、PHPをそれに合わせてconfigureしなおさなければならない。こうして作られたlibphp#.soは、どれも微妙に、しかしユーザーにとっては耐え難く異なる。

% sh configure --help 

の出力が390行(5.2.2現在)というところからして、もうシステム管理者の頭痛の種。なんでもかんでもぶちこめば、やたら重いApacheが出来上がるし、かといっていろいろ削ればあとでユーザーに「なんでXMLが扱えないの?」とか突っ込まれることになる。

Webアプリ以外作る気にならない

PHPは、その生まれからしてWeb Serverと密結合している。Webアプリを作るにはいいが、それ以外の目的には使えない。

「でもCLIがあるじゃん」と言った方。なんでただのshell script書くのに<php? ?>で囲まなきゃならないのか。CLIを使う人にそんな勤勉さを期待されても困るというもの。

反吐がでるほど多い呪文

PHPを使うということは、PHPが用意するコマンドを覚えるということに等しいのだけど、これがやたらと沢山ある。なんでrequireとrequire_onceが分かれているのか、他の言語を知っている人にはさっぱりわからない。

そこには、短い言葉を組み合わせて大きな文章を作るという思想があまりに欠落している。ただ呪文の羅列があるのみ。AnimaliaChordataMammaliaPrimataHomonidaeHomoSapiensでなくHomo::Sapiensと書きたいのだけど。

バージョンが変われば別言語

Mac OS Xには、PerlもRubyもPythonもOSリリース時点での安定版が載っているのに、PHPは4のまま。これはデフォルトでインストールされているのがApache 1.3.xということもあるのだろうけれども、これはAppleがPHPを言語としてではなくWebサーバーのコンポーネントとして見ていることを意味している。

そう。PHPはバージョンの違いがあまりに大きいのだ。PHP4とPHP5の違いに至っては、Perl 5とPerl 6以上に見える。

言語で言語を拡張できない

なぜPHPが(他の言語から見ると)異様に激しくバージョンアップという名の別バージョンリリースを続けているかといえば、PHPには言語をもって言語を拡張するというのが思想からして欠落しているからだという結論に達する。PHPで新しいことをしようとしたら、PHPごと新しくせざるを得ないのだ。PerlもPythonもRubyも、言語はそのままで最新の技術に苦もなく対応していることと好対照である。

MVCのVしか出来ない

PHPというのは、Model, View, ControllerのViewのみしか扱えないことを宿命づけられた言語である。実際PHPのみで動いているWebサービスというのはほとんどなく、実際にはMySQLをはじめ、PHPのためのバックエンドプログラムが山のようにあり、PHPはそれを呼び出しているに過ぎない。

なぜPHPヘビーユーザーのDHHがPHP on RailsではなくRuby on Railsを作ったかといえば、それに尽きると思う。

総論

PHPを一言で言うと、「使えても作れない」言語だということになる。PHPのためにお膳立てした環境を使う事はできても、その環境をお膳立てしてあげるにはPHP以上のものが必ず必要になってくる。

そのことは別に悪くない。というより、他の言語がViewをあまりにおろそかにしてきたというのは事実だろう。HTML書きたちを、プログラマーたちが「下に見ていた」ということは否定できない。そのHTML書きたちの、「私たちにも少しはプログラムさせてよ」という声に他の言語屋たちが耳を充分傾けてこなかったことこそ、猛省すべき課題だろう。

しかし、PHPではプログラマーがプログラムを続けるための一番のご褒美がほとんどない。それは何かというと「新しい技を覚える」という喜びである。「新しい呪文」ではない。それならいくらでもある。しかし新しい呪文を覚えた所で、心理報酬は大したことがない。単に知識が増えただけだ。PHPを使っても、知識は増えても知恵が増える気がちっともしないのである。

それでも、

Matzにっき(2007-05-10)
「PHPは言語としてはダメだが、どこにでもあるし、知見も蓄積されていることがキラーだ」 という話。納得できる。

という意見はある。しかし、その知見もよくみれば単なる知識の断片の寄せ集めばかりで、それらを覚えても脳の空き容量が減る気しかしないのはなぜだろう。

ましてや、今やWebページ生成言語は、PHPだけではないのだ。Webページにコードを埋め込むというのは、大抵のLLには出来るし(HaskellすらHaskell Server Pageというのがある)、それゆえPHPの手軽さも今や他の言語を知っている人がわざわざPHPに乗り換えるほどの魅力にあまりに乏しい。

ましてや、最近はAjaxの台頭で、かつてはサーバー側にやらせていたViewを、ブラウザー側にやらせる機会が増えてきた。PHPが「どこにでもある」かどうかは疑念の余地があるが、JavaScriptがどこにもあるのは疑念の余地がない。そして幸いなことに、JavaScriptは「新しい技を覚える」という喜びを味わえる言語でもある。そのことに皆が気づくのにだいぶ時間はかかったが、今ではみんな知っている。車輪の再発明があまりに多いのは頭痛の種だが、それでも車輪を再発明できるというのは、プログラマーの成長にとっては欠かせない特徴なのだ。

PHPにおいては、PHP「環境」に用意された車輪を使い続けるしかない。

だから、PHPに対して正しいスタンスは、「使うにとどめる」というものだと思う。「作る」までやりたかったら、他をあたるべきだろう。

Dan the Programmer