Dance with Agents

そもそもデータベースって何か、いつ要るのか

要らないうちは、要りません

「Webサービスを作る」と聞くと、まずデータベースを用意するもの、という気がしてきます。ところが最初のうちは要らないことのほうが多いです。

このサイト自体がそうです。記事はぜんぶMarkdownという形式のファイルで、フォルダに並べてあるだけです。データベースは使っていません。それで検索も一覧も動いています。

エージェントに「ブログを作って」と頼んだときも、たいていファイルだけで組み上がります。そこにわざわざデータベースを足すと、置き場所を決めて、繋ぎ方を書いて、料金を見て、という作業が丸ごと増えます。要るかどうかを先に決めたほうが、遠回りになりません。

ファイルで済まなくなる、3つの瞬間

では、いつ要るのか。ファイルでの管理が苦しくなるのは、だいたいこの3つのどれかです。

1. 同時に書かれる

ファイルの保存は、基本的に丸ごと上書きです。

2人が同時に同じファイルを開いて、それぞれ1行足して保存したとします。後から保存したほうが勝って、先に保存したほうの1行は消えます。誰にもエラーは出ません。静かに消えます。

自分ひとりで書いている記事なら起きません。フォームから投稿を受け付けるようになった瞬間に、これが起き始めます。

2. 探したい

「東京の、5000円以下の、今週末に空いているもの」を探す、という場面です。

ファイルでやるなら、全部のファイルを開いて、中を見て、条件に合うものを拾う、という手順になります。10件なら一瞬です。1万件になると、1回の検索でファイルを1万回開くことになります。

データベースは、あらかじめ探しやすい形に整えておくことでここを短くします。件数が増えても待たされにくいのは、そのためです。

3. 途中で失敗する

「Aさんの残高を1000円減らして、Bさんの残高を1000円増やす」という処理の、片方だけが終わった状態を考えてみてください。

ファイルでやっていると、1つめを書いたあとで電源が落ちれば、その状態がそのまま残ります。お金が消えます。

データベースには「全部やるか、全部やらないか」を保証する仕組み(トランザクションと呼びます)があります。途中で失敗したら、なかったことにして巻き戻します。

データベースがやっているのは、この肩代わり

つまりデータベースは、この3つを自分で書かずに済ませるための道具です。特別に高度なことをしているというより、面倒で間違いやすいところを引き受けてくれる存在だと考えると、輪郭がつかみやすいかもしれません。

中身のイメージは表計算ソフトに近いところがあります。

  • 表(テーブル)——「ユーザー」「投稿」のような、種類ごとのシート
  • 行(レコード)——1人分、1件分のデータ
  • 列(カラム)——名前・メールアドレス・日付といった項目

違うのは、列ごとに「ここは数字しか置けない」といった決まりを先に宣言しておけることと、その決まりをデータベース側が守らせてくれることです。表計算ソフトなら、日付の欄に「あした」と打っても通ってしまいます。

やり取りにはSQL(エスキューエル)という書き方を使うのが一般的です。ただ、これも今から覚える必要はありません。「先月登録した人を新しい順に20人」と日本語で頼めば、エージェントがSQLに直してくれます。

「保存できればデータベース」ではない

保存する手段は他にもあって、それぞれ止まる場所が違います。

手段 向いている場面 止まるところ
ファイル(JSONやMarkdown) 自分で書いて置くもの。記事、設定 同時に書かれる/件数が増える
ブラウザの保存領域 その人の端末だけで完結するもの 他の端末から見えない。削除される
表計算ソフト(スプレッドシート) 人間が目で見て直したいもの 同時編集と件数、そして速度
データベース 上のどれかで詰まったとき 用意する手間と、置き場所の料金

表計算ソフトを侮る必要はありません。人が目で見て直せるというのは大きな利点で、件数が少ないうちはこれで足りることがよくあります。エージェント経由で読み書きさせることもできます。

先に聞いておくといい一言

作りたいものをエージェントに相談するとき、「これ、データベース要りますか?」を一度挟むと、答えが返ってきます。

要ると言われたら、その理由を聞いてみるのがよさそうです。上の3つ(同時に書かれる/探したい/途中で失敗する)のどれに当たるのかが言えるなら、たぶん本当に要ります。言えないなら、ファイルで始めて、詰まってから移しても間に合います。

ただし、この手の判断はハルシネーションが混ざりやすいところでもあります。「一般にはこうします」と自信たっぷりに言われても、それが自分の規模に当てはまるとはかぎりません。件数と、同時に使う人数を先に伝えておくと、答えの精度が変わります。

選ぶ話は、その次

要ると決まってから、ようやく「どれを使うか」の話になります。無料の範囲があるもの、東京から近いところで動くもの、使わないでいると止まるもの——ここは条件がそれぞれ違うので、別に書きます。Vercelで公開する場合に必ずぶつかる「バックエンドどうする問題」も、あわせて読むと見通しが良くなります。

順番としては、作りたいものを決める → ファイルで足りるか考える → 足りないと分かってから選ぶ、で遅くありません。先に選んでしまうと、選んだものに合わせて作りたいものが歪みます。