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

2015年12月に無事公開されたPHP7。その公開に先立ってPHPの生みの親であるラスマス・ラードフ氏に話を伺う機会がありました。英語で行われた一時間のインタビューは長大ですがラスマス氏の思想がよく分かる話題が多く、可能な限りそのままの形でお伝えすべく、その模様すべてをお届けします。

なお、インタビューは10月に開催されたPHPカンファレンス2015の講演終了後に行われ、リリースに関する話題などはその時点でのものです。

画像

現在の仕事と生い立ち

―――― まずは、PHPを作ってくださってありがとうございます。今日の基調講演もすばらしかったです。

ラスマス:ありがとうございます。

―――― いきなりですが、個人的な質問から始めてもいいでしょうか。

ラスマス:どうぞ。

―――― Etsyではどのようなお仕事をなさっているんですか?

ラスマス:きっとたくさんの人が疑問に思っているんでしょうね。当のEtsyの社員でさえ、たまに分からなくなりますからね。私は基本的に社内をうろうろして、興味深い課題を見つけてはそこに取り組んでいます。決まった所属というのはありません。根無し草みたいにあちこち漂って、仕事を見つけると猛然と取りかかる、という感じです。たとえば2年前には、社内で使っていたデプロイシステムを改修して完全にアトミック化しました。その前はそうではなかったので様々な問題があったんです。最近はスタティック分析をいじっていて、コードを全部チェックしてPHP7対応にするついでにスタティック分析の問題をいくつか解決もしていますが、基本的には「何か手伝えることがあれば手を貸す人」という立場です。

以前はいろいろやっていたのですが、Etsyのエンジニアリングチームはすっかり腕利き揃いになって、昔なら私しかできなかったようなことも上手にこなすので。私より腕が良くて、PHPの細部まで熟知しているプログラマーが何人もいるんです。トラブルがあるたびに自分一人で奮闘する必要がないというのは良いことですよ。今ではたぶん私よりPHPの内部に詳しいのではないかという者が2人もいますからね。おかげで私は研究や長期的な目標に取り組むことができます。人々への方向性というか……。

―――― 影響力を与える存在ということでしょうか?

ラスマス:そうですね。あと、私がいつもその辺にいて相談に乗るというだけでも開発者たちの支えにはなりますし。それ自体がね――特に若い開発者たちにとっては、PHPについて分からないことがあったら、すぐにIRCで私に聞けるという、その事実自体が楽しいみたいなんですよ。まあようするに、社内のエンジニアリングチームがとても優秀なので、どうしても私がやらなければならない仕事というのは特にないんです。

―――― それはいいですね。のびのびした環境で働けるというのはすばらしい。

ラスマス:ええ。

―――― 次の質問に移りましょう。ラスマスさんはデンマーク生まれでしたね。

ラスマス:はい。

―――― でも育ったのはカナダ、と。

ラスマス:ええ。

―――― 子どもの頃から複数の文化に囲まれてきたのですね。

ラスマス:そうですね、しかも生まれたのはデンマークといってもグリーンランドですから。

―――― なるほど。

ラスマス:ええ、だからね、今でもまだデンマークと呼べるかどうかで議論ができるわけです。私が生まれた当時は完全にデンマーク領でしたが、その後自治権を獲得しましたから。今は保護領という形になっていますが、私が生まれた時点では本国の一部だったんです。だからまあ、私はデンマーク生まれと言えます。パスポート上の出生地はグリーンランドになっているので、いつもすこし混乱するんですが。まあ、どちらでも同じようなものですよ。デンマーク人の両親から生まれたからデンマーク人という見方もできるし。

―――― 興味深いですね。複数の文化をバックグラウンドに持つことは、ご自分の物の考え方に何か影響があったと思いますか?

ラスマス:ええ。グリーンランドは極端に孤立した土地でした。とにかく周りになんにもなかった。がらんとした所に家がぽつんと建っているだけ。隣人を見かけることだってありません。何キロか離れた町にはまあ200人ぐらいはいたんですが、そこまで行く道路もなければ空港もない。夏の間はボートで行くんですが、冬になったらそれも使えない。唯一の移動手段はヘリコプターでした。なにぶん小さい頃の話なので、私が環境自体から受けた影響は大きくないと思いますが、両親はそういう無人の荒野に9年間住もうと思うようなタイプの人間だったわけです。私が学校に通う年齢になるとデンマーク本土に引っ越しました。島暮らしという点では同じでしたが……。

画像

デンマークの学校教育から受けた影響

―――― 環境よりご両親から受けた影響のほうが大きかったと?

ラスマス:うーん、それは確かにあったでしょうが、どちらかというとデンマークの学校教育から受けた影響のほうが大きかったかな。カナダやアメリカのシステムより優れていると思う点があって、まず一学級の人数がずっと少ないんです。それとデンマークでは、国語の教師と数学の教師はふつう男女ペアで、学校に通い始めて10年間はずっとその2人に教わることになります。いわば教育の専門知識を持った両親がもう一組増えるようなものです。子どもがあまり良い家庭環境に恵まれなかったとしても、もう一組の「プロの両親」がセーフティネットの役割を果たします。

私自身が世話になったわけではありませんが、いい仕組みでしたし、それが当たり前だと思って育ったので、カナダに引っ越して驚きました。あまり勉強ができない生徒たちはどんどん取り残されていくんです。他の子たちと同じ方法では学習できない生徒をどう指導したらいいか、教師たちは分かっていなかった。私はたまたま数学や科学やテクノロジー関係が得意だったから高く評価してもらえましたが――そういえばデンマークに住んでいたころ、モノを修理するのがすごくうまい少年がいました。その子は自動車整備士になって、いまでも優秀な整備士として働いています。そういう仕事の需要は絶えません。私もときどき車を修理に出しますが、他の国の学校教育システムだったら、彼がその道に進むことはなかっただろうと思います。科学と数学ができない子どもはどこにも行き場がないのです。しかしデンマークの教育は……必ずとはいえませんが、まあたいてい、どんな子どもにもそれなりの進路を見つけてやれます。少なくとも米国式の教育システムほどドロップアウトしていく子は多くはありません。

