~/VibeHandbook
無料 PDF

データベース

sqlite.org

SQLite

概要

バックグラウンドで管理する別のプログラムなしに、直接開いて編集する1つの文書ファイルを思い浮かべてください。SQLite はデータベースにおいてまさにそのような存在です。つまり、データベース全体を1つのファイルに収める、自己完結型でサーバーレスなリレーショナルデータベースです。実行・管理すべき別プロセスは存在しません。アプリケーションがライブラリを直接リンクしてファイルを読み書きします。世界で最も広く展開されているデータベースであり、携帯電話、ブラウザ、無数のアプリに組み込まれています。

強み

  • 設定不要で、運用するサーバーがない。
  • データベース全体が1つの移植可能なファイルで、コピーやバックアップが容易。
  • ローカルな読み取りや中程度の書き込みワークロードで高速。
  • トランザクションと外部キーを備えた完全な (構造化問い合わせ言語)サポート。
  • テスト、プロトタイプ、エッジランタイム、組み込み用途に最適。

トレードオフ

  • 同時書き込みが限られる。1本のペンをみんなで共有するように、書き込めるのは一度に1人だけで、ほかの人は読むことだけできる(書き込みは一度に1つ。WAL——書き込みを先に記録し、読み取りと書き込みを同時に行えるようにするモード——で緩和できる)。
  • 多数のネットワーククライアントや高い書き込みスループットには向かない。
  • 高度な型が少なく、ネイティブのユーザー/権限システムがない。
  • 単一ホストを超えてスケールするには、別のストアや Turso/LiteFS のようなレイヤーが必要。

使いどころ

ローカルアプリ、(コマンドラインインターフェース)ツール、デスクトップ・モバイルソフトウェア、テストスイート、読み取りが支配的な小~中規模サイトには SQLite を使いましょう。ホスト型レプリカを介して、エッジでもますます実用的になっています。

バイブコーディングとの相性

AI を誘導する際は、まず安全なデフォルトを有効にするよう求めましょう。SQLite はデフォルトで外部キーをオフにしているため、PRAGMA foreign_keys = ON と WAL ジャーナリングをオンにします。パラメータ化されたステートメントを使わせ、スキーマのマイグレーションはバージョン管理された .sql ファイルに保持させます。役立つヒント: 書き込みは直列化されると AI に伝え、insert を単一のトランザクション内でまとめて行い、長時間続く書き込みロックを避けるようにさせましょう。データベースはただのファイルなので、ツール群に簡単なバックアップ手順(ファイルをコピーするか .backup コマンドを使う)を含めるよう AI に依頼しましょう。

PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;

CREATE TABLE notes (
  id         INTEGER PRIMARY KEY AUTOINCREMENT,
  title      TEXT NOT NULL,
  body       TEXT,
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

-- 速度のため、多くの insert を1つのトランザクションにまとめる
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;