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;