概要
SQLiteは JSON拡張機能 や FTS5全文検索、 ウィンドウ関数 など、現代的なデータ分析・検索機能をサポート。 柔軟なスキーマ管理や STRICTテーブル による型安全性向上も特徴。 生成カラムや WALモード でパフォーマンスと一貫性を確保。 単一ファイルで多機能なデータベース運用が可能。 外部サービス不要でアプリケーションの開発効率向上。
SQLiteでのJSONデータ操作
- JSON拡張機能 により、テーブル内にJSONドキュメントを直接保存・クエリ可能
- スキーマの柔軟性を保ちつつ、 SQLによる構造化データ抽出 を実現
- 例:JSONカラムから特定フィールド抽出
CREATE TABLE events ( id INTEGER PRIMARY KEY, payload TEXT NOT NULL -- JSON ); SELECT json_extract(payload, '$.user.id') AS user_id, json_extract(payload, '$.action') AS action, json_extract(payload, '$.metadata') AS metadata FROM events WHERE json_extract(payload, '$.action') = 'login';
- 例:JSONカラムから特定フィールド抽出
- JSON式へのインデックス作成 により、半構造化データの高速クエリを実現
FTS5による全文検索
- FTS5拡張 でSQLiteが強力な全文検索エンジンに変身
- 外部検索サービス不要、 単一データベースファイル内で全文検索
- 例:シンプルな検索インデックスの構築
CREATE VIRTUAL TABLE docs USING fts5( title, body, tokenize = "porter" ); INSERT INTO docs (title, body) VALUES ('SQLite Guide', 'Learn how to use SQLite effectively.'), ('Local-first Apps', 'Why local storage and sync matter.'); SELECT rowid, title FROM docs WHERE docs MATCH 'local NEAR/5 storage';
- 例:シンプルな検索インデックスの構築
- ランキング・フレーズ検索・接頭辞検索 など多彩な検索機能を提供
ウィンドウ関数とCTEによる分析
- CTE(共通テーブル式) と ウィンドウ関数 で高度な分析クエリが可能
- 例:ウィンドウ関数による累積合計の計算
SELECT user_id, created_at, amount, SUM(amount) OVER ( PARTITION BY user_id ORDER BY created_at ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS running_total FROM payments ORDER BY user_id, created_at;
- 例:ウィンドウ関数による累積合計の計算
- シングルファイルで リッチなレポート・ダッシュボード構築 を実現
STRICTテーブルと型安全性
- 従来の柔軟な型付けに加え、 STRICTテーブル で型制約を強化
- 例:STRICTテーブルの定義
CREATE TABLE users ( id INTEGER PRIMARY KEY, email TEXT NOT NULL, is_active INTEGER NOT NULL DEFAULT 1 ) STRICT;
- 例:STRICTテーブルの定義
- 不正な型データの挿入を拒否 し、スキーマの予測可能性とバグ低減に寄与
生成カラム(Generated Columns)の活用
- 式をカラムとして保存 し、アプリ側での重複ロジックを排除
- 例:正規化された検索用カラムの自動生成
CREATE TABLE contacts ( id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, full_name TEXT GENERATED ALWAYS AS ( trim(first_name || ' ' || last_name) ) STORED ); CREATE INDEX idx_contacts_full_name ON contacts(full_name);
- 例:正規化された検索用カラムの自動生成
- 自動同期・効率的なインデックス作成 によるクエリ高速化
WALモードによる同時実行性と性能向上
- WAL(Write-Ahead Logging)モード で読み書きの同時実行性と性能向上
- 例:WALモードの有効化
PRAGMA journal_mode = WAL;
- 例:WALモードの有効化
- デスクトップアプリやローカルファーストツール、小規模サービスで パフォーマンスと信頼性の両立