ですから、私の価値観には多分にデンマークの教育システムが影響していると思います。息子の教育についての考え方もね。息子は今、米国でフランス人学校に通っています。なぜかというと――私の母国語はデンマーク語ですが、デンマークは小さな国で、人口が500万人、いや550万人か、それぐらいしかいません。だからデンマーク人はみんな2~4か国語話せるのが当たり前なんです。ですが、米国で育つとたいていの子は英語しか話しませんし、表現も豊かとはいえない。それで息子には、世の中にはテーブルを表す言葉が少なくとも2つはあるんだということを理解しておいてほしかったのです。

テーブルという概念を表す言葉はたくさんあります。言葉はシンボリックリンクのようなものです。あらゆる事物には概念がハードコーディングされているけれども、それを参照するにはシンボリックリンクを張ってやるだけでいい。テーブルという概念は1つしかありませんが、それを指し示す言葉はいくつもあります。そういうふうに脳が配線されれば、物事の学び方も変わってくるでしょう。そして第二、第三の言語を学ぶのもずっと簡単になるはずです。そういうわけで、うちの息子は小さい頃からフランス人の学校に通っています。今では流暢にパリっ子風のフランス語を話しますよ。米国で生まれ育った子どもにしてはちょっと変わっているでしょうが。

―――― 一つの考え方ではありますね。

ラスマス:それに、妻はカナダの英語圏出身ですがフランス人学校に通ったので、今でもフランス語がけっこう話せるんです。だから息子の勉強は家では妻が手伝っています。私のフランス語はひどいもんでね。でも実際デンマーク語よりは役に立った。どうもEtsyとは関係ないことばかり話しちゃったかな。

Minecraftとプログラミング教育

―――― いえ、それはそれで興味深いです。次の質問よろしいですか。余暇はどんなふうに過ごしているのですか?

ラスマス:うーん、たいていは旅行ですね。それもほとんどはカンファレンスに出るためなんですが。家にいるときはもちろん、なるべく息子と一緒に過ごすようにしています。あとはとにかく読書して、遊んで、新しいテクノロジーの情報を集めています。

―――― 息子さんは今おいくつなんですか?

ラスマス:13です。ええと、13「歳」ですね。何か私が知っているものに興味を持ち始めたら、教えてやるようにしています。たとえば、息子はいまMinecraftに夢中です。今どきの13歳はみんなそうなんでしょうね。あるときMinecraftのプラグインの書き方を知りたがったので、まずJavaの概念から説明しました。本を一冊ひととおり一緒に読んでから、MinecraftプラグインをJavaで書くための解説書をあげましたよ。

―――― PHPじゃなくて?

ラスマス:MinecraftはJavaで書かれてるでしょう。

―――― ええ、ただ「PHPの父」が息子に教える言語としては意外だと思いまして。

ラスマス:いやいや、この場合、目的は子どもにプログラミング言語を教えることじゃないので。あくまで、子どもが興味をもった課題に自分で取り組めるようにするためですから。Minecraftのプラグインを自分で書いてみたいというなら、これを使ってこうやるんだよ、と教えるまでです。もし息子にいきなり「今日はJavaを勉強しよう」と言っていたら、3分で飽きられていたでしょう。でもあのときは、息子のほうからやってきて、Minecraftでこういうことをしたいからプラグインが書けるようになりたい、と言ったんです。私はこう答えました。よし分かった、ここに本がある、必要な知識は全部これに書いてある。これが全部分かるようになったら、プラグインが書けるぞ、と。

―――― 目的ありきですね。

ラスマス:まさしく。子どもに物を教えるときは目的ありきであるべきなんですよ。息子は今、学校のプロジェクトで遠足旅行のWebサイトを作っていて、ほんとはPHPを使ってはいけないらしいんですが、すこし教えてやりました。そのとき息子はやりたいことをどう実現するか、方法を探して悩んでいたんです。ここに表示する情報を、こっちから引っぱってくることができたら、全部のページにいちいち同じコードを書かなくていいのにな、と。それで私はPHPのコンセプトについてすこし話しました。あとは時間の問題です。次に息子が興味を持ったことにPHPがまた役立ちそうなら、そのときは喜んで教えるつもりです。

でも、あえてプログラミングをやれとは勧めないようにしてるんですよ。むしろ、外で遊んだりサッカーをしたり自転車に乗ったり、とにかく戸外で過ごすことを勧めています。あんまり私に似てるんでね。まあ2年も経たないうちに、四六時中コンピュータにかじりつくようになるでしょう。ただ、それまではすこしでも外に出て普通の人間らしい生活を体験させておいてやりたいんですよね。ギークの血は争えないとしても。いずれそうなるのは間違いないので、わざわざそそのかすまでもないんですよ。本当に、ギークになるために生まれてきたような子なので。

―――― 最近はコンピュータ教育のあり方について議論が起きていますよね。プログラミングを義務教育に取り入れるべきだという人もいますが、他にも様々な意見が出ています。ラスマスさんとしてはどう思いますか。プログラミングは義務教育化すべきでしょうか?

ラスマス:そう思います。

―――― 学校で教えるべきだと?

