PHP作者は元々Perl使いだった
台本
オープニング
【ジングル】 はい,どうもこんにちは.「雨宿りとWEBの小噺」始まりました.Keethこと桑原です.
この番組では,Webテクノロジーの歴史や裏側にある,ちょっとした小噺をご紹介しております.
今回のお題は「PHP作者は元々Perl使いだった」です.
本題
僕,一番最初に触ったプログラミング言語はC言語なんですよ.学生の頃ですね.授業で書かされて,ポインタ,メモリのどこに値が置いてあるかを直接扱うやつですね,あれで盛大に詰まりました(笑).で,仕事で初めて使った言語となるとPHPです.Web制作の仕事をしてた頃,PHPでゴリゴリ書いてた時期がありました.まあ今はそんなに書かないですけど,当時は本当にお世話になったなと,しみじみ思います.ちなみにPHPを動かしているプログラム本体,処理系って言うんですけど,それがC言語で書かれてるので,近いっちゃ近いんですけど(笑).学生の頃と社会人の頃,両方でちょっとずつ縁があった言語ってことですね.
で,そのときにふと思ったんですよ.PHPって誰が作ったんだっけって.Rubyだったらまつもとゆきひろさんですし,PythonだったらグイドさんことGuido van Rossumさん,JavaScriptだったらブレンダン・アイクさん,みたいに,割とパッと名前が浮かぶ言語作者っているじゃないですか.でもPHPの作者,僕全然名前が出てこなかったんですよ.結構お世話になった言語なのに,恥ずかしいなと思いました.
これは調べるしかないなと思って掘っていったら,まあ面白い話だったんですよ.ということで,今日のテーマは「PHP作者は元々Perl使いだった」です.
先にちょっとだけ数字の話をしておきます.PHPって最近,話題としては正直今更感あるじゃないですか.PythonとかTypeScriptとかRustの方が盛り上がってる印象ありますよね.特にこの番組でもそっち系の話が多い気がします.でも実はWordPressってPHPで動いてるんですよ.世界中のWebサイトの4割以上がWordPressだと言われています.諸説あるんですけど,大体そのくらいのデータをよく見ます.サーバーサイドの言語がわかってるサイトだけで見ると,PHPのシェアは8割近いというデータもあります.8割ですよ,8割.これ僕も調べてて,え,そんなに,ってなりました.今でも現役どころか,もしかしたら一番Webを動かしてる言語なんじゃないか,というくらいのポジションです.
しかも「PHPって古い言語でしょ」ってイメージ,持たれがちですよね.でも2020年にリリースされたPHP 8では,JITコンパイラという仕組みが入って実行速度がさらに上がりました.プログラムを動かしながら,よく使う部分だけをその場で高速な形に翻訳しておく仕組みですね.割と最近までアップデートされ続けているので,レガシー言語だと思ってる人がいたら,ちょっと見直してみてもいいかもしれません.
そんなPHPを作った人.名前はラスマス・ラードフといいます.Rasmus Lerdorf.
実はこの方,僕,一回直接お会いしたことがあるんです.2015年のPHPカンファレンス.あの年はちょうどPHP生誕20周年で,しかも次のバージョンのPHP7が出る直前くらいのタイミングでした.ラスマスさん本人が来日して基調講演をやっていて,たしか「Speeding up the Web with PHP7」というタイトルだったかな.会場は結構な人だかりでした.講演が終わった後,ちょっと勇気を出して列に並んで,たまたま捕まえてツーショットを撮ってもらったんです.いや,今思うとすごい貴重な写真です.あの時の自分に「その写真,10年後にポッドキャストのネタになるよ」って教えてあげたいですね(笑).写真データ,どっかに残ってるはずなので,今度掘り出したいです.
このラスマスさん,デンマーク系カナダ人です.生まれはなんとグリーンランド,グリーンランドですよ.1968年生まれです.グリーンランドって北極圏に近い世界最大の島で,デンマークの自治領です.そこで生まれた人が作った言語が,今,世界のWebの結構な割合を動かしている.なんかスケールがおかしいですよね.3歳でデンマークに移って,その後カナダに渡って,ウォータールー大学でシステムデザイン工学を学び,1993年に卒業しています.
時は1994年です.インターネットがようやく広まりかけてきた頃で,グラフィカルなブラウザが出始めたばかりの時代ですね.MosaicとかNetscapeとか,あの辺りが出てきた頃です.ラスマスさんはカナダでITコンサルタントをしながら,自分のホームページを持っていました.今でいうポートフォリオサイトみたいなものです.履歴書とか経歴とかを載せた,シンプルなものだったようです.
で,「誰が見に来てるんだろう」って気になったらしいんですよ.今ならGoogle Analyticsとか,サーバーのアクセスログ解析ツールとかいろいろありますよね.でも当時そんなものはありません.じゃあ自分で書くしかない.そこで使ったのがPerlです.PerlってPHPより前に主流だったスクリプト言語,コンパイルせずにそのまま動かせる言語ですね,で,当時のCGIプログラム,つまりWebサーバーとプログラムをつなぐ仕組みは,Perlで書くのが当たり前でした.エンジニアなら誰もが通った道です.
ところがこのPerlのCGI,使い続けるうちに問題が出てくるんですよ.何が問題かというと,リクエストが来るたびに毎回プロセスを新しく起動するんです.誰かがページにアクセスするたびに,サーバーがPerlのプログラムをゼロから起動して,処理して,終了して,またゼロから起動する.これを毎回繰り返すわけです.アクセスが少ないうちは問題ないんですけど,増えてくるとプロセスがどんどん立ち上がって,メモリもCPUもどんどん食われます.最悪,サーバーがダウンしてしまう.個人のポートフォリオサイトなので大量アクセスはなかったと思いますが,それでも積み重なるとサーバーがもたつく,ということが起きていたはずです.
ラスマスさんも同じ問題にぶつかって,「もうこれはきついな」となって,C言語で書き直すことにしたんです.C言語ならPerlみたいに毎回プロセスを起動するオーバーヘッドがなくて,処理が速い.「問題があるなら書き直す」.このシンプルな判断が,後のPHPにつながっていきます.
そうして1995年,このC言語版のツール群を公開します.名前が「PHP Tools」.PHPって今の意味だと「PHP: Hypertext Preprocessor」なんですけど,最初は「Personal Home Page Tools」の略でした.個人のホームページのためのツール,そのまんまの名前です.自分のサイトのために作ったから,まあそうなるんですけど,今世界中で使われてる言語の最初の名前がこれかと思うと,なんか面白いですよね.
ちなみに今の「PHP: Hypertext Preprocessor」という名前,これ再帰的な頭字語と呼ばれるやつで,頭文字の中に自分自身が含まれています.PHPのPが,またPHPを指してる.プログラマーらしい遊び心というか,これ知ったとき僕はニヤッとしましたね(笑).
あとPHPって公式マスコットが象なんですよ.「elePHPant」という名前で,Elephantの文字の中にPHPが埋め込まれた洒落たネーミングです.これ1998年に,ヴァンサン・ポンティエさんというフランスの方が考案したものらしくて,友人がPHPの話をしながらコードを書いてるのを見て,なんとなく紙にPHPって大文字で落書きしてたら象っぽく見えた,というノリで生まれたそうです.最初はイラストだけだったのが,2007年になってようやくぬいぐるみ化されて,今ではPHPカンファレンスの定番グッズになっています.オープンソースコミュニティのゆるいノリで生まれたマスコットが今や公式扱いになっている.これ,なんかPHPらしいですよね.
1995年6月8日にGPL,GNU General Public Licenseという形で公開しました.つまりオープンソースとして世に出したわけです.「同じ問題で困ってる人が他にもいるだろう」.割と軽い理由だったらしくて,このへんの感覚,僕は結構好きです.便利なもの作ったから使ってよ,くらいのノリ.今のオープンソースの文化に近いものが,もうこの時点でありました.
で,ここが今日一番話したかったところです.ラスマスさん,後のインタビューでこう言っています.
「プログラミング言語を作ろうとしたことは一度もない.どうやって作るかも全くわからなかった.ただ次の論理的なステップを追い続けただけだ」
いや,これすごくないですか.世界中で使われてる言語の作者が,「作り方なんかわからなかった」と言っているんです.しかもこれ,嘘じゃない.本当にアクセスログを取りたかっただけから始まって,機能が少しずつ足されていって,気づいたら言語になっていた.まさにその通りの経緯なんですよね.設計図があって作り始めたわけじゃなくて,日々の「これあったら便利」の積み重ねでした.
さらに,別のところでこうも言っています.「プログラミングが大嫌いだ.でも問題を解決するのが好きだ」.
いや,ちょっと待ってください.プログラミング言語の作者がプログラミング大嫌いって言ってるんですよ.でも考えてみると,彼が作りたかったのは言語じゃなくて,目の前の問題の解決策でした.それが結果的に言語になった,というだけの話です.壮大なビジョンから生まれた言語じゃなくて,実用から生まれた言語.だからWebとの相性もよかったんだと思います.Webってそもそも「こういうことしたい,それをできるようにしたい」の積み重ねですよね.PHPはそのニーズに直球で応える作りだったから,広まったんじゃないかと思います.
ちなみにラスマスさんの正直さがよくわかるエピソードがもう一つあります.2012年に「PHP: a fractal of bad design」,日本語にすると「PHPは悪い設計のフラクタルだ」という,かなり辛辣なブログ記事が話題になったことがあるんですよ.フラクタルっていうのは,どこを切り取っても同じ形が出てくる図形のことで,つまり「どこを見ても同じように設計が悪い」という,なかなかの言い草です.PHPの言語仕様のあちこちに一貫性がない,関数名の付け方がバラバラだ,ということをボロクソに指摘した記事で,エンジニア界隈で結構バズりました.
普通,自分が作ったものをそこまで叩かれたら,反論したくなりますよね.でもラスマスさんの反応がすごくて,このブログを書いた人のことを「彼はよくわかっている」と言った上で,「この記事のほとんどの内容に完全に同意する」と言ってしまったんです.しかも「PHPは自分の作業を楽にするためのハンマーとして書いた.1993年当時,Webアプリを作る方法はCとPerlをゴリゴリ書くことしかなくて,それがめちゃくちゃ苦痛だったから,同じことを繰り返さなくて済むツールを書き始めた」と説明しています.美しい言語設計を目指して作ったものじゃない.あくまで自分の問題を解決するための道具だった,というスタンスを,批判に対しても崩さなかった.この一貫性,僕はすごく好きです.
さて,オープンソースとして公開されたPHP Tools,他の開発者からどんどんフィードバックが来るようになって,機能が少しずつ追加されていきました.フォームのデータを処理できるようになり,データベースとも連携できるようになり,PHP/FIというバージョンに進化していきます.FIはForms Interpreterの略です.
1997年に大きな転機が来ます.イスラエルのテクニオン,イスラエル工科大学という世界的にも有名な大学があるんですけど,そこの学生2人が登場します.アンディ・ガットマンズとゼーブ・スラスキーという2人です.この2人が大学の課題でECサイト,今でいうネットショッピングのサイトを作らないといけませんでした.「PHPを使おう」となったんです.
ところがですね,いざ使い始めたら,当時のPHPはバグだらけで,機能も足りなくて,使い物にならないんですよ.指導教員の先生からも「PHPはやめとけ」と言われていたくらいだったそうです.
じゃあどうするか.普通の学生なら別のツールに切り替えますよね.でもこの2人は違いました.「PHPというアイデア自体はすごく良い,でも実装がよくない,だったら自分たちで書き直そう」となったんです.
いや,これですよ,これ.大学の課題の話ですよ.課題を終わらせるために,課題で使おうとしたツールをまるごと書き直すという(笑).なかなかこの発想はすごいなと思います.しかもそのくらい,PHPというアイデア自体への信頼があったということでもあります.
この2人がラスマスさんにコンタクトを取って,「一緒にPHPを書き直しませんか」と提案しました.ラスマスさんも「それいいね」となって,3人で協力してPHPを大幅に書き直したのがPHP 3.0です.1997年にリリースされたPHP 3.0は,それまでとは比べ物にならないくらい安定していて,機能も充実していました.これが出ると爆発的に普及します.1年ちょっとで何十万というWebサイトがPHP 3.0を使うようになったと言われています.
さらにこの2人,PHP 3.0だけで終わりません.次はPHPの実行エンジン,書いたコードを1行ずつ読んで動かす心臓部ですね,それ自体を一から設計し直します.そうして生まれたのがZendエンジンです.Zendって何かというと,ZeevとAndiの名前を組み合わせた造語です.Ze-ev,An-di,Zend.2人の名前が合体したエンジン.なんかこういうの好きですよね,自分たちの名前をつけちゃうの.
このZendエンジンが入ってから,PHPは個人サイトのための道具から,企業の本格的なサービスを支えるものに変わっていきます.実はFacebookだって最初はPHPで作られてるんですよ,これ知ってました?マーク・ザッカーバーグが2004年にPHPで作ったのが最初のFacebookです.出発点はPHPでした.
で,ここからがちょっとすごい話で.Facebookはその後ユーザー数が爆発的に増えていきますよね.そうすると,PHPは実行速度の面でだんだんきつくなってきて,サーバー代がとんでもないことになってくる.そこでFacebookがどうしたかというと,PHPを速く動かすための仕組みを,自分たちで一から作り始めるんです.最終的に2013年には,Facebookの全サーバーがその自作の仕組みの上で動くようになりました.大学の寮で学生がPHPで書いた1本のサイトが,10年経ったら,会社が言語の心臓部ごと作り直すハメになっている.このスケールの落差が,僕はすごく面白いと感じます.
ちなみに,ラスマスさん,今は何をしているかというと,Etsyという海外の大手ハンドメイド系ECサイトで,ディスティングイッシュト・エンジニアという役職についています.エンジニア職の中で一番上のランク,くらいの意味ですね.あと,「PHP Foundation」という,PHPの言語自体の開発を継続的に支えるための非営利組織にも,PHPフェローという立場で関わっています.このPHP Foundation,2021年に,PHPの開発が特定の企業のリソースに頼りすぎていて持続可能じゃない,という危機感から作られた組織で,JetBrainsとかLaravelとか,PHPを商売で使っている企業がお金を出し合って運営しています.最初は自分のアクセスカウンターだったツールが,今や企業が共同でお金を出し合って守るべきインフラになっている.これ,改めてすごい話だなと思います.
で,僕は今の仕事柄,この「お金を出し合って守る」という部分がやけに引っかかりました.オープンソースって,善意で成り立っているものだと思われがちじゃないですか.無償で公開されていて,有志が直してくれて,みんなが得をする.でも実際に30年続いたものの中身を見てみると,支えているのは善意というより,誰かの雇用なんですよ.誰かがそれを仕事としてやれる状態を,会社がお金を出して確保している.その仕組みを作らないと,どれだけ愛されているものでも続かない.個人が趣味で書いたものが世界のインフラになった,という美談の裏側には,ちゃんとそういう現実的な話がくっついているんだなと思いました.
もう一つだけ,どうしても話しておきたい話があって.そもそもラスマスさんが最初に使っていたPerl,あれを作ったのはラリー・ウォールさんという方です.ラリー・ウォールさんはプログラマーであると同時に言語学のバックグラウンドも持っている人で,Perlの設計には「言語として面白くしよう」という意図がかなり入っています.同じことをやるのに複数の書き方ができていい,というのを意図的に許容した設計思想で,「やり方は一つじゃなくていい」という合言葉まであるくらいです.
一方でラスマスさんは,「言語を設計しよう」という発想が最初からなかった人で,本当に行き当たりばったりで機能を足していきました.同じスクリプト言語でも,作者の設計思想が真逆なんですよね.片や言語そのものが好きな人が作った表現力重視の言語.片や問題解決屋が行き当たりばったりで作った実用重視の言語.PHPがPerlの次の選択肢として選ばれていったのは,このシンプルさの違いも大きかったんじゃないかと思います.
あとPerlユーザーがPHPを作ったということで,「言語の乗り換え」の歴史でもあるなと思いました.今もPythonにシフトしたり,TypeScriptが主流になったり,RustがC言語の領域に入ってきたり,どの時代もこういうシフトってありますよね.ラスマスさんはある意味そのはしりで,「Perlでやっていたことをもっとうまくできないか」というところから始まったのがPHPです.何か新しいものが生まれる背景には,既存のものへの「これちょっとしんどいな」という感覚があることが多い.それって今でも変わらないんだなと思いました.
で,これって経営とかマネジメントの文脈でも結構示唆があるなと思っています.最近よく言われる「MVP」,Minimum Viable Productの発想.完璧を目指すよりまず動くものを出す,という考え方です.PHPの生まれ方はまさにそれなんですよね.壮大な設計書を書いてから作り始めたんじゃなくて,目の前の小さい問題を解決するものを作って,公開して,反応を見て,また直す.これを繰り返した結果,世界中で使われる基盤になりました.プロダクト作りでもチーム作りでも,割と本質的な話だと思っています.最初から完璧な設計を目指しすぎて何も出せない,ということって現場でもよくありますよね.ラスマスさんの話を聞いていると,「まず出す,直すのは後」の強さを改めて感じます.
皆さんの最初に触れたサーバーサイドの言語は何でしたか.PHP,Ruby,Python,最近だとNode.js,サーバー側でJavaScriptを動かすやつですね,あそこから入る人も多いと思います.その言語がどうやって生まれたか,誰が作ったか,意外とドラマがあったりするので,ぜひ調べてみると面白いんじゃないかなと思います.
さて,もう一度この話の流れを振り返ります.出発点は,「自分のホームページに誰が来たか知りたい」という,めちゃくちゃ個人的な動機でPerlで書いたCGIスクリプトでした.それがPerlの問題でC言語に書き直され,ツールとして公開され,「Personal Home Page Tools」という名前になり,2人のイスラエルの大学生に気に入られて大幅に書き直され,世界中を動かすプログラミング言語になった.偶然が重なって重なって,気づいたら世界の結構な割合のWebサイトを動かしていた.そういう話なんですよね.
作者自身が「プログラミング言語を作ろうとしたことなんか一度もなかった」と言っている言語に,世界中のエンジニアが,世界中の人々が,日々お世話になっています.「すごいものを作ろう」とか「歴史に残る言語を作ろう」とか,そういうビッグな動機は,別になくてもいいんだと思います.目の前の「これ,しんどいな」を一個だけ解決する.ラスマスさんが最後までやっていたのは,本当にそれだけでした.エンジニアとして,これは結構刺さりましたね.プログラミングが嫌いな人が作った言語が,世界中にプログラマーを増やした.今日はそういう話でした.
📎 https://www.php.net/manual/en/history.php.php 📎 https://ja.wikipedia.org/wiki/ラスマス・ラードフ 📎 https://en.wikipedia.org/wiki/Rasmus_Lerdorf 📎 https://rightcode.co.jp/blogs/34793 📎 https://thehistoryoftheweb.com/php/ 📎 https://en.wikipedia.org/wiki/Zend_Engine 📎 https://gihyo.jp/news/report/01/phpcon2015/0001(PHPカンファレンス2015 基調講演レポート) 📎 https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ 📎 https://engineering.fb.com/2011/12/09/open-source/the-hiphop-virtual-machine/ 📎 https://thephp.foundation/structure/ 📎 https://afieldguidetoelephpants.net/
エンディング
【エンディングBGM】 さて,そろそろ今回もクロージングです. 今回は「PHP作者は元々Perl使いだった」について話しました.
次回も,Webテクノロジーの小噺をお届けします.
この番組が気に入った方は,ぜひチャンネル登録をお願いします. また,あなたからの感想やリクエストもお待ちしております! 𝕏で #WEB小噺 をつけて投稿していただくか,概要欄のお便りフォームからお送りください.
それでは,また次回の雨宿りでお会いしましょう!「雨宿りとWEBの小噺」お相手は Keeth でした.さようなら! 【ジングル】
📣 配信メタ
タイトル
- 「プログラミングが大嫌い」な人が作った言語
(別案:9. 世界の8割を動かす言語を,作者は作る気がなかった)
概要欄
第9回は,世界中の Web サイトを支えている PHP,その生みの親であるラスマス・ラードフさんについてお話しました!実はこの方,「プログラミング言語を作ろうとしたことは一度もない」「プログラミングが大嫌いだ」と公言されています.出発点は「自分のホームページに誰が来たか知りたい」という,本当にそれだけの動機だったそうで,そこからどうやって世界を動かす言語になったのか,是非お聴きください💁
今回の内容
- サーバーサイドの言語が分かっているサイトだけで見ると,PHP のシェアは 8 割近い
- 最初の名前は「Personal Home Page Tools」.自分のサイトのためのツールだった
- Perl の限界にぶつかって C 言語で書き直したのが,すべての始まり
- 「言語を作ろうとしたことは一度もない」「プログラミングが大嫌いだ」という本人の言葉
- 「PHP は悪い設計のフラクタルだ」という辛辣な批判に,作者が「完全に同意する」と返した話
- 大学の課題を終わらせるために,PHP をまるごと書き直したイスラエルの学生 2 人
参考リンク
- https://www.php.net/manual/en/history.php.php
- https://thehistoryoftheweb.com/php/
- https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
- https://en.wikipedia.org/wiki/Zend_Engine
- https://thephp.foundation/structure/
- https://afieldguidetoelephpants.net/
- https://gihyo.jp/news/report/01/phpcon2015/0001
- https://en.wikipedia.org/wiki/Rasmus_Lerdorf
ではでは(=゚ω゚)ノ
📣宣伝📣
📧 コンタクト
- おたよりフォーム: https://forms.gle/utkE7JBKSReSdArPA
- 公式𝕏: https://kuwahara_jsri