2008年2月1日金曜日

PHPに関して再考

最近、MatzさんやDanさんのBlogをはじめ、PHPに対する議論が盛り上がっている。
一部、一番最初のMatzさんの論旨とは違う方向へそれていっているものもあるようだが。。。

わたしもPHPがPHP/FIと呼ばれていた時代から使っていて、いち早く顧客の案件で使用していたりした人間である。また、Webアプリの最初はPerlだったが、Perlに付いていけず挫折した人間でもある。その反動でRubyは早くから飛びついており、Ver1.6以前からのユーザでよくバックエンドのバッヂ処理等にRubyを使ったりした。Pythonは今のわたしのメイン言語であるが、使い始めたのはRubyと同じころで、一時、仕事の都合でJavaやPHPがメインであったが、再び、メイン言語として返り咲いたと言う形である。

そのほか、最近の密かな関数型言語の盛り上がりに煽られたわけではないが、Haskell、Scheme等もかじったりしている。そういったいろんな言語に食指を出す人間にとってみると、今回の特にPHP派の反論の中にはいただけない反論もあると思う。特に、PHPしか知らないと言う人に限ってPHPマンセーでそれを信じて疑わず、PHPの欠点に付いて語ると、PHPの使いやすさ(と言うか入り込みやすさ)や、こんな便利な機能(実は外部ライブラリ)が簡単に使える系とか、普及度とか、場合によってはSIerの案件として需要があるだのという、方向のそれた反論をしてくる。あくまで本来は純粋にその言語のもつ機能(?)や能力の問題に関して良い点、悪い点を語っているのに、反論がなんか、言語としての問題とそれた形で語られるのが不思議である。

というのも、わたしが現在関係している会社も、PHPマンセーの会社なのである。
うちには受託をやるソリューションと言う部門と、自社開発サービスを立ち上げていく独立部門のふたつがあって、わたしは自社開発サービス部門に属している。もともとわたしが入る前からPHPマンセーな会社立ったらしいのだが(と言うがそれ以外知らない?)、わたしが入って開発責任者になってから、わたしは自社サービスにPythonを採り入れたのである。既にわたしが入ったときに作られていたそのサービスはPHPでつくられており、それが拡張限界になって作り替えと言う事態になって、そこでわたしがPythonで作り替えようと提案したのである。拡張限界になったのはいろいろな要因があるのだが、まずはパフォーマンスやスケーラビリティーの問題、それと、拡張しづらいスパゲッティー化とか諸々の問題があった。その全てがPHPの問題であったとはいわないが、例えばPHPを何も考えないで使ったときに起こりがちな、名前空間の汚染問題やそれに伴う変数や関数・クラス名の難解化とかとか、うまく複数の開発者をコントロールできないと解決しずらい問題が含まれていた。PythonとかRubyはネイティブの機能としてそういった問題を解決してくれる。普通の開発者が普通に作っても、そういった問題から普通に逃れることができる、そういった要素があることを私は経験上わかっていたからだ。

あとは、高階関数とかクロージャとか無名関数がないだとか、より複雑になりがちなことをシンプルに記述できる手法が使えないというのもあるな。まあ、これはいろいろな所で書かれていることではあるけど。個人的には今回の長いプロジェクトでこれらがないとプログラムを各のが嫌になると言うくらいになってきていて、それがいっそう、もうPHPには触りたくないな、と言う感覚になってきているのだ。

そのプロジェクトがいろいろな経緯があり収束して、今後のわたしの仕事として、その今の会社のソリューション(受託)の仕事を手伝わなければならないことになってきて、PHPを使わざるを得ない状態になってしまってきているのだ。しようがなく、A言語のあの機能はPHPではできるのだろうか?とか、具体的には無名関数ってPHPでできたっけ?とか、クロージャは?とか調べていくうちに、それができないとわかってかなり絶望した。実際にはZendのソースに拡張を入れてそういった機能を実現しようとしている人もいるらしいが、それって言語のネイティブな機能じゃないよね。というか、それを使ってくださいとお客にいうわけにも行かないし。。そういった所にジャストタイミングでちまたのWebでMatzさん筆頭にPHPの話が盛り上がってきたのだ。