ラスマス:少なくとも概念ぐらいは。プログラミングとは、つきつめれば論理的に思考することです。その論理をどういう構文で記述するかはあまり重要ではない。外国語を習うようなもので、一つの言語しか知らないのでは不自由なだけです。3つか4つ覚えれば、概念を他の言語で言い直すのがぐっと簡単になってくる。いつもそうとは限りませんが、たいていは。たとえばうちの子は学校の授業でRacketを使っていますが、Racketは一種のLispです。それで関数型プログラミングをすこし覚えた。Pythonをかじっていた時期もありましたが、今はJavaです。もちろんMinecraftのためにね。あとMITが開発したScratchというビジュアル言語がありますが、あれにかけてはエキスパートです。6歳ぐらいから使ってましたからね、たいていのものは作れます。

まあ息子の場合はちょっと手を広げすぎかもしれませんが、学校でコンピュータをどこまで教えるかは、生徒それぞれにあわせて変えるべきだと思うんですよ。必修なのは基本概念だけにして、もうすこし詳しく知りたがる子が出てきたときだけ、何を勉強したらいいか教える感じで。こういうのは結局、自力で学ぶものなんです。少なくとも文法はね。もしコンピュータ数学講座みたいなことをやるとしたら、基本的にはアルゴリズムの授業になるでしょう。問題を解く方法ですが、どちらかといえばコンピュータ向けの。

コンピュータが問題を解くのに優れているのは、人間が同じことをやったらずっと時間がかかるからです。たとえばHadoopは非常に興味深い方法でジョブを処理しています。もし誰かがHadoopを使うとこんなことができるんだよ、とさわりを教えてくれたらきっと楽しいでしょう。機械学習のコンセプトもまた面白いものです。そういう高度なコンピュータサイエンスは、教える価値が大変高いと思うのです。もちろん、何かしらプログラミング言語を使った実践も必要ですが、どの言語を選ぶかは人それぞれでいい。PHPであるべきだとは思いません。むしろ、もっと高レベルなもののほうがいいんじゃないかな。PHPは非常に実用主義な言語なので、とりあえず目的を達成するために作られた抜け道がたくさんあるんです。概念やアルゴリズムを記述する手段としては、それは必ずしも良いことではありません。

―――― なるほど。では、たとえば大学生向けの教育と、子ども向けの教育ではどのように内容を変えたらいいと思いますか?

ラスマス:ああ、あくまで子ども向けの話のつもりでした。その場合、必要なのは子どもが興味を持ったときに機会を逃さないことです。ただ観察して、何に興味を抱いたか見て声をかけるんです。⁠君がやりたいのはこういうことかな。それならここにツールがある。言語はここ、ライブラリはここ、フレームワークはここ。必要なものはこのサイトで生成できる」とね。ただ机に座らせて講義するだけでプログラムを教えられるとは思いません。少なくとも小さい子にはね。

―――― あくまでも自発的に学ばせる必要があるわけですね。

ラスマス:そして関心をさらに発展させる必要もあります。うちの子は以前、レゴのマインドストームのロボットをプログラミングして遊んでいました。マインドストームの面白いところは、ビジュアル言語でプログラミングできるけれども、裏では産業用ロボットを動かしているのと同じエンジンを使っているんです。だから私の友人のロボットエンジニアとうちの息子がロボットコントローラの概念について話をしたら、ちゃんとお互いに話が通じるんですよ。

息子が見慣れたGUIの裏には、友人が見慣れたロボットコントローラがあるからです。その友人というのは40代の男で、長年ロボットコントローラを見てきています。だからマインドストームのGUIインターフェイスの裏で実際にどういうコードが動いているか分かるし、マインドストームは実際に産業用に使われている言語をうまく抽象化したものなんです。

限られた機能しかない独自言語を作らなかったという点で、レゴは非常に賢明だったと思います。彼らはただ、フル機能の言語に見映えがよくて使いやすいインターフェイスをかぶせただけなんです。制約があるといえばあるんですが、それにぶつからなくても非常に高度で複雑なことができる。子どもにとっては制約なんてないようなものです。

私が初めてプログラミングを覚えた頃とは大違いですね。コンピュータを手に入れて、電源を入れたら、点滅するカーソルが出てきて、おしまい。文字通り「ベーシックな」BASICインタープリターと、点滅するカーソルがあるだけ。まだWindowsなんてなかった頃です。ほんとに何にも入ってない。ゲームも当然ない。あるのはただ、画面の隅っこでただチカチカ、チカチカ点滅するだけの、得体の知れないカーソルだけです。だからいやおうなしにプログラミングを始めることになる。プログラミング以外にできることがないので。テープドライブでも持っていれば別ですが、あいにく家にはなかった。私が使っていたのはVIC-20でした。いや、その前にちっちゃなTimex Sinclairがあった。

―――― シンクレア 1000⁠?

画像

膝の負傷と初めてのコンピューター

ラスマス:そうです。それが初めてのコンピュータだったので、プログラミングのやり方を覚える以外にすることがありませんでした。それで雑誌に載っているコードをそのとおりに打ちこむ。でもテープドライブも何もないから、保存はできない。だからプログラムを走らせたければその都度入力するしかなかった。

―――― 大変だ。よくコードを打ち込み続ける気になれましたね。

ラスマス:あの点滅するカーソルに、俺をどうにかしてみろって言われてる気がしたので。そもそものきっかけは、サッカーをしていて膝を痛めたことでした。水が溜まっているか何かで、膝を牽引しないといけないと言われました。詳しいことは忘れましたが、とにかく片脚を吊ったまま3週間寝ていなければなりませんでした。

―――― 3週間も……。

ラスマス:やることもなく、ね。それで親が暇つぶしにと借りてきてくれたのが件のちっちゃなTimex Sinclairだったんです。あのカーソルがその場でひたすらチカチカ、チカチカ、チーカチカしてるのを眺めてたら、誰だってこいつをどうにかしてやるって気になりますよ。他にすることもなかったしね。それで、その点滅カーソルをどうしたら動かせるのか、試行錯誤し始めたんです。今にして思えば、それが出発点でした。

―――― 日本では当時、子どもがコンピュータに触れる最大の動機はゲームでした。

ラスマス:でしょうね。

―――― そう、ひたすらゲームやりたさで。

ラスマス:時代はずいぶん変わりました。今ではコンピュータを買うと、最初からなんでも入っていて、複雑すぎて子どもにはとても扱いきれない。しかし、当時のやつは、いったん使い方が分かれば、プロとまったく同じコードを書くことができた。とはいえ、命令セットはごく限られていて、メモリも1kしかなかった。たった1kでは、プロのプログラマーにどんなことができるのか分かるはずもありません。

―――― そうですね。

ラスマス:今どきのゲームの中には、エンジニア数百人がかりで3Dエンジンやらレンダリングやらを駆使して作ったものもあります。子どもにとって、プロが作るようなゲームはとうてい自分には作れないと思い知ることほど意欲を損なうものはありません。⁠これなら自分にもできるよ」と言えれば、おおいにやる気が出るのです。今では私にもゲームを書くなんてとても無理ですね、少なくとも市販品と比較できるようなレベルのものは。

10年前なら、Webで動くPHPがその代わりになったかもしれません。Webページのソースはいつだって見られますからね。今ではとてもシンプルとは言えないところまで進化してしまいましたが、10年前のWebはまだ見て分かる程度には単純だった。たとえば子どもがIBMのWebページを見て、これなら僕にもできるよ、と自分のWebページを作り、IBMのやつそっくりに動くようにして、友達に見せびらかすなんてこともできたでしょう。⁠これなら簡単だ、自分にもできる」と思える点で、PHPは子どもにとってBASICに代わるものになったかもしれません。とっつきやすくて、やろうと思えば自力でプロ並みに近いことができる。

JavaScriptは今では複雑になりすぎた。あまりにいろいろなものがありすぎて、12歳や13歳の子どもの手に負えるものではなくなってきています。今でもソースを見られるのはいいことですが、多くの機能が詰めこまれては陳腐化していってしまうので、JavaScriptというものが具体的に何をしているのか理解するのは難しい。

―――― リバースエンジニアリングでもしなくては分かりませんよね……。

ラスマス:ええ、非常に高機能になりすぎて、子どもが手を出せるものがどこにもなくなってきている。

―――― というと。

ラスマス:子どもが見て「これは面白い、僕にもできそうだ」と言えるものです。そういうものを我々は失いつつある。昔はそう、ゲームがその役割を果たしていました。昔のゲームには自分で作れそうだなと思えるものがいくつもありましたからね。コンピュータもまだ単純だったし。しかし、今では複雑になりすぎてしまった。Webも昔は見て真似できそうだと思えるぐらいに単純だった。それも複雑になりすぎてしまった。じゃあ今なら何がいいのか?

―――― Minecraftとか。

ラスマス:Minecraftも……まあそうですね。少なくとも取っかかりにはなる。うちの息子の場合みたいにね。しかし、Javaもときどき難しいところがありますからね。プラグインやら何やらを書こうとすると……。

―――― Sinclairに比べたらそうでしょう。

ラスマス:まあね(笑)しかし、そのうち息子がJVMをクラッシュさせて、⁠パパ、これはどうしてクラッシュするの」と聞きにくるときが来るでしょう。私の返事はきっとこうです。⁠うーん、すぐには分からないな。おまえが書いたコードには問題ないようだが、これでどうしてJVMがクラッシュするのかは調べてみないと⁠⁠。まあ2日もあればJVMが機嫌を損ねた理由を突きとめられるでしょうが、大人でもすぐに分からない問題だと気づいた時点で息子はやる気をなくしてしまうでしょう。これは自分の手には負えそうもないというメッセージを受け取ってしまうからです。

だから今は、子どもの教育に使えるような「次の何か」が待望されているところだと思います。たとえば――バーチャルリアリティなんかはまだまだ始まったばかりの分野ですよね。もしかしたらそのへんに、子どもが自分の環境を簡単に作れるようなツールがあるかもしれない。あれでどんなことができるのか良く知らないので、断言はできませんが。

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

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

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

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

ラスマス:そう。シートは座り心地が悪いし、機内食はたいていまずいし、サンフランシスコから東京までだと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に現在起きている変化で最も興味深いものではあります。

PHP7で自分の書いたコードが全部動かなくなるということにはならない

―――― なるほど、ありがとうございます。基調講演ではPHP7について話していただきました。私たち開発者が注目すべき点はたくさんあると思いますが、最も重要な点を一つ挙げるとすれば?

ラスマス:PHP5や6、あるいは5.5や5.6から7への移行は大きな作業ではありません。たぶんPHP5.2から5.3になったときのほうが違いは大きかったですよ。

―――― 確かに。

ラスマス:しかし、新しいメジャーバージョンだけに皆さん不安なのでしょう。自分の書いたコードが全部動かなくなるのではないか、修正に大変な手間がかかるのではないか、と。ですが、そういうことにはなりません。皆さんに理解してほしい一番重要な点を一つ挙げるとすれば、PHPで書かれたコードにとっては、どちらかというとマイナーアップグレードだということです。

まあ、そのコードが相当古くてPHP4準拠だったりしたらさすがに問題ですが、だとしたらPHP5に移行する時点でとっくに支障が出ているでしょう。その場合、問題はPHP7には関係ありません。いまだにPHP4に依存しているという事実が原因です。それなりにモダンなPHP5コードで、拡張モジュールも使っていないなら、アップグレードは楽々です。基調講演で質問された人のように、独自の拡張モジュールを使っていれば、たしかにそれを書き直す作業は必要になりますね。しかしそういうケースはごくわずかでしょう。独自の拡張モジュールを使っているところはほとんどありません。

―――― ええ、ありがたいことに。ラスマスさんが以前におっしゃったことの中で、個人的に感銘を受けた言葉があるんです。⁠いま私たちが知っているPHPは、私が開発したのではありません。100人と言わずとも、何十人もが開発してきたものです。私は最初のPHP開発者にすぎません」

ラスマス:ああ。

―――― 合ってます?

ラスマス:言いました、言いました。

―――― とても感銘を受けました。

ラスマス:でも事実ですよ。PHPに私が書いたコードが何行残っているか数えてみれば、私がもう主要なコントリビューターでないことは明らかです。私が書いたままのコードは年々減ってきています。いつかはゼロになればいいなと思います。そのうち、そういう日も来るでしょう。もちろんバグ修正はたくさんしましたが、バグ修正はコードを書いたうちに入りません。

―――― まるで引退しようとしているようにも聞こえますが……。

ラスマス:そうですね、いずれはこの仕事から身を引くつもりです。私より腕が良くて、若くて、情熱もあって、もっと時間を持てあましている人々がいますからね。私も22歳で独身だった頃なら、一日に16時間、18時間もひたすら仕事に打ち込めたでしょう。実際私がPHPのコードを書き上げたのも22歳のときでした。今はもう22歳の若手が何人も出てきました。たとえばニキータ・ポポフとか……いや、彼はもっと若いか。しかし必要なのは熱意ですから。そういう、私よりずっと優れた頭脳と多くの時間を注ぎ込める人々がいるわけです。

だからあちこち出かけていって、PHP開発に若い開発者たちをもっと呼び込めたらいいなと思います。私には息子と家庭があります。仕事の心配もしなければなりません。プログラミング以外にやらねばならないことがたくさんあります。それでPHP開発の主要な部分からは身を引いているのです。実際、今は主要な部分にはもう関わっていません。それ以外の部分でもいずれ後進に道を譲れればと思っています。

―――― そういうことが起きているのはPHPだけでしょうか、それとも……。

ラスマス:他ではあまりないことかもしれませんね。大きなオープンプロジェクトのほとんどには、誰かしら非常に熱心な中心人物がいて、その人が大半のコードを書いているものです。とはいえ、リーナス・トーバルズはもうそれほどコードを書いてはいませんね。最近ではおおむね、調整役を務めたり、パッチが悪影響を及ぼさないようにチェックしたりといった、すべてがスムーズに動くようにするのが役割のようです。グイド・ヴァンロッサムや他の人については、今どれぐらい実際にコーディングをやっているのかは知りませんが。グイドはまだ結構やっていそうだな。しかし、まあ、早々に大部分を他人に任せてしまったという点で、私は珍しいほうかもしれません。

―――― 世代交代はコミュニティの活動レベルを保つことにもつながりますね。PHPコミュニティは非常にうまく機能していると思います。

ラスマス:まったくです。

―――― 保守はされていないが、持続可能ではある、というか……。

画像

PHPは垂直方向に見れば整合性がある

ラスマス:たぶん、そうなるのが必然だったのでしょう。PHPは一人で保守するには大きくなりすぎました。もし私がコントロールを維持するために、パッチはすべて自分を通さないと出せないようにしていたら、とうていやっていけなかったでしょう。そもそも私は面倒くさがり屋ですし、PHPはサポートする範囲が広すぎます。私は20種類ものデータベースをそれぞれ熟知しているわけではありませんから。たとえば、Oracleのエンジニアがパッチをサブミットして、Oracleの何とかかんとかのために、これを変更したいと言ったとします。それをどうすべきか私には判断できません。適用したほうがいいかもしれないが、そうでないかもしれない。Oracleのエンジニアは修正する必要があると言っている。PHPの多くの部分は、何人もが日夜取り組んで作りあげたものです。

私が一人で作るよりずっとよくできているコンポーネントにあれこれ手出しをしてボトルネックを作るのは、合理的だとは思いません。PHPとは実のところ、個別に開発されたパーツの寄せ集めなのです。整合性がないように見えるのは、それぞれ独立したチームが開発しているからで、Oracleに関することはOracleエンジニアたちがやっているのです。MySQL拡張モジュールはMySQLの人々が作りました。必ずしも互いに話し合う必要はないのです。たとえば、PHPにはPDOがありますが、これはあまり優れた抽象化レイヤではありません。多少の抽象化は試みましたが、本気でOracleやMySQLを使いたい人はMySQLiやOCIなどのネイティブインターフェイスを使うでしょう。どちらもそのデータベースを熟知して毎日使っている人々が書いたものです。だから整合性はなくても、どのモジュールもそれぞれ非常によくできているのです。

モジュール間での共通性には欠けるかもしれませんが、OCI拡張モジュールもMySQL拡張モジュールも、下で動いているC APIにほぼ1対1で対応している点において整合性があるといえます。MySQLドキュメントのC APIに関する部分を見てみれば、PHP開発者にとってはなじみ深く感じられるはずです。どの低レベル関数もPHP側の何かと対応しているからです。だからPHPは垂直方向に見れば整合性はあるのですが、多くの人から始終「PHPはまったく整合性がない」と言われます。整合性は確かにあるのです。ただ、人々が思っているような水平方向にはないというだけです。垂直方向に見れば、完璧な整合性があります。

―――― それはすごい。

ラスマス:たとえば文字列関数。UNIXコマンドラインでmanしてstrchrの項を見てみると、UNIXとCとではstrchr関数の引数の順序も書式もまったく同一なことが分かります。どちらも同じライブラリをベースにしているのですね。水平方向に見れば両者に整合性はありませんが――おそらくあのライブラリ群を作った人たちは互いにあまり話し合わなかったのでしょう。

