~/VibeHandbook
$39

データベース

sqlite.org

SQLite

概要

SQLite は、データベース全体を単一のファイルに格納する、自己完結型でサーバーレスなリレーショナルデータベースです。実行・管理すべき別プロセスは存在せず、アプリケーションがライブラリを直接リンクしてファイルを読み書きします。世界で最も広く展開されているデータベースであり、携帯電話、ブラウザ、無数のアプリに組み込まれています。

強み

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

トレードオフ

  • 同時書き込みが限られる(書き込みは一度に1つ。WAL モードで緩和できる)。
  • 多数のネットワーククライアントや高い書き込みスループットには向かない。
  • 高度な型が少なく、ネイティブのユーザー/権限システムがない。
  • 単一ホストを超えてスケールするには、別のストアや Turso/LiteFS のようなレイヤーが必要。

使いどころ

ローカルアプリ、CLI ツール、デスクトップ・モバイルソフトウェア、テストスイート、読み取りが支配的な小~中規模サイトには 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;