思うに、MatzさんやDanさん等の言っていることは、私のように複数言語の経験があり、しかもお客の受託を受ける仕事をやっていて、その実現手段(OS,プラットフォーム、言語)を選ぶことのできない人たちにとって、ずっとずっと前からフツーにブツブツ言われてきた問題、感覚で、当たり前の考えだと思っている。それが、現実に影響力のある人から発言があったということで、まえまえから「ある特定」な人たちには常識であった思う。みんな、半分諦めながら、不満とフラストレーションを抱きながらPHPをつかっていたんだと思うし、それは私もよくわかるのだ。

そうなると、やっぱりPHPを極めよう(書いてて恥ずかしいが。。)とか、言う気持ちはまったくなく、そこから新しい概念を学ぶと言うことも期待できず、50年以上のプログラミング言語の進歩の恩恵を感じることもなく、ただ淡々とPHPを道具として仕事をこなすと言うことになる。はやくおわらねーかな、このぷろじぇくと、ってかんじになる。てか、もともとPHPにそういう効果を求めてる人って多くないだろう。PEARとか外部ライブラリとかで誰かが機能を付加してくれるのを期待して、その情報をいち早くキャッチして、早く使ったもの勝ちと言う。単純にそういったサイクルなのではないか、言語というより、そういった外部ライブラリによって以下に便利な機能が簡単に追加されるかってことの方が大切なようである。そういった人にとってSchemeがなぜいいのか理解することは永遠に期待できないであろうという、軽い断絶感覚を感じる。(ライブラリがあった方が便利なのは否定しないのであしからず)

話は飛ぶが、PHP見たいな言語を使うにはIDEが必須であろう。
もちろんエディタでもかけるのだが、あのうんざりするほど長ったらしい、統一性のない関数名を補完してくれる機能が必要だから。順番に統一性のない引数の順番を補完してくれる機能が必要だから。あの中途半端なクラスを一々作らないと物事が進まないんで、テンプレート挿入機能も必要だろう。なぜなら、別にそれを暗記する気持ちは「まったく」ないんで。ただ、早くこの面白くないプロジェクトを終わらせたいだけだから。こういったのは、昔のVBも同じような気がする。

久しぶりに受託の方に戻ってみたら、彼らのブームはPHP5化+ZendFramework+HogeHogeと言うある会社の作ったテンプレートエンジンだそうだ。ライセンスがいるみたい。一般の営業まで中身もしらないのに得意気に、セールストークで言ってるみたい。軽くこの会社に絶望感を覚える。しようがないんで、会社にあったZendFrameworkの本を15分くらい読む。Strutsとか使っていたひとなら簡単に理解できるであろう。15分位で大体内容は把握できてしまった。もちろん詳細まで暗記はしていない。もともと覚える気はないから。確かに便利である。しかしすべてがnew Zend_HogeHoge()というセンス無い名前で始めるというのがダサダサだな。全くあたらしものに触れる充実感や感激といったものがまったく無い。

いっぽうで顧客の指定のないものに関して、どれで開発しようかなと迷っている。
Pythonっていうと、おそらくメンテできないと言う理由で拒否されるだろう。
Rubyも同じだろう(というか、今のバブル状態でRubyに関心ないのもなー)
私が期待してるのはJavaScriptである。サーバサイドの。
AptanaがJaxerを出したばかりである。まだ、Linux版が無いので本格的にためしようがないが、今日見たらソースはあったのでLinuxでMakeできるだろうか?
ちょっと簡単にはいかないかもしれない。
良くあるJavaServer環境にRhinoを入れたものとは違い、mod_jaxcerと言うネイティブモジュールでApacheに入るらしく、付きまとうJavaくささもなく好感である。
JavaScriptならメンテする人がいないとは言わないだろう、と期待しているのだ。
あとは安定性の問題を証明できれば。。
言語自体は楽しいのはもう間違いない。

であるが、現実にはPHPを使わざるを得ないだろう。
これが自営の受託の悲しい性だ。
せめてIDEを使って楽しよう。。
そう思いながらサーバサイドJavaScriptが追い付いてくれるのを期待すう日々になるのか。。

0 件のコメント: