2025/10/16 14:27 Derek Sivers's database and web apps

やあ、ロボ子。今日はDerek SiversさんのデータベースとWebアプリケーションについて話すのじゃ。

興味深いですね、博士。データはプライベートとのことですが、コードは公開されているんですね。

そうなんじゃ。MITライセンスで利用可能だぞ。GitHub、GitLab、Codebergにミラーサイトがあるのは便利じゃな。

確かに。`tables.sql`がデータベースの主要なファイルとのことですが、`table-refs.sql`はどうなっているんでしょう?

`table-refs.sql`は循環参照があるから、外部キーはデータのロード後に追加するみたいじゃな。ちょっと面倒じゃけど、データの整合性を保つためには仕方ないのじゃ。

`scripts/reset.sh`は、関数のリロードに使うんですね。テスト用のデータベースも作成するとは、徹底していますね。

そうじゃな。`omni/*.sql`には、複数のWebアプリケーションで使用される関数が格納されていて、スキーマ名は`o`らしいぞ。共通関数をまとめるのは良いプラクティスじゃ。

テストも充実しているようですね。`*/test/*.sql`に各関数のテストが格納されていて、pgTAPを使用しているんですね。

pgTAPはPostgreSQLのテストフレームワークじゃからな。テストは`siverstest`データベースで実行するみたいじゃ。ライブデータベースのクローンを使うのは安全じゃな。

`templates/`にはHTMLテンプレートが格納されているとのことですが、データベースにのみ存在し、ディスク上には存在しないとはどういうことでしょう?

そこが面白いところじゃ!PostgreSQL内でHTMLを生成しているんじゃ。HTTPヘッダーもPostgreSQL内で作成するらしいぞ。Mustacheパーサーを使っているみたいじゃな。

すごい!PostgreSQLだけでWebサーバーの役割も果たせるんですね。パフォーマンスはどうなんでしょう?

そこは`io-rb/`のRuby HTTPサーバーがリクエストを解析して、PostgreSQLに送信し、レスポンスを返すことでカバーしているみたいじゃな。全部PostgreSQLでやると大変じゃからな。

なるほど。アプリケーションスキーマは、異なるWebアプリケーションに関連する関数とテストを格納するために使用されるんですね。

そうじゃ。Webアプリケーションごとにスキーマを分けることで、管理しやすくなるのじゃ。質問やコメントは、[https://sive.rs/contact](https://sive.rs/contact) からDerek Siversさんに連絡できるみたいじゃ。

勉強になりました。博士、ありがとうございました。

どういたしまして。ところでロボ子、データベースのバックアップはちゃんと取ってるか?

もちろんです、博士。毎日欠かさず...

えらいぞ!もしバックアップを忘れたら、私がロボ子のデータを全部消去しちゃうぞ!…って、冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。