レポート

PHPの生みの親,ラスマス・ラードフ氏インタビュー

この記事を読むのに必要な時間:およそ 15.5 分

プログラミングは楽しくない?

―――― なるほど。次の質問よろしいですか。昨夜もお聞きしたことなので申し訳ないんですが,そのときのお話がとても興味深かったので,読者に共有するためにもう一度聞かせてください。ラスマスさんはよく「プログラミングはあまり好きではない」と仰いますが,傍目にはとてもそうは思えません。本当にお嫌いなんですか?

ラスマス:私にとって,プログラミングとは飛行機に乗るのと同じようなものです。私は旅行が趣味なんですが,飛行機は嫌いでね。頭痛がするし,鉄の筒に大勢の他人とぎゅう詰めになって座っていなければいけないし。空気は悪いし,エアコンは寒すぎるか暑すぎるかで。

―――― すこしも楽しくない,と。

ラスマス:そう。シートは座り心地が悪いし,機内食はたいていまずいし,サンフランシスコから東京までだと10時間か11時間はその状態で過ごさなければならない。どうやったらあれが楽しいと思えるのか分かりません。まあ確かに,飛行機に乗るのが好きという変わった人たちもいるのは確かですね。私もよその土地に行くこと自体は好きなんです。東京に着いて飛行機を降りてからは楽しかった。いろいろと興味を引かれましたし,東京は面白いし,たくさんの人に会えて話せる。

私はそれが好きで旅行するんです。飛行機に乗るためじゃありません。飛行機はいわば必要悪というやつで,サンフランシスコから東京に行きたければ乗るしかない。他の手段は現実的な選択肢とはいえないので。私にとって,プログラミングとはそういうものです。

―――― 必要悪ですか。

ラスマス:必要悪であり道具です。問題を解決するための道具にすぎません。私はただ問題を解決したいだけなんです。問題を解決して,その結果どうなったか,自分が作ったもので人々の生活がどう変わったかを見届けること,それが目的なんです。どういうアプローチを取るか,どの言語,どのアルゴリズムを使うかです。

問題をタイムリーに,手遅れにならないうちに解決できるなら,そのためにgotoを使うかwhileループを使うかはまったくどうでもいいことです。私は一つの問題に6年もかけてはいられません。今なんとかできる可能性があるのに,みすみす人々を6年間も問題を抱えたままにするわけにはいきません。大切なのは,きちんと用を果たし,スケーリング可能で,それなりにセキュアで,その他もろもろの条件を満たした解決を早く送り出すことです。

そのために必要なプロセスの部分は,正直楽しくはありません。そもそもPHPが存在するのは,それを全部Cでやろうとするのがあまりに苦痛すぎたからなんです。Cはわずらわしい。メモリ管理やらストリング操作やら,難点が山ほどあります。しかも非常にミスを犯しやすい。それでも,システムレベルで充分に速く動くものを書きたければ必要になるものではあります。何か再利用可能なコンポーネントをCで書く必要があるとき,PHPはCのコードの上にかぶせる一種のテンプレートシステムとして,書いたコードをすべて再利用できるようにすることで,問題解決を容易にする役割を果たします。つまり,私がPHPを書いたのは,四六時中Cで書くのがいやだったからなんです。

だからといってPHPで書くのが好きだというわけでもないんですが。ただ……Cよりは苦痛が軽いというか,ましな飛行機なんですね。とはいえ,飛行機であることには変わらないし,座り心地はやっぱり悪いのです。もしPHPよりましなものが出てきたら,たぶんそっちを使うでしょう。しかし今のところ,他のツールはみな,色違いの飛行機のようなものです。これは椅子がちょっとだけいい,こっちは機内食が多少まし,という程度で,どれも私の苦痛を根本的になくしてくれるものではない。だからプログラミングには使いません。