私たちがPHPの整合性のなさを直さないと言ってよく非難する人がいますが、PHPはそもそもそれが問題になるようなものではないのです。PHPは結局、ライブラリやその他基盤となっているテクノロジーへのショートカットにすぎません。それなのに、どうして誰もがPHPレベルでの整合性を求めるのか、私には分かりません。整合性をとるのはフレームワークの役割です。フレームワークは問題を解決するための全体的なアプローチを定める場所ですから。PHPはその下のレベルにあって、ただ低レベルにあるライブラリとか関数とかへのアクセスを提供するだけの存在です。こう言っても多くの人は同意してくれないんですが、PHPはそういうふうに開発されたものですから。

PHPはハンマーのような単純な道具

―――― PHPにとって、この20年で最も印象的だったことは何でしょう?

ラスマス:最も印象深かったのは、人々がPHPでプロジェクトを作り始めたことだと思います。PHPはツールです。ハンマーのようなものです。何の変哲もない道具だけれど、それを使って作られたものは人々の暮らしを変えてきました。昨夜も話しましたが、スリランカのプロジェクトでSahanaという災害時情報共有システムがあります。そういうインフラが被災地に整っていない場合でも、このパッケージをロールアウトすることで、外国からの支援、救援活動拠点、シェルター、その他もろもろを管理する即席インフラを展開することができます。実際、これで多くの人命が救われました。Sahanaのようなプロジェクトが生まれたのはとても感慨深いことです。もっと大規模な、たとえばFacebook、Yahoo!、Wikipediaなど私たちの生活を確実に変えたものも、みんなPHPで書かれたのです。少なくとも最初はね。

ですから私にとって最も印象的だったのは、自分が作ったそのツール、そのハンマーが、結果的に社会を世界規模で造り替えることになったという事実です。これ以上印象深いことがあるでしょうか。社会を造り替えたのはハンマーを作った男ではなく、それでものを作った人々です。ハンマーを使った人々です。

私を称賛するのはダ・ヴィンチの絵筆を作った職人をほめたたえるようなものです。それが誰だったかなんて誰も知りませんし、知ろうとも思わないでしょう。しょせんは絵筆です。知るべきは、それで絵を描いたのがどういう人物だったかです。その絵こそが世界を変えたんですから。だから私に感想を聞くというのは、ダ・ヴィンチの絵筆を作った職人にインタビューするようなものです。私は絵筆を作りました。それをダ・ヴィンチに渡しました。ダ・ヴィンチはすばらしい絵を描きました。どうして私に話を聞きたがるんですか?と。

―――― 偉大なのはダ・ヴィンチのほうだ、ということですか。

ラスマス:ええ。だって事実ですよ。ハンマーはハンマーです。別に面白くはない。面白いところなんてなんにもない。だから、世界を変えたことについてどう思いますか、などと聞かれるとどうにも困ってしまいます。いったい何の話だろう、あれが世界を変えたわけじゃないのに、あれはただのハンマーなのに、と。

―――― そのハンマーはよく売れましたよね。今では80%の人が使っているわけで。

ラスマス:そもそも単純な道具ですからね。どこをどうやっても失敗しようがない。たまたま一番大きいハンマーだったというのはあるかもしれませんが……。

―――― いずれにせよハンマーは必要だったわけですよね。しかし結果的にインターネットの8割、9割であなたのハンマーが使われている。その人気の秘密は何でしょう?

ラスマス:人々がそれですばらしいものを作ったからでしょう。WordPressとか、Drupalとか、Facebookとかを。

―――― その人たちはなぜPHPというハンマーを選んだのでしょう?

ラスマス:使いやすいからです。始めるのが比較的簡単だから。

―――― それだけですか?

ラスマス:ええ。たとえば、あなたがマーク・ザッカーバーグは非常に優れたプログラマーだと尊敬していたとして、Facebookが世界的なアプリになったのは彼が世界最高のプログラマーだからだと思いますか? 思わないでしょう。おそらく本人に聞いても同じ答えが返ってくるのではないでしょうか。面識がないので断言はできませんが、マーク自身、自分を特に優秀なプログラマーだとは考えていないと思います。むしろ、市場を見つけて人や物を動かすビジネスの才能のほうに自覚があるのではないでしょうか。成功するビジネスを築く鍵は、優れたアイデアをタイミング良く思いつくこと、多くの幸運に恵まれること、そして自分が扱える道具があることです。コンピュータサイエンスの博士号を持っているかどうかは関係ありません。

優れたアイデアを思いついた人は、それを実現するツールを探し、世界に送り出そうとします。たいていの場合、そのためにはPHPが最も近道です。こういうものが作りたい。なんにもないけど、どうしたらいいだろう。よし、とりあえずPHPで作ろう、となるわけです。PHPはほとんどどんな人でも、そこそこ賢いサルでも、何かを動かせる程度までは理解できます。セキュリティが完璧でないかもしれないし、スケールできないかもしれないし、処理量が一日5リクエストを超えたとたんに落ちるかもしれない。それでも、とりあえず動くことが分かればイテレートしていけます。

最初のページを立ち上げてみるまで一年半かかるというようでは、機会を失ってしまいます。一年ではなく、3日でそこまでたどり着けるツールが必要なのです。どうせたいていの場合、最初に試作した3つか4つは没にすることになるんですから。やってみないと分からないのです。コードが悪いのではなくアプローチが間違っていたのか、そのサイトを誰もそういうふうに使いたいと思っていたのか、アイデアが間違っていたのか。だから速くイテレートできることが必要なのです。

