今回、取材させていただいたのは( 株) ビート・クラフトの小山哲志さんとヤフー( 株) の荻原一平さん。お二人ともPHPユーザ会でご活躍です。さらに今回は、「 見学」ということで、アシアル( 株) の亀本大地さん、グリー( 株) のエンジニア一井崇さんもご同席。PHPユーザの方々に囲まれて、弾さん危うし?!
(撮影:平野正樹)
プロフィール
弾: まず、ご職業は?
荻原: ヤフー( 株) でWebエンジニアをしていて、Yahoo!ウォレットっていう動画などの有料コンテンツを売ってる仕組みがあるんですけど、そこのフロントエンドを中心に、PHPなどで開発しています。
小山: ビート・クラフトって会社にいるんですが、私の仕事は受託開発なんで、いろんなお客さんから案件がきてPHPやほかの言語で開発してます。
弾: 補足しますと、僕のブログにバナーがいっぱい入っていて、このバナーを集めてくるのはAMNという会社[1] がやっているんですけど、そこの広告を置くエンジンを作ってらっしゃるのが小山さん。
PHPの言語設計
弾: (編集部の用意した)質問リストにはPHPがdisられてるという話題も入っているんですけども、PHPは言語の中でデータ構造持ってるわけじゃないですか。あのarray( )の仕様[2] って何?
小山: ここら(コミュニティなど)の人は結構嫌がってて、パッチ[3] が出たんだけど、( 開発者メーリングリストでは)もう喧々諤々…。
弾: PerlなりRubyなりPythonなりっていう言語がいっぱい出てるわけですよね。PHPはそれ見ながら開発が進んできたはずですよね。
小山哲志氏(撮影:平野正樹)
小山: 見ながらっていうよりも…。でもPerlの影響はもちろんすごくでかいですよね。関山さんのarrayパッチに関するPHP-DEV MLの議論を見てて思ったんですけど、議論は保守的な方向に流れるんですよ。リーダーが1人いるわけじゃなく、みんなでゆるーく合議して決まっていくので、いやだって言う人が3人くらいいると、それで議論が止まっちゃうんですね。
弾: じゃあ審美眼のある人がいないんだ、今。
小山: 昔からそうだったと思いますね。とか言いながら結構ドラスティックな言語仕様の変更とかも入っちゃって、その辺はよくわからない。
弾: (それぞれが)つながってないような印象を受けるんですけども。
小山: 個々のパートによります。すごく互換性を考慮してやってるとこもあるし、でもあるときわけのわかんないのがパーッと入っちゃうのもたまにあるんですよ。まあ外から見てると統制は取れてない。
PHPはDSL?
小飼弾氏(撮影:平野正樹)
弾: やるならたとえばRuby 1.8と1.9とか、あるいはさらにPerl 5と6くらいドラスティックにしてほしいんですよね。Webページ埋め込み型の言語は膨大な需要があるっていうのはPHPが証明したわけじゃないですか。それはほんとすごいことだと思うんですよね。だったら悪い習慣まで新しいユーザに押し付ける必要ねえじゃんと。僕はそれが一番言いたい。
高橋征義さんの2年前のYAPCでやったプレゼン[4] があるんですけども、Babel-17っていう、宇宙人の兵器でかつ言語、これを覚えると頭がよくなるというSFものがあって。ものすごいストーリーをはしょって言うとそうなっちゃうんですけども、高橋さんはRubyistですからRubyがそれなんだというんですが、PHPって、これ言うと怒られるかもしれないけど「逆Babel-17」じゃないかと(笑) 。使うとなんかあほになってくって感じがするんだよね(笑) 。
小山: たぶんね、そういう部分もあると思う。Rubyはまつもとさん[5] の思想なりなんかがきっちり入ってて。
弾: そう、主義を押し付けてるわけで。
小山: アレに慣れるとまつもとさん的なプログラムの考え方を受け入れるんですね、それですごい効率的になるんですけども、たぶんPHPってそれを求めていなくて、悪い言い方をすれば、あほでも使える言語を極めようとしてるんだと思うんですよね。今PHPを使ってる人にとってはあの仕様がすべてなんですよ。それを変えるということは、逆にわかりにくい。たぶん求めるもののレイヤが違うんですよね。
弾: だとしたら、いろいろやりすぎてない?っていうのがもう一つあって、PHPは当初はDomain Specific Language(DSL)だったわけですよね。HTMLに埋め込んだらそれがそのまま動きますってのがPHPの一番のレゾンデトール(存在理由)じゃないですか。DSLって、複雑でないってのも重要な案件としてあると思うんですよ。自分が得意な部分は徹底的にやるけれども、不得意な部分は「私はこれが不得意です」ってわかるようになってたほうがいいと思うんですよ。いい例がRegex。Regular Expression(正規表現) 。これもDSLじゃないですか。PHPだと関数は際限なく増えてく。あれなんとかならないすかねえ。
小山: ならないと思うよ。
弾: それはPerlのuseのほうがいいなあと。どのレイヤで覚えるのかっていうのがあるんですよね。
PHPの「かわいさ」
弾: これはPerlの反省点でもあるんですけど、言語のほうで文法の「へぼ」なところを放置すると、ユーザがやたらバッドノウハウを溜めるじゃないですか。
小山: そういう意味でPHPはプログラム言語としては全然美しくないし、ただ、美しくないプログラム言語でも、そこそこ動いてる。ちゃんとメンテナンス性もあって、その範囲で良いものっていうのはできるんですよ。
弾: 僕はツールとしてのPHPはいいと思うんですよね。設計し直したいけど普及の手間とかっていうのを考えたら、確かに、すごい尾籠な言い方ですけども、PHPはクソだけれども、食いきれないほどのクソではない。
小山: 意外とどじっ子っぽいんですよね。PHPをどんどんやってくと、こいつこんなにヘボいけども、そこがかわいいみたいな、そういう付き合い方になってく。だからPHP嫌いじゃないですよ、全然。PHP好きな人ってそういう人多くて。こう、半分マゾみたいな(笑) 。
弾: にしてはユーザ多いなという印象(笑) 。
小山: うーん、でもプログラマとしての言語の良さと、何も知らない人が食いつくとっつきやすさって別ものかなあって気が…。
弾: 何も知らない人がとっついた後のことなんですよ。たとえば人間が一生のうちプログラムする寿命が3年とか5年とかだったら、それでいいと思うんですよ。でも、10年、20年もし付き合ってくとしたらPHPを使い続けるままでは苦しくねえ?という。
バージョンが上がるに従って、たいてい言語内に言語そのものを賢くするしくみができるじゃないですか。ここの設計をおろそかにしたっていうのが個人としてはすごいRasmus[6] に対してムカついてるところで…。Perlだったらuseのしくみだったり、Rubyはわりと言語のかなりの初期段階から組み込みをやりやすくするっていうの用意しといたし。
小山: RasmusはたぶんPHP 4くらいからもう言語レベルから離れちゃってる…。
弾: ゼンドの手に移ってからごちゃごちゃし出したっていう理解?
小山: Rasmusは言語デザイナのワンオブゼムになったんですね、PHPの。今でもそれはそうですし、ゼンドやそれ以外のコアデベロッパたちが話し合って決めてる。
弾: 隠居が早すぎたのかな(笑) 。
ヤフーのPHP
小山: Rasmusが好きなのはたぶんヤフーで独自のPHPとして配ってるから問題ない。
弾: Rasmus PHPとゼンドPHPってそんなに乖離してるの? 割とヤフーってそういうものを世間にバックポートしてくれる会社っていう定評があるんですけどね、FreeBSDも3から4になるあたりってヤフーからのコミットがすごくて…。
荻原一平氏(撮影:平野正樹)
荻原: PHP 4の時代はかなりパッチがあたっていて、普通のPHPスクリプトをダウンロードしてきてもまずまともに動かない状態だったんですけど。PHP 5になるときに組み込まれてて、今はそんなに違いはないですね。
弾: 一応マージはしてるわけですね。
荻原: 社内での使い方はある程度割り切っていて、コアなレベルの機能の実装は全部Cで書いちゃって。要は高機能なテンプレートエンジンみたいな使い方が強いですね。
弾さんに言っておきたいこと
編: せっかくなので弾さんに、ブログで書かれてること[7] に対してこれだけはちょっと言っておきたいということがあればぜひ。
小山: 明らかにPHPのこの部分よく知らないだろうなっていうことでも、言い切りますよね。それはちょっとなあ…って思うときはままあります(笑) 。
弾: スペシフィック(固有)な部分ていうのは、実は突っ込んでくださいというメッセージなんですけども…。ちょっとインプリシット(暗黙)過ぎたかなあ。
小山: 突っ込んでも反応ないしな(笑) 。
弾: 僕はPHPを他の言語と同じような比較は、PHPの言語の性質からいってできませんよということを言いたいんですよね。
PECL
弾: PECL[8] 関連がコミュニティとして盛り上がっているそうですが、それはなぜ?
荻原: やっぱりPHPって言語の遊ぶ余地が少ないのかなあと。たとえばPerlは言語的にもおもしろいですけど、PHPで遊び心の余地を求めたときに、Cのほうに降りていくしかないのかなあという。実際使ってるとPHP自体の実装については詳しくなりますし、変態なこともできるんでおもしろいかなあっていうのもありますね。
弾: でもやっぱいきなりCというのはねえ。
亀本: それをうまいこと、( 荻原さんに)講師役をやっていただいているんですよ。
優れたエンジニアとは
弾: 優れたエンジニアとして重要なことは何だと思いますか。
荻原: 広い視点をもつとか。PHPだけしか知らないよって言ってDBエンジニアに迷惑かけるのもよくないし、使う人のこと考えられないといけないし、周りをよく知った上で、自分の分野をより深めていくっていうのは必要かなって思いますね。
小山: だいたい一緒ですけど、Webのサービスの特にバックエンドってトレンドがどんどん移り変わっていく。特に最近はいかにDBにアクセスせずにmemcachedみたいなキャッシュをうまく使うかってここ数年でものすごく進歩して、それを使ってすごいシンプルな構成で、ものすごいスケールのサービスとかできるようになってる。そういう技術をキャッチアップして、自分の中に取り込んで使うのって、すごく大事だと思う。
荻原: 使う必要がないものをわざわざ使っちゃったりするのはよくないと思うので、自分で取捨選択できるというか。
小山: 世の中に広がる前ってそういう卵みたいな技術がいっぱいあって、全部を食ってたらそれこそ時間が足りなくなっちゃう。その辺の見極めることはすごく大事だと思います。