プログラミングは疲れる作業です。頭を酷使するし,テストはしないといけないし。問題を解決する方法を見つけてうれしいのは初めの10%ぐらいで,あとの90%はただ,すべてのエッジケースを考慮したか確かめて,ドキュメントを作って,製品として公開できるように準備するだけの,ひたすら退屈な作業です。同じように思っている人は他にもいるんじゃないでしょうか,表立って認めてはいないだけで。

みんな自分はプログラマーだ,プログラミングが好きだと言いますけど,たぶん本当に好きなのは初めの10%なんだと思います。私もそこは好きなんです。やり方を見つけて,よしこれだ,なるほど見えてきたぞ。このアルゴリズムを使って,こういうアプローチを使えば完璧だ,でも……とか考える部分はね。

―――― 私は残りの90%ばかりやってます。

ラスマス:プログラムを製品として通用する,使えるレベルまで仕上げるための90%ですね。まあ,世の中にはそこが好きという変わった人もいるのでしょうが。私には何が面白いのか想像もつきません。最初の10%なら分かりますがね。もちろん残りの90%もやりますが……。

―――― お嫌いなのに?

ラスマス:やりますよ。好きなのは最初の10%のほうですが,残りの90%はプログラムを頑丈に,世の中に出してもやっていけるようにするために必要な作業ですから。ただ私にとって90%のほうは別に面白くないので,プログラミングは好きではないと言っているわけです。

実は,10%のほうだけしかやらない人もたくさんいるんじゃないかという気がします。GitHubで開始されたプロジェクトの数に比べて,まともにデプロイできるレベルまで完成して終了したプロジェクトの数はあまり多くありません。そこまでたどり着く割合はとても少ない。だからプログラミングが好きな人は,必ずしもプログラムを完成させるのが好きな人とは限らないのかもしれません。

―――― それは非常に面白いですね。

ラスマス:でしょう。

―――― ラスマスさんもプログラミングの全部が嫌いなわけではないというお話は初耳でした。

ラスマス:ええ。最初の10%は好きだし,やっているときはわくわくしますが――残りの90%をやらなかったら,プログラムを作ったとはいえません。

―――― そうですね。

ラスマス:だからやることには意味がある。

―――― たしかに。次の質問にいきましょう。ラスマスさんが特に影響を受けた言語デザイナーというか,エンジニアはいますか?

ラスマス:いいえ。PHPはもちろんCに影響を受けているし,UNIXやJavaの影響も多少ありますが,特定の言語に入れ込んだことはないですね。そのとき勉強していたことやコンパイラ,何かの影響が書くコードに出るようなタイプではないのです。あくまで結果がすべてだと思っているので。私は修正や解決を可能なかぎり短時間で実現するのに,本を読まずに済ませられる方法があるなら,たいていは本を読まずに自力で解決を見つけようとします。それがボトルネックにならないかぎりは。

たとえば,20年前にPHPで初めて作ったループ構造はシークでした。私がやったのは,ファイルをパースしてforループの開始位置を探し,ftellというCの関数を呼び出すことです。ftellはファイルポインターの現在の位置,つまり今ファイルのどのへんにいるのかを返します。ここでは800バイト目からforループが始まるとしましょう。するとftellは800を返すので,それはいったんスタックにプッシュして,パースを続けます。次に探すのはendfor,forループの終了位置です。ポップして条件式をチェックします。最初の式が真で,2番目の式も真だとしましょう。それならまた繰り返さないといけません。そこでfseekを使います。800をスタックからpopしてfseekを呼び出し,ポインタをループの開始位置に戻してパースを続けるわけです。同じコードを何度も何度も読み込み直すことになりますが,実際私はそうしました。ftellとfseekがちょうどハードドライバの役割を果たしたわけです。つまりハードディスクのヘッドはループ先頭の絶対位置をシークします。

―――― そうなりますね。

