この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:8
ページ更新者:atom
更新日時:2026-06-11 07:12:00

タイトル: SQLite
SEOタイトル: SQLite 完全ガイド (組み込み RDBMS)

この記事の要点
  • SQLiteファイル 1 つで完結する組み込み RDBMS。サーバ不要、設定不要、世界一普及している DB
  • Python / PHP / Ruby / iOS / Android に標準同梱、ブラウザ・スマホアプリ・組み込み機器で広く採用
  • CLI は sqlite3.tables / .schema / .dump 等のドット コマンド
  • 同時書き込みに弱いが WAL モードで改善。Web プロダクションでも Cloudflare D1 等で実用
  • Laravel / Django / Rails もデフォルトで SQLite 対応、開発・テスト用途で多用

SQLite とは

SQLite はサーバレスでファイルベースの軽量 RDBMSです。MySQL や PostgreSQL のように常駐プロセスが必要なく、アプリケーションがライブラリとして直接 DB ファイル(拡張子 .db / .sqlite / .sqlite3)を読み書きします。

SQLite ロゴと概念図

特徴と他 DB との比較

項目SQLiteMySQLPostgreSQL
サーバプロセス不要(ライブラリ)必要必要
設定ファイル不要my.cnfpostgresql.conf
ファイル構成単一ファイル複数ファイル複数ファイル
同時書き込み1(WAL で改善)多数多数
同時読み込み多数多数多数
最大 DB サイズ281 TB制限なし制限なし
標準型動的型 (TYPEAFFINITY)静的型静的型
用途組み込み・モバイル・開発・小規模 Web大規模 Web大規模 Web・複雑分析

インストールと CLI 操作

# macOS は標準同梱
sqlite3 --version

# Ubuntu / Debian
sudo apt install -y sqlite3 libsqlite3-dev

# Windows
# https://sqlite.org/download.html から sqlite-tools-win.zip
# またはチョコレート: choco install sqlite

# CLI 起動 (mydata.db が無ければ新規作成)
sqlite3 mydata.db

sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
sqlite> INSERT INTO users (name, age) VALUES ('taro', 25), ('hanako', 30);
sqlite> SELECT * FROM users;
1|taro|25
2|hanako|30
sqlite> .exit

主要ドット コマンド

コマンド説明
.tablesテーブル一覧
.schema tablenameCREATE TABLE 文表示
.dump全データを SQL でダンプ
.read file.sqlSQL ファイル実行
.mode column表形式表示
.headers on列ヘッダー表示
.import data.csv usersCSV インポート
.output result.txt結果をファイルへ
.backup backup.dbオンラインバックアップ
.exit / .quit終了

各言語からの利用

Python (標準同梱の sqlite3 モジュール)

import sqlite3

conn = sqlite3.connect("mydata.db")
cur = conn.cursor()

cur.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
cur.execute("INSERT INTO users (name) VALUES (?)", ("taro",))
conn.commit()

for row in cur.execute("SELECT * FROM users"):
    print(row)

conn.close()

PHP (PDO + SQLite)

$pdo = new PDO("sqlite:mydata.db");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pdo->exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");

$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->execute(["taro"]);

foreach ($pdo->query("SELECT * FROM users") as $row) {
    print_r($row);
}

Node.js (better-sqlite3)

const Database = require("better-sqlite3");
const db = new Database("mydata.db");

db.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");

const insert = db.prepare("INSERT INTO users (name) VALUES (?)");
insert.run("taro");

const users = db.prepare("SELECT * FROM users").all();
console.log(users);

WAL モードで同時書き込み性能を上げる

SQLite のデフォルトは rollback journal モードで書き込み中は読み込みもブロックされます。WAL (Write-Ahead Logging) モードに切り替えると、書き込み中でも読み込み可能になり、Web アプリでも実用的になります。

-- WAL モードに切替(DB ごとに 1 度設定すれば永続化)
PRAGMA journal_mode = WAL;

-- 同期モード(NORMAL でも電源断耐性あり、高速)
PRAGMA synchronous = NORMAL;

-- キャッシュサイズ (KB)
PRAGMA cache_size = -64000;  -- 64 MB

-- 外部キー制約有効化(デフォルト OFF!)
PRAGMA foreign_keys = ON;

-- 推奨セット
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA temp_store = MEMORY;
PRAGMA mmap_size = 30000000000;
PRAGMA foreign_keys = ON;

GUI ツール

  • DB Browser for SQLite (公式推奨、無料、Win/Mac/Linux)
  • SQLiteStudio (無料、機能豊富)
  • DBeaver (汎用 DB GUI、SQLite も対応)
  • JetBrains DataGrip (有料、IDE 統合)
  • TablePlus (有料、洗練 UI)
  • VS Code SQLite 拡張(拡張機能で簡単閲覧)

Laravel / Django / Rails での利用

// Laravel .env
DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite

// 作成
touch database/database.sqlite
php artisan migrate
# Django settings.py
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": BASE_DIR / "db.sqlite3",
    }
}

本番利用事例

事例説明
iOS / Android のローカル DB標準で SQLite を採用、Core Data も内部は SQLite
Firefox / Chrome履歴・Cookie・Bookmark 保存に利用
WhatsApp / Skypeメッセージ履歴の保存
Cloudflare D1エッジ SQLite を SaaS 提供(2023~)
LitestreamSQLite を S3 等にレプリケーション
Tursoマネージド分散 SQLite(libSQL)
飛行機の機内システムBoeing 787 / Airbus A350 に組み込み

SQLite が向くケース・向かないケース

向く向かない
モバイル / 組み込みのローカル DB大量同時書き込み(数百 QPS 以上の write)
開発・テスト・CI 環境複数サーバから同じ DB を共有
小〜中規模 Web サイト(read 多め)本格的なレプリケーション要件
データ分析用ローカルキャッシュ細粒度のロール・権限制御
シングルバイナリ配布アプリ厳密な型制約が必要なシステム

バージョン情報

2026 年現在の最新は SQLite 3.45+。JSON 関数、UPSERT、Window 関数、Generated Column、FTS5 全文検索、R-Tree 地理空間など現代的機能が揃っています。

FAQ

Q: 拡張子は .db / .sqlite / .sqlite3 どれが正解?
A: どれでも動作します。慣習として SQLite 3 を示す .sqlite3 が分かりやすく、Django もこれをデフォルトに採用。

Q: 同時書き込みは本当にできない?
A: 厳密には 1 つの書き込みトランザクションのみですが、WAL モードでは読み込みは並行、書き込みはミリ秒単位で完了するので、数十 TPS 程度なら問題なく捌けます。

Q: パスワード保護できる?
A: 標準では暗号化なし。SQLCipher 拡張でファイル単位 AES 暗号化可能(iOS の Core Data も内部で使用)。