こんにちは、OSSのレキシラジオです。このポッドキャストでは、エンジニアであり、ポコアポケモンを買おうか迷っているhentekoが、毎週一つのOSSプロジェクトを取り上げて、そのプロジェクトにまつわる歴史を紹介する番組になります。
最近ですね、ポコアポケモンという新しいポケモンのゲームが出たじゃないですか。 買おうかどうかめっちゃ迷ってるんですよね。
ポケモン好きとしては、もちろん気になるんですけど、ちょっと価格がちょっと高いかなと思ってまして。 悩ましいなぁと思いつつ、まぁ結局後々買っちゃうんだろうなぁとは自分でもわかってるんですけどね。
さて、ポケモンの図鑑データも、なんかもうきっと裏側ではデータベースに入っているわけですけども、 今週のテーマはまさにそのデータベースです。
PostgreSQLについて見ていけたらなと思います。 皆さんデータベースって使ってますかね?
ウェブアプリを作ったことがあるエンジニアなら、まず間違いなく触ったことがあると思います。 ユーザー情報を保存したり、注文履歴を管理したり、ログを記録したり、そういうデータの置き場所ですよね。
PostgreSQLっていうのは、そのデータベースの中でも今一番使われているオープンソースのリレーショナルデータベースです。
スタックオーバーフローという開発者向けのQ&Aサイトの調査では、 2025年に開発者の55.6%が使っていると回答していて、3年連続で最も使われるデータベースの一位です。
2位のマイSQLに10個ポイントの差をつけているっていうから、もうダントツかなと思います。 今日お話ししたいのは、このPostgreSQLの約40例に渡る歴史なんですけど、これがまたすごいんですよね。
一人の研究者のデータベースはもっと自由であるべきだっていうような問いから始まって、大学のプロジェクトが終わっても、世界中のボランティアに引き継がれて、今や世界のデファクトスタンダードになりました。
しかもその根っこにある設計思想は40年前からずっと変わっていません。 これすごいですよね。それでは早速見ていけたらなと思います。
まずはPostgreSQLの源流からお話しします。
1970年、IBMのエドガー・コットさんというような方が、ジュレーショナルモデルっていうデータベースの考え方を発表します。
データをテーブル、つまり表の形で管理しましょうというような考え方で、今のデータベースの基礎になっているものです。
この考え方に触発されて、1973年にUCバークレイ、カルフォルニア大学バークレイ校のマイケル・ストーンブレイカーさんがイングレスというプロジェクトを始めます。
リレーショナルモデルって本当に実用的に動くのかっていうようなことを証明するプロジェクトでした。
そしてイングレスは見事に成功して、データを素早く検索するためのビートリーインデックスっていう、今でも使われているような重要な技術を生み出したりしました。
ところがですね、イングレスの成功の後、ストーンブレイカーさんは自分の成功策の限界に直面することになります。
イングレスを地理情報システム、いわゆるGISとして使おうとしました。地図の上にポリゴンを描いたり、設計図の図形を扱ったりしたかったんですね。
でも結果はストーンブレイカーさん自身の言葉で任意に遅く修正不可能というような、めちゃくちゃ遅くて、しかも直しようがないっていうようなことを言ってるんですよね。
これ自分が作ったものに対してですからね、相当悔しかったかなと思います。
数値や文字列の処理には優れていたんですけど、地図上のポリゴンとか設計図の図形とか、世の中にあふれる多様なデータを扱おうとすると壁にぶつかりました。
ユーザーがこういうデータ型も追加したいと思っても追加する仕組みがなかった。つまり拡張性がなかったんですよね。
でもですね、ここがストーンブレイカーさんのすごいところなんです。
普通だったらまあしょうがないかって諦めるか、パッチを当ててごまかすかするかもしれません。
でもストーンブレイカーさんの答えは明快でした。
大きく複雑なデータモデルではなく、拡張可能な小さくシンプルなモデルに基づく新しいシステムを作るべきだ。
自分の成功策を捨ててゼロから作り直すというような決断をしました。
1986年、ストーンブレイカーさんとローレンス・ローさんが
The Design of Postgresという論文をACM-SIGMOTという国際会議で発表します。
プロジェクト名はPostgres、ポストイングレス、つまりイングレスの先へというような決意を込めた名前でした。
アメリカの国防や科学技術の研究資金を出す機関、DARPAやNSFなどから資金提供を受けて
ユーザーが自由にデータ型を定義できる仕組みとか、拡張可能なアクセスメソッドとか、革新的なアイディアをたくさん盛り込んだんですね。
同時に、ジョー・ヘラースタインさんというような方が
ポストグレスはフレッド・ブルックスさんの第二システム効果に逆らったって表しています。
ブルックスさんは明朝人月の神話の著者なんですけど
第二システム効果というのは、最初のシステムの構型を作ると、あれもこれもと、機能を詰め込みすぎて複雑になりがちというような法則です。
ポストグレスは拡張性という一方の柱があったからこそ、そこに踏みとどまれたというような形でした。
そしてポストグレスは学熟2プロジェクトでありながら、実は驚くほどいろんな分野で使われていきました。
金融データの分析、ジェットエンジンの性能監視、さらには小惑星の追跡データベースまで
どんなデータ型でも扱えるというような思想が複雑なデータを抱える現場を引きつけたんですね。
しかし1993年、ユーザーコミュニティが倍増して保守の負担が研究時間を圧迫するようになり、バークレーでのポストグレスプロジェクトはバージョン4.2をもって終了しました。
商業的にもストーンブレーカーさんが設立したエルストラという会社がインフォミックスにたらえ回しされるように買収され、
インフォミックスもIBMに買収されてDB2に統合されて消えていってしまいました。
でもこれは死ではなかったんですね。オープンに公開されたコードは次の担い手を静かに待っていました。
ここからの展開がすごいんですよね。
1994年、バークレーの大学院生だったアンドリュー・ユーさんとジェリー・チェンさんが重大な決断をしました。
ポストグレスの独自クエリ言語を捨てて、業界標準のSQLに置き換えたんです。
これどういうことかというと、独自の方言で書かれた名称を世界中の人が読める標準語に翻訳し直したようなものなんです。
しかも翻訳の過程でコードを完全に書き直して、報道サイズを25%スリム化、パフォーマンスも30%から50%向上させました。
大学院生がこれをやったっていうのがすごいことかなと思います。
1995年9月5日、ポストグレス95としてバージョン1.0がオープンソースとして公開されました。
そして1996年、ここでまた大きな出来事が起きます。
カナダのマーク・フルニエさんが初めて大学の外の開発サーバーを提供しました。
これ何がすごいかというと、大学の庭で育てた苗木が世界中のボランティアが手入れする公園に植え替えられた瞬間です。
それまでは大学の中だけで育てていたものがオープンな場に出ていったというようなわけです。
メーリングリストを通じてカナダのフルニエさん、米国のブルース・モムジアンさん、そしてロシアのバディム・ミケイフさんが集まりました。
世界4拠点にまたがるこの4人がポストグレスSQLの初期コアチームになりました。
4人ですよ。たった4人から始まりました。
同じ1996年、ポストグレス95じゃ時代遅れに聞こえるよねっていうようなことでポストグレスSQLに解明されます。
1997年1月29日にはポストグレスSQLバージョン6.0がリリースされました。
さてこの時期にですねポストグレスSQLは重要な捨てる決断もしています。
初期設計ではデータを上書きしないで過去のバージョンも全部残すというような仕組みを使っていました。
タイムトラベルっていう過去のデータベース状態にクエリを投げられる面白い機能を支えていました。
でも過去のデータを全部残すのでディスクがどんどん膨らんで性能が落ちていってしまいました。
魅力的だけど実用的ではなかったというようなものかなと思います。
そこで思い切ってですねこの仕組みを改めて1999年にはMVCCっていう仕組みをポストグレスSQL6.5で本格導入しました。
導入前は誰かがデータを更新している間他の人はその処理が終わるまで待たされていたんですけど
MVCCはこれを解消して読み取りが書き込みをブロックしないという確信を実現しました。
図書館で例えると誰かが本を借りて修正の書き込みをしている最中でも
別の人がその本の元の内容を閲覧できるようにする仕組みです。
あともう一つ重要なのがライセンスの選択です。
ポストグレスSQLはBSDやMITに導入した官業なライセンスを選びました。
つまりAWSもGoogleも自由にポストグレスSQLを作ったサービスを作れる。
この選択が後のクラウド時代で爆発的に効いてきます。
派手さはないかもしれないんですけど
でもオープンソースコミュニティの持続的な改善の積み重ねが
後の大きな飛躍の土台を作っていきました。
大学一世でも歴史を変えられるし
4人のボランティアから世界は動き始めました。
すごい話かなと思います。