Sunからリリースされているスクリプト言語。「合気道」とはまた変わった名前だこと。
特徴は
ということらしい。ざっと見た感じではGroovyとの差別化はできてないように思う。 が、スレッドやストリームの扱いとかは面白そう。
Prototype版PythonことProthonの作者、Mark Hahnが開発した.NET用動的プログラミング言語。 同じ.NET上のPython系言語でも、Pythonに静的型を付けたBooとは逆に、より動的な側面を強調した言語。
(続きは後述)
Javaと比較してPHPを紹介する記事。 しかし、しつこいくらい繰り返しているが「PHPの良さ」はどこにあるのだろうか。
この記事ではこんなことを書いている。
PHP5はJavaと比較して、パフォーマンスの面では圧倒的に遅れをとりました。オブジェクト指向機能についてもPHP5は今ひとつJavaにはおよびません。しかし、PHP最大の利点はパフォーマンスやオブジェクト指向機能ではなく開発生産性の高さです。まずは下記をご覧ください。
本連載で掲載したソースコードの行数
PHP5 Java 5000までの素数をWebブラウザーに表示する 28行 34行 5000までの素数を画面に表示する(バッチ) 28行 32行 データベースへの接続を繰り返す 88行 122行 Singletonパターン 57行 58行 例外処理 122行 97行 合計 323行 343行 上記は本連載で掲載したソースコードについて行数をまとめたものです。いずれも小さなプログラムですが、例外処理を除いてPHP5の方が少ない行数となっています。
こんな短いプログラムで比較するのもどうかと思うのだが、 Rubyで書いたら絶対これより短くなる。 ということは、PHPではなくRubyを使えという話なのか。どうも、そうではなさそうだ。
よくいただく反論は「PHPでもできる」ということであって、 同じくらい良い(動的)言語からPHPを選ぶ理由ではないはずだ。
PHPは決して速くないし、記述力が高いわけでもないし、たくさんの欠点が残っているように見えるが、 あちこちで「そのシステムPHPで書かないの」という質問が出る*1ところをみるとそれなりに使われているようだ。
もっとも、PHP陣営から出てくる数字はmod_phpのインストール数とか、mod_phpのパフォーマンスと(mod_perl抜きの)perl CGIとの比較とか、あんまりフェアでない印象があるが。
あるいは「すでにPHPを覚えているので、いまさら他の言語を覚えたくない」ということなのかもしれない。 その気持ちは理解できる。 もしかすると、よく分からない初心者をイメージ先行で取り込んでしまい、 「いまさら他の言語を覚えたくない」という」意識でロックインしてしまうというのは、 初心者をターゲットにした素晴らしいマーケティング戦略なのかもしれない。
もしそうだとするならば*2、Rubyは絶対にその戦略を取りたくない。 それくらいだったらマイナーなままでいてくれた方がずっと良い。
*1 先日、豆蔵の人もRubyでかいた社内ツールについて「なぜPHPじゃないの」と尋ねられたそうだ。逆に「なぜPHPにしたいの」と問い返したいところだ。
*2 これは仮定の話。「PHPはそういう戦略を取っている」なんて断言してませんからね、念のため
PHP好きって...単にSQLが書けるから???DB屋は嬉しいのかもね
印象は、Windows界の Visual Basic のような話だ、Webアプリ界のPHPって。
はじめまして。某商用サイトで開発責任者をやってます。某商用サイトの現在のデフォルト開発言語は Ruby です。私がそう決めました(笑)。私はSEでもプログラマでもありませんが、割りとすんなり覚えられました(某先生のご指導の賜物ですが)。
こんなに覚え易い上にパワフルな言語が PHPほど普及していないのは何故でしょうね?もったいないです。
たとえばWebアプリケーション開発についてなら、Rubyの場合デフォルトのcgi.rbについて、1.8でのごたごたや1.8.2でのごたごたがあったのは記憶に新しいところですし、あんまり安定してないんじゃないかと思われても不思議ではありません。かといってそれ以外のライブラリについてもこれといってデファクトスタンダードになっているものもありません。
railsなりCGIkitなり(narfでもいいけど)が広く使われるようになってくると、状況は変わってくると思いますが……。
また、mod_rubyかFastCGIのどっちがいいのかがよくわからない、というのも、ちょっとわずらわしいかも。そこは逆に「ロックイン」してほしいように思います。
その辺りのコストも含めて、たとえばPHPでの開発経験があり、それで特に大きな問題が生じていないのであれば、あえてRubyを選択させるだけの優位点が見出しにくいように思うのですが、どうでしょうか?
それについては否定しません > 「あえてRubyを選択させるだけの優位点が見いだしにくい」
ただ、私が考えたいのは、PHPが人気を獲得した過程であって、乗り換えることではないのです。Rubyに固有の問題(cgi.rbとか)があったとしても、じゃあ、たとえばそういう問題がないはずのPythonでなくPHPを選んだことの説明にはならないような気がします。
たとえば、「PHPには優れたアルファユーザがいた」でもなんでもいいのですが、言語の人気獲得についてある程度納得できる説明(仮説でいいんですが)が見たいなあと。
とりあえず紹介記事がヒドいのはおいといて。
>WEBアプリケーション開発についてなら
とありますが、Cに似せておいて(学習が容易)、WEBアプリケーション開発にほぼ特化したことが勝因じゃないでしょうか。
WEBアプリケーション用のそのものズバリの関数が標準でついていることや、RDBMSの利用が他所から何かを持ってこなくても導入できることなど、導入する人が総合的に楽ができるということ。
ところで、サイトの規模が違うというのもあるけれど、PHP(で作られたサイト)はJava(で作られたサイト)より速い印象があるなぁ。
アレ、途中で投稿しちゃった。
Ruby for WebとかRuby for Apache(with MySQLとか)といったパッケージがある感じでしょうか。
PHP は C ライクなスタイルで書けるのが真骨頂じゃないでしょうか? C プログラマにとってはこれは絶大なアドバンテージだと思います。実際1999年辺りに自分がバイト(webアプリの作成)で使った時の選択理由も、Perl は(個人的に)読み辛いと言うのが一番の理由でした。
# mod_php を使うと Perl より速いらしいというのも選択理由でしたが
# これは検証してないので実際どうだったのかわかりません。
とりあえず標準で使えるライブラリがそこそこ充実していたのは便利でした。ただ、使い込んでくといろいろ問題もあって、cgi モードで動かさないと suEXEC の恩恵にあずかれないため、パーミッションを適切に設定できず、マルチユーザー環境においてSQL サーバーへアクセスをセキュアに出来ないとか言語仕様以外の問題も多分にありました。
話を戻しますが、webアプリ(当時は CGI くらいにしか思ってませんでしたが)の作成という事を考えたとき、当時の選択肢として Perl がまずあったわけですが、ベースが C プログラマの自分には可読性の面が辛かったため敬遠しました。Python を検討したかどうかはちょっと記憶があいまいですが検討していたとすると、おそらく日本語が通るかが心配で敬遠したんだと思います。Ruby は当時既に触った事はあったはずなんですが、多分 1.4 未満のバージョンだったと思います。Ruby を選択しなかった理由は思い出せませんが当時は自分はまだ OOP の効果をそれ程意識してなかった事と、web サービス向けの機能で漁った情報に関してはPHP の方がいろいろ見つかってたのではないかと思います。
# 多分 DB 関連の連携機能等を重視してたんじゃないかと、、、
以上ご参考までに、、、
人気獲得については、koomooさんも言ってますが、やっぱり「特化」のせいなんじゃないでしょうか。それが(特化された目的に対する)導入の容易さ、(特化された目的についての)ドキュメントの豊富さにつながり、普及につながったのではないかと。
というか、まつもとさんは、Rubyを何かに特化させてでも普及させたい、という気持ちがありますか?
Yahoo!本家がいろんな選択肢を検討した中からPHPを選んだ、という話が一般に与えた影響が大きい気がしています。Yahoo!の中の人がPHP Conで発表したプレゼン資料には、パフォーマンスではmod_perlの方が上だった、という結果が出てます。
http://public.yahoo.com/~radwin/talks/yahoo-phpcon2002.htm
たかはさん、ちょっと飛躍してませんか。
私が言語の人気獲得に興味があるのは確かですが、その動機は完全
に知的好奇心であって、直ちにRubyに適用するつもりがあるわけで
はありません。
さらに言えば、「特化」が本当に普及に有効かどうかは疑問の余地
があると思います。30年前ならいざ知らず、現代において特定目的
のために言語をゼロから設計することがかならずしも必要ではない
ことは十分知られていると思うのですが。DSLを主張する人々も、
基本的な言語文法や実行モデルは優れたものを選び、ライブラリ
(やマクロ)によってベース言語のカスタマイズするという戦略は認
めているはずですし。
文法はともかく、PHP4の実行モデルは90年代産まれにしては筋が悪
いと思いますし、専用言語であるはずのPHP と同等以上のことは、
RubyなりPythonなりの「汎用言語」でも実現できるはずです。
もし、「特化」が人気獲得に直接有効なのだとすると、「大衆は愚
かである」ということを意味することになりそうで、私としては嬉
しくない結論なのですが。
むしろ、「人気がある目的(たとえばWebアプリケーション作成)に
対応したドキュメントの豊富さが普及に影響を及ぼす」ということ
の方が受け入れやすいですね。
KENNさんのおっしゃるYAHOOの一件の影響度についても、私は疑問
に思ってます。Lisp陣営はLispがYAHOO Storeの実装に用いられた
ことを宣伝していますが、同様の効果があったという話は聞きませ
んし、また、当時はまだ影響力があったと思われるInfoseekが
Pythonを採用していたことがPythonの普及にすごく役立ったかどう
かもよくわかんないですし。
オープンソースを導入するならLAMP(Linux + Apache + MySQL + PHP)という一種の刷り込みというか宣伝があって、その1セットで導入されることが多かったのが普及の理由ではないでしょうか。
例)http://japan.cnet.com/column/watch/story/0,2000050148,20053965,00.htm
http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla%3Aja-JP%3Aofficial&q=LAMP+Linux&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
次に、なぜLAMP構成の言語としてPHPが選択されたかについて考えてみると、先行する同様なセット(比較的低価格で手軽に導入可能なWebサーバ)のWindows NT + SQL*Server + IIS + ASP(HTML埋め込み言語としてVBScriptが利用できる)がLAMP推進者達の念頭にあったように思えます。
ここから、重視されたことは言語としての豊かさではなく、VBScriptと同程度の記述力と、同程度の制約(最低限の記述しかできなければ、学習しなければならないことも最低限で済むという発想だと思われる)だと想像されます。すなわち導入の意思決定は実際にその言語を利用して開発する人間によっては行われないため、むしろ機能の乏しさがアピールしているように感じられます。
PHPは、「Webをやるための初期導入が簡単だった」からではないかと思います。
これは、私個人の経験なので参考にならないかもしれませんが、私はちょうど、PHPが日本語が通るようになったころはじめたライトユーザですが、そのころCGIで主流だったPerlにくらべて、httpのプロトコルやヘッダを理解しなくてもmod_phpさえ組み込めば(RedhatならRPMで一発だった)数行のコードで取り合えず何か表示されました。
それに比べて、Perlはhttpヘッダを(数行のコードですが)書かねばならず、CGIを扱うにはCGIモジュールを読み込む必要がありました。
これをもって、WebをやるならPHPが簡単という図式が私の頭の中で出来上がってしまいました。(事実はともかく)
世間のイメージも、同じようなものではないかと推測しています。
ここらへんが、現在の裾野の広さの原因になるのではないでしょうか。(その裾野の広さが、WebのVBといわれる原因かもしれませんが)
そして、やっとPHPでは最近、MVCの導入や、フレームワークが出始めていますが、これは初期に流行った理由とはもはや、正反対の言語へと進もうとしておりもはや、迷走している状態なのではと思っています。
それでも使われる理由は、まつもとさんがおっしゃるように、「すでにPHPを覚えているので、いまさら他の言語を覚えたくない」ということに他ならないと思います。これは、個人より企業がそう考ているということのように思います。(周りにはPHPやってるけどRubyやPythonのほうが好きという人間たくさんいますし)
PHP を知らず、ruby 使いの自分が Web サイトを構築しないといけなくなったときに、
- PHP は Web サイトでの稼動実績が多く安心感がある。Ruby は事例が見つからず不安だった。
- PHP は Web サイト構築に特化しているため、ドキュメントのほとんどが Web サイト構築に関してだが、
Ruby で Web サイトを構築するための中級レベル以上のドキュメントが ( 少 ) ない。
- PHP はオールインワン・パッケージで統一的なマニュアル ( http://www.php.net/manual/ja/ ) が読める。
しかし Ruby はいろいろとモジュール ( DB 接続や mod_ruby や ) を集めないといけなく、
バージョン管理やマニュアルの書式や場所がばらばら。そのため複数サーバで動かすときにインストールと保守が面倒。
- オブジェクト指向をどうしても理解できないプログラマが世の中に存在する…。
という理由で PHP を覚えてスタートさせました。
PHP なら何か問題が起こっても世の中にこんなに PHP サイトがあるので解決策があるだろう、という安心感が決め手でした。
Ruby 好きなので Web サイト構築選定時に「Web サイト構築専用の ruby ディストリビューション」があればよいと思いました。
# PHP プログラマの現在、個人的に addslashes(), htmlspecialchars(), date(), mail(), mb_*(), fgetcsv(), $_POST/$_GET とか ruby より楽だと思います ( mb_strimwidth() とか )。
「特化」と言うよりも、「軸足の明確さ」ではないかな。
昔、日本では営業にとってパソコンよりもワープロ専用機の方が売りやすかったそうです。末期のワープロ専用機は、いろんな機能があって、「専用機」じゃなかったけど、「Theワープロ」としての軸足は失わなかったから、営業さんには売りやすい機械だったそうです。
いわゆるタグ屋レベルの人に「○○って何に使えるものですか?」と聞かれた時に、「××にいいです」とはっきり言えるというのは大きいのではないかしらん。「もちろん他のことにも使えるから便利」ってのはあると嬉しいと思うけど。
PHP の人気獲得の流れについて.
こんなのはどうですか?
1.Web 上で見かける拡張子を多い順に並べると,
.cgi >> .php >>> .asp , .jsp
(感覚ではこのような順になっている)
2.とりあえずよく見かける CGI から調べてみる.
Perl,C/C++ などで書かれていることを知る.
転がっている掲示板などのソース(Perl)を眺めてみる.
変な記号がたくさんあって難しそうに感じる.
3.CGI の次によく見かける PHP を調べてみる.
転がっている掲示板などのソースを眺めてみる.
HTML に埋め込むだけで簡単そうな上に,
構文は,挫折したか学校でやっただけの C / Java に似ているのですぐに覚えられる.
適当にソースに手を加えてみる.特に問題もなく動作する.
4.PHP で開発していくことにする.
5.ある程度開発を経験後,
PHP で開発すると Java よりソースコードが短くなって生産性が上がる,などと説く.
決め手:拡張子 .php のサイトがたくさんあったこと.
Ruby や Python などと比較検討する前に PHP を使って,それに慣れてしまう.
PHP を使う人の中には Ruby,Python の存在すら知らない人も多いんじゃないですか?
PHPを使い始めた時を思い返してみると、phpMyAdminがあったことが大きいですね。PHPの使い方の勉強になりましたし、SQLの学習にも重宝しました。私的にはキラーアプリだったと思います。ただPHPもphpMyAdminも最近は迷走している感じがします。この傾向は多くの言語やアプリケーションに見られるようですが、やはり「船頭多くて船進まず」になるんでしょうか。PHP+mySQL+phpMyAdminには随分お世話になっただけに残念です。
プログラマーでないWebページ製作者にとってとっつきやすいからというのもあるんじゃないでしょうか。HTMLに埋め込めるし初心者向けの本も多いし。たとえばnl2brなんてベタな関数は、ノンプログラマーな人にはウケがよさそうです。
一つ大事な事を書き忘れてました、、、
arton さんの (2004-12-29 11:20) の指摘にもあるように asp ライクな書き方(<?php 〜 ?>)は重要でした。web 上のサービスを記述する際に、HTML にコードを埋め込めるという点は(使い始めた当時は)オブジェクト指向以上に便利さを感じていたのを思い出しました。PHP に決めた理由の半分はこれだったような気がします。
フリーな実装のある言語で asp ライクな書き方を比較的早期に実現していたのが PHP だったのではないかと思うので、ひょっとするとこの辺りが PHP が流行ったキーポイントなのかも?
あと、Java (Servlet)についても検討したのを思い出したのですが、開発環境が Debian (私物)で、実行環境が FreeBSD (稼働済みのマシン。しかも root 件をもらえない上、JVM 入れてもらう作業をお願いできる状況ではなかった)という状況だったため、設定の問題からあきらめたような覚えが、、、
そんな状況で実行環境はどうしたのかって言うと一般ユーザーで 8080 port 使って Apache + PHP + PostgreSQL を走らせました、、、
いや、、、設定、結構楽なんですよ、、、
ドキュメント・ユーザ・利用例が多い、とにかくとっつきやすい(HTML に数行足せばWeb上で動くものが作れる)、始めに覚えることが少ない(基本がオブジェクト指向ではない事も多分大きい)、と言うあたりで初めてWebシステムを作る人が最初に使い始めて、その後乗り換えるほどのモチベーションを他の言語から受けない、と言うあたりだと思うので、純粋に言語の優劣を語っても個人的にはあまり意味がない気がします。
こうなると、初心者が多いコミュニティは新規初心者が参加(質問)しやすいと言う事も相まって、現在のような広がりを見せているのではないかと。
巧遅(こうち)は拙速(せっそく)に如(し)かず
〔文章軌範(有字集小序)〕
できあがりがいくら立派でも遅いのは、
できがまずくても速いのに及ばない。
三省堂提供「大辞林 第二版」より
昔、NECは他社よりもいち早く自社のパソコンにマイクロソフトの標準BASIC を採用した。
技術者たちは「MSのBASICは機能は豊富であるが、速度に難がある」として反対していたが、その意見を振り切っての採用である。なぜか?
それよりも前、NECはインテルの互換CPUを作ろうと解析をしていたところ、
回路に欠陥があることを発見したので、その改良をして売り出すことになった。
しかしそれはまったく売れなかった。
改良をしたことでインテルのCPUとの互換性がなくなったからである。
仕方なく互換性を保つよう「改悪」したところそのCPUはすんなりと市場にうけいれられ た。
この経験がMS標準BASICの採用にふみきるきっかけになり、90年代半ばまで続いたパソコン市場のトップシェアを築く第一歩となったのである。
ファウラーたんも(「ドメイン特化言語」で)
「(中略)Rubyのほうがなぜ楽しいかなんて、口では絶対表せないよなー」
って言ってますが、これは裏を返せば、
「宣伝文句を旨く言葉に出来ない」
ということだったりするんでしょうね。
キャッチーな売り文句をすらすら並べられるかどうかっていう。
俺がRubyを好きなのは、他の言語でうんざりしてて、
「違うんだよ違うんだよ、俺がやりたいのはそーじゃないんだよ」とか思ってた矢先に、
それを(割と)満たしてくれる言語に出会ったからだったりします。
で、逆にいえば、
「自分が(プログラミングにおいて)やりたいこと」を特に持っていなかったり、
そもそも言語1年生で、言語に(思考を)規定されるのはコレカラだ、
という人とかは、rubyを選ぶチャンスは少ないのかも。
捨てるのが面倒だ、ってのは
結構困った問題だったりしますね。
最初PHPなりVBなりに触れても、
その後「飽きた」らそれを速やかに捨てて
もっといいものに移行する…のが
スムーズにやれればいいんですが、
プログラム言語って、色々な意味で移行が大変だから…
皆さんのご意見に付け足して少し。
PHPの普及は、いわゆる「インターネット」の普及と軌を一にしてきたところがあると思います。
Xoops、osCommerce、phpBBなど、PHPで書かれたオープンソースな「Webアプリ」が多く公開されたのもWebアプリケーション開発におけるPHPという言語のプレゼンスを強化するのに役だったのではないでしょうか。