それに、始めたばかりの頃は手伝ってくれる人を見つけるのも大変なことが多い。いきなりプロのプログラマーに話を持ちかけても「ばかげたアイデアだ、時間の無駄につきあう気はない」と言われるのがおちです。最低限そのアイデアが実現できることを信じてもらえるだけのものを何とか作りあげる必要がある。

そこで単純なハンマー、コンピュータサイエンスの博士号を持っていなくても分かる道具の出番なのです。

―――― この20年で数多くのテクノロジーやツールが流行しましたが、PHPは今もその地位を保ち続けていますね。

ラスマス:いちばん簡単ですからね。

―――― なるほど。

ラスマス:むろん、コンピュータギークの間では異論もあるでしょう。PHPは醜悪だとか、整合性がないとか、だから使いづらい、とかね。使いづらいと思うのは、彼らが期待するものと違うからです。

しかし専門知識があまりない者にとっては別に使いづらくはありません。英語のようなものです。言語としてはひどいものですが、誰でも多少は知っています。どこでも使われているからです。テレビ番組でも映画でも、いたるところで話されています。この世界に生きていて英語を一言も知らずにいるほうが難しい。上手には話せないがすこしは分かる、という程度には簡単になれる。現在のPHPとはそういうものです。

―――― 問題は整合性ではないのですね。

PHPはひどいコードを動かすのが驚くほど得意

ラスマス:英語にはまるで整合性がありませんが、誰でも多少は分かりますし、それはいいことです。すごく下手にしか話せなくても、たいていの場合、意思疎通の役には立つ。英語をほとんど話せない者同士でもなんとかやりとりはできるのです。そしてPHPは、ひどいコードを動かすのが驚くほど得意です。非常に寛容なのです。

世界最悪のコードを書いたとしても、PHPならまだ動くし、実際速度も出るし、スケーリングも可能です。シェアード・ナッシング・アーキテクチャなので、スケーリング対応は最初から組み込まれているようなものです。世界最遅のコードを書いたとしても、サーバを余分に投入すればいい話です。しかもサーバを買うのはすこしも難しくない。ただ追加のEC2インスタンスをスピンアップすればいいだけです。あとは資金源があって、それを注ぎ込む気さえあれば――たとえばアクセスが増えるとお金が儲かる仕組みがあれば――さらにインスタンスを投入できます。すばらしい。それで資金を作れれば、頭の切れる開発者を何人か雇って元のPHPコードを直してもらうこともできます。

もっと他のこともできるでしょう。PHPは確かにひどい言語といわれることもあります。もっといい言語がある、たとえばHaskellはすばらしい、すべてHaskellに書き換えるべきだと。結構、やればいいじゃないですか。しかし誰かが市場を見つけてソリューションを作らなければ仕事にはならないのです。PHPが今なお人気を保ちつづけている理由はそれかもしれません。あとは一種の慣性ですね。WordPressとかそういうものの勢いが大いに残っていると思います。PHPがひどい言語だというならWordPressを他の言語で書き直しますか? がんばってください、5年後に会いましょう(笑)

マルチコアプログラミングはPHPには興味深い事態

―――― この10年、20年でハードウェアは大きく変化しました。かつてのシンクレアと今日のマシンはずいぶん違います。プログラミング言語やプログラミング自体にはどんな変化が起きたと思いますか。

ラスマス:この20年間に?

―――― はい。できれば、これから10年間についての予想もお願いします。

ラスマス:分かりました。この20年間でハードウェアに起きた大きな変化の一つは、使えるコアが増えたことです。昔は2コアあるだけですごいことでした。今では8コア、16コア、32コアのマシンがありますし、Intelを信じるなら5年か10年先には数千コアのマシンも実現するでしょう。一つひとつは超高速というほどでなくても、それが2,048個集まれば……そういう意味では、時代はマルチコアプログラミングの方向に動いていると思います。

PHPにとって、これはいささか興味深い事態です。というのも、PHPは非常にシングルスレッド的な言語ですが、Webで使われることがほとんどです。そしてWebアプリケーションを単一コンカレントリクエスト前提で書く人はいません。ともかく、そうなのです。世界のどこかにはそういう変わり者のイントラネットシステムも存在するかもしれませんが、一般的にWebでは大量のコンカレントリクエストを扱うものです。ですから、コア数が増えてもPHPのアプローチはほとんど変わりませんでした。

ただ、より多くのコンカレントリクエストを処理できるようになっただけです。ApacheでいえばMaxClientsを引き上げられるようになったのです。昔は20コンカレントリクエストぐらいが精一杯でしたが、今なら32コアのマシンを使えばたぶん80ぐらいまで上げられるでしょう。それを処理できるだけのCPUがあるからです。ですから、アーキテクチャの面ではコア数が増えるほど一台のマシンでスケールアウトできる幅が大きくなります。同じトラフィック量をさばくのに、昔なら10台必要だったところが、今では4台で足りるわけです。

こう考えると、コア数の増加は今後もPHPのアプローチに影響を与えることはないでしょう。しかし他の、Web以外の部分については、数千コアのCPUを活用できるように設計された新しいコンパイラや言語が出てくるでしょうね。

―――― しかしWeb用途については……。

ラスマス:そう、Web用途については、Webは本質的にコンカレントだという、うまい言い訳があるので、シングルリクエスト内で処理する必要を感じません。要はレイテンシーの問題です。1リクエストで物事を30個ぐらい同時にやらせようとすると、リクエストが複雑になりすぎます。そういうときはすこしモジュール化すべきです。ただ複数リクエストを受けつけるようにすればいいのです。特にHTTP/2では複数リクエストの受信の仕方が改善されてますから。だからエンドポイントをもっと小さくして、各エンドポイントの処理を特化させるべきです。