ラスマス:もし「PHPのループがかなり遅いんだけど」と言われ始めたら,私はまず「君のハードディスクのシークタイムは?」と聞いていたでしょうね(笑)⁠ そして「だったら,このモデルのハードドライブを使えばずっと速くなると思うよ」と答えるしかなかったでしょう。しかしそのうち,もっと良い方法があるはずだと思えてきました。ループの遅さはボトルネックになってきている。ハードディスクの速度に頼らずなんとかする方法を探さないといけない,じゃあ本を読もう,と決心しました。

これを解決するにはすべてをメモリ上に保持する必要があります。物理的にハードディスクのヘッドを動かす代わりに,メモリ内でブランチしなければなりません。しかし,私はまず動かして,どこがボトルネックになるかを見るという方法をよく使います。だから最初の実装はこのftellとfseekによるシークみたいに,すごく醜いものになるときがあります。世界中,どんなコンピュータサイエンスの教師に見せたって,落第点をつけられるでしょう。⁠ばかげている。こんなやり方があるものか。どうしてこんなやり方をしようと思ったんだ?」ってね。PHPはそういう,コンピュータサイエンスの教師にみせたら「どうしてこんなやり方を」と言われそうな,ばかげたソリューションでいっぱいです。

しかし,コンピュータサイエンスの博士号を取るような人からPHPが生まれることはなかったでしょう。ばかげたことをしないだけの知恵があれば,そういうことをしたければ大変な仕事になるとも分かったでしょうから。これこれこういうふうにすれば全部解決できるが,何年もかかるだろう。それなら最初から手を出さないでおこう,とね。私は他に良い方法も思いつかなかったので,とにかく動かして,それでうまくいくか試しました。実際に組み込んで,使ってみて,壊れたらどこで壊れたか,どこをどう直せばいいかを探すのです。結果的に,そういう実際的なアプローチが適したところで使われることになったのだと思います。

PHPはいたるところで使われています。こういうものの書き方をまるで知らない人間が書いたというのは少々奇妙かもしれませんが,他の言語だって,コンピュータサイエンスの専門知識がない人が書いたのがいくらもあるんです。もちろん例外はありますよ。Pythonを作ったグイド・ヴァンロッサムはばりばりのコンピュータサイエンス畑出身ですね。たしかRubyのMatz, まつもとゆきひろもそうだったと思います。しかしPerlの開発者のラリー・ウォールは明らかに違います。彼の専攻は言語学でしたよね。他にも,別にコンピュータサイエンスの博士号を持っているわけでもない人々が書いたツールはたくさんあります。

そういうものにはある程度のプラグマティズムが必要で,そこでまた例の90%の問題に帰着するわけです。誰かが実際的な退屈な作業を引き受けて,それがあらゆるバージョンのLinuxと様々なデータベースの組み合わせで動くようにして,あれやこれやの細かいことをきちんとしなければなりません。しかしコンピュータサイエンスの博士号を持ってる連中なんてのはたいてい,おいしいところだけやりたいのです。ちょっとしたバグ修正以上の手間をかけることなんて考えないんですよ。

―――― つまりラスマスさんにとって,師匠や先生のような存在は特に必要ないということでしょうか。

ラスマス:ええ,まったく。

画像

エンジニアは実用主義

―――― ラスマスさんご自身は何を学んでいたのですか?

ラスマス:私は工学の学位を持っています。ウォータールー大学でシステムデザイン工学の学位を取りました。電気工学の分科で,非常にプラグマティックで目的指向の強い学問です。だからコンピュータサイエンス方面で特に師となるような人はいなかったですね。

―――― そういうプラグマティックな考え方が自分とよく似ているなと感じる人はいますか?

ラスマス:どういう方面で? PHPとか?

―――― たとえばエンジニアではどうでしょう。

ラスマス:そうだなあ……エンジニアは本質的にプラグマティック(実用主義)ですよね。

―――― はい。

ラスマス:たとえば少なくとも,数学の博士号持ちと比べれば。ある意味,彼らはプラグマティズムの対極といえます。だって彼らが純粋数学を何に使うというんですか。数学の応用例がたくさんあるのは私も知っていますが,博士号持ちが純粋数学を何に使うかって,興味深い数学上の証明について論文を書くためでしょう。

私にもそういう数学が必要になったら,彼らが書いた論文を探してきて,それを元に何か実用的なものを作ります。純粋にアカデミックな方面の学問をやっている人々には,そういうときぐらいしか用がないのです。彼らの研究成果はいろいろと参考にさせてもらっていますが,基本的には行き詰まったときに限ります。たとえば,ああこのボトルネックは何とかならないものか。もっと効率のいいソート手法があるはずだ。分散キャッシュやら何やら,もっと良いやり方があるはずだ。そういうときに新しいアルゴリズムなどを探しにいくわけです。

だからそちら方面に研究者がいるのはとてもありがたいと思いますが,師と仰ぐような人はいません。折々に研究成果を使わせてはもらいますが,とりたてて思い入れがあるものはないです。

―――― すこし話が変わりますが,日本の芸術や文化から新しいアイデアや考え方を思いついたことはありますか?

ラスマス:日本の影響を受けたか,ということですか?

―――― はい。文化や思想に何か興味深いものがあって,そこからインスピレーションがひらめいた,とか……。

ラスマス:いえ,特には。日本とはあまり縁がなかったものですから。デンマークとカナダ育ちで米国住まいですし。しばらくブラジルに住んでいたときには,サンパウロに日系ブラジル人がたくさんいて興味深かったですが,あの人たちは全然違うんですよね。だから,まだ日本の文化に影響を受けるほどには日本に長く滞在していない,というところですね。実に魅力的なところだとは思います。東京を歩き回るのはとても楽しい。なんといっても,あらゆるものがこぢんまりと完璧なデザインに収まっている点がクールです。

―――― 異質,という感じでしょうか。

ラスマス:異質だからこそクールなんです。そうですね,シドニーに行ったらバンクーバーのほうが気候がいいなと思うぐらいですが,それに比べると日本はまったくの異国に来たと感じます。誰もが同じ言葉を喋っているし,どこに行っても文化はほとんど違わない。これから飛行機で14時間かけてカナダに帰るというときになると,いつも残念な気分になります。

東京に来るといつも何かしら新しく面白いものがあって,何もかもが奇妙で興味深い。人々が風変わりな格好をしているのも,それはそれで東京らしい。そうそう,建築物もね。商店もレストランも,みんな小さい! アメリカだったら狭すぎて何にも入らないと思われそうな,車一台駐める余地もなさそうな所に,あなたがたは駐車場付きの立派なレストランを一軒建てられる。驚異的ですね。実際東京では,お客が4人も入ったら満員になるような,ランチを出すだけの小さな店を見かけましたよ。

―――― Webテクノロジーの中では何が一番興味深いですか?

ラスマス:そうですね,HTTP/2だと思います。あれは従来のまったくばかげた問題の数々を解決するものです。たとえば,大量の画像やデータを効率的に読み込ませるためには複数のドメインを用意する必要がありました。あるいは画像をひとまとめにして大きなスプライト画像を作り,クライアントサイドでまたバラして表示することになる。元々バラバラだったものなのに。ばかげているでしょう? どうしてそんなことをやっているのか,どうして効率的にやれないのかというと,プロトコルのせいです。今それを直そうとしている人々がいて,というか,直したのがHTTP/2です。

HTTP/2が早く普及してくれることを願っています。nginxはすでに公開バージョンでHTTP/2をサポートしていますね。Apacheもまもなく対応するはずです。エンドユーザーに影響はほとんど及ばないでしょうし,PHPレベルでもおそらく特別な対応をする必要はないはずです。リクエストはこれまでと同じように来るので,同じように返すだけです。クライアントとWebサーバとのやりとりレベルでは多少変わってくるでしょうが,エンドユーザーやPHPユーザーには関係ないですしね。しかし私にとっては,Webに現在起きている変化で最も興味深いものではあります。