将来は数千コア使えるようになるとすれば――たとえばあるページが2,000のHTTP/2リクエストで構成されているとしましょう。2,000リクエストはPHPレベルで2,000エンドポイントを叩いた後、その数千コアに分散します。それぞれのリクエストが小分けにされていれば、テストも簡単だし、スケールアウトもしやすいし、スケーリングする上で粒度が高まる。一部のエンドポイントへの負荷が高まった場合に分散しやすくなります。あるタイプのエンドポイントにつきサーバファームを一つ、別のタイプのエンドポイントにもサーバファームを一つ、という使い方ができる。そういう意味で、PHPはアーキテクチャ的にはうまくいっていると思います。

整合性を考慮すべきなのはPHPより上のレベルです。大きな変更を行う必要は、少なくとも近い未来にはないでしょう。もちろん、私の予想が完全に間違っている可能性はありますよ。もしかしたら今後コンピュータの世界にまったく新しい概念が入ってくるかもしれません。たとえばカエルの脳とかを使ったバイオチップみたいなのができるとか(笑⁠⁠ しかし私にとって、将来解決されてほしいのはコンパイラの問題ですね。ロジックを記述してCPUで動くコードに変える決定的な手段が必要です。

―――― ラスマスさんから見て、過去20年間でいちばん顕著なトレンドを一つ挙げるとすれば、何だと思いますか?

ラスマス:それは難しい質問ですね。いくつか候補はありますが――たとえばSSDの登場はデータベースへのアプローチをかなり変えましたね。特にモバイルでの。たしか5年前ぐらいから、モバイルのネイティブアプリが出てきて何もかもが変わりました。

ここ2、3年はどの携帯電話も画面が昔よりずっと高解像度になって、フルブラウザも使えるようになっている。ChromeもFirefoxも携帯で完全に動きますよね。今ではモバイルはデスクトップと張りあえる。事実上ほとんど同じレベルです。私はiPadを持っていますが、大きな画面がついているのにモバイルサイトが表示されてしまうので、たびたびわずらわしい思いをしています。そのたびにいちいちボタンをタップして、いいからデスクトップサイトを見せてくれ、フルブラウザで操作させてくれ、携帯電話用のちまちました簡易サイトなんて必要ないんだ、と伝えなければならないぐらいです。だからこの2年でいえば、モバイルWebがいちばんの大きな変化でしょうね。将来的にはモバイルWebが主流になればいいなと思います。

ネイティブアプリは危険です。いわば壁で囲われた庭のようなものです。昔でいえばAOLです。Webエクスペリエンスというものは、すべてがシンボリックリンクやハードリンクで相互接続された巨大な集合体のようなものであるべきで、ネイティブアプリの中から他のサービスをほとんど意識せずに使えることが望ましい。ユーザーをアプリ内に囲い込んでしまって、AOLみたいにその中でできることしかさせないというのは、一つの方法ではあると思いますが、Webにとっては良くないことだと思うのです。だからネイティブアプリに依存しないでやっていけるようになれば、もっと快適になるでしょう。

PHP7のテストに協力してください

―――― では最後の質問です。PHPのよりよい未来のために、私たち開発者ができることはなんですか?

ラスマス:今すぐできることでいえば、PHP7のテストに協力してください。今はリリース準備を整えていて、いろいろなコードを使ってテストしてくれる人が一人でも多く必要です。まだPHP7に移行する予定がなくても、テストだけはやってくれると助かります。もし動かないところがあれば、どうぞ私たちに知らせてください。その際は、できる範囲で問題を特定してくださるようにお願いします。

ただ「自分のコードが動かない」と言われても対処できません。コードを見て、どの部分が動かないのかを絞り込んでみてください。なぜ動かないのか分からないときは、バグとして報告してください。バグでなければなぜ動かないのか説明しますし、そうでなければ「やあ、これはバグですね。報告ありがとうございます、直しておきますよ」と言います。PHP7がリリースされるときには、あなたのコードはちゃんと動くはずです。私たちに協力すれば、あなたの利益にもなるのです。どうぞご協力をお願いします。難しいことではありません。PHP7を動かす方法はいくらでもあります。

―――― なるほど、PHP7をテストすることですね。

ラスマス:皆さんが作ったものをPHP7「で」テストしてください。もっと何か貢献したいというお気持ちがあれば、バグの修正、ドキュメントの編纂、新機能に関するRFCの作成、手伝っていただけることはたくさんあります。もし特に追加してほしい機能があれば、PHPのWikiからRFCを提出してください。

しかし、まずはバグの修正を手伝っていただけると助かります。いずれPHPのコア部分の開発に関わりたいと考えていますか? いま関わっている人々の大部分はバグ修正から入ってきたのです。実のところ、自分で報告したバグを自分で直そうとしたという場合がほとんどです。たとえば、バグを見つけて報告したのに、6か月経っても誰も反応しない。くそっ、俺のバグ直せよ……とまあ、そんなふうに入ってきた人がほとんどで、別に特別な人たちではないのです。

私たちは毎日PHPを使います。バグに困っていないとき、私は暇を見てときどきバグデータベースを通して眺めるときもありますが……PHP開発に関わる人々はみなPHPユーザーでもあって、自分で使っていて出たバグに集中する傾向があります。もしバグに行き当たったら、自分で直してバグデータベースのバグをクローズすれば、あなたもPHPコード開発者です。そうやってバグの半分をクローズしたら、あなたはもう立派なPHPのコア開発者です。@php.netのEメールアドレスをさしあげます。おめでとう! これで、あなたも私と同じように人々からバグを直せとせっついてもらえますよ(笑)

さて、今日は話を聞いてくださってありがとう。

―――― 長時間本当にありがとうございました。大変興味深いお話をうかがえて、うれしく思います。

画像

おすすめ記事

記事・ニュース一覧