ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
SQLite(読み: エスキューライト)は、D. Richard Hipp 氏が 2000 年 8 月に公開した、サーバプロセスを持たない組み込み型のリレーショナルデータベースです。ソースコードは Public Domain(厳密にはパブリックドメイン宣言、補助的に Blessing ライセンス)で公開されており、商用利用も無制限。iPhone・Android の設定 DB、Chrome のブックマーク、Firefox の履歴、macOS の Core Data、Python の標準ライブラリ、Adobe Lightroom のカタログ など、デスクトップ・モバイル・組み込みのありとあらゆる場所で動作しており、地球上で最も配備されている DBMS と公式に表現されます。
SQLite の DB は 1 つのファイル にすべてが収まる点が最大の特徴です。スキーマ・データ・インデックス・トリガまで全部 1 ファイル。コピーすればまるごとバックアップ、削除すればまるごと破棄、というシンプルな運用ができます。拡張子は .sqlite・.sqlite3・.db・.db3 など 慣習で複数 あり、どれもファイル形式としては同じ SQLite 3 形式 です(SQLite 2 とはバイナリ非互換)。
サーバが要らないため 導入コストがゼロ。sqlite3 CLI で sqlite3 my.db と叩けばその場で DB が作られ、CREATE TABLE / INSERT / SELECT がそのまま使えます。アプリ側ではほとんどの言語に SQLite バインディングがあり、Python なら sqlite3 モジュールが標準ライブラリ、Node.js なら better-sqlite3、Go なら mattn/go-sqlite3、PHP なら PDO のドライバが利用できます。
内部構造とファイル形式
SQLite のファイルは 固定 100 バイトのヘッダ + 可変長のページ列 という構造です。ヘッダの先頭 16 バイトはマジックナンバー 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00(ASCII で SQLite format 3 + ヌル終端)で、これを見ればファイルが SQLite 3 形式と判定できます。
| オフセット | 長さ | 内容 |
|---|---|---|
| 0 | 16 | マジック SQLite format 3\\0 |
| 16 | 2 | ページサイズ(512〜65536、デフォルト 4096) |
| 18 | 1 | ファイル書式バージョン |
| 24 | 4 | ファイル変更カウンタ |
| 28 | 4 | DB のページ数 |
| 96 | 4 | SQLite バージョン番号 |
データはページ単位で B-Tree に格納されます。各テーブルとインデックスがそれぞれ B-Tree のルートを持ち、sqlite_master(または sqlite_schema)という特殊テーブルに全スキーマが SQL 文の形で保存されています。sqlite3 で開いて SELECT sql FROM sqlite_master; と打てば、その DB のスキーマ全文が読み出せます。
同時書き込みはデフォルトでファイルロック方式のため 1 プロセス 1 ライタ。読み込みは複数同時に可能です。WAL モード(Write-Ahead Logging)に切り替えると、書き込みは別ファイル *.db-wal に追記され、読み込みは元ファイルから継続できるため、読み書きの競合が大幅に減ります。Web アプリ的に複数リクエストが並ぶ用途では WAL が事実上必須です。
主な用途
- モバイルアプリのローカル DB: iOS の Core Data、Android の Room はいずれもバックエンドが SQLite
- デスクトップアプリの設定 / カタログ: Lightroom のカタログ、Notion のローカルキャッシュ、Slack のローカル DM 履歴
- ブラウザの内部 DB: Chrome の Cookie・履歴・パスワードはすべて SQLite ファイル
- テスト用 DB: ユニットテストでメモリ上 SQLite(
:memory:)を使うと、本物の DB セットアップ不要で高速に SQL を検証できる - データ配布フォーマット: 公開データセット(地理データ・辞書データ)を SQLite で配ると、受け取った側がそのまま SQL を打てる
- 小〜中規模 Web サイト: 同時書き込みが少ない読み取り中心のサイトなら、WAL モードで十分実用になる
関連形式との比較
| 項目 | SQLite | MySQL / PostgreSQL | DuckDB |
|---|---|---|---|
| 形態 | 組み込み・1 ファイル | サーバ常駐 | 組み込み・1 ファイル |
| 得意領域 | OLTP(小規模)・組み込み | OLTP(大規模・高並行) | OLAP(列指向・分析) |
| 並行書き込み | 1 ライタ(WAL で改善) | マルチライタ | 1 ライタ |
| 典型データ量 | 〜数 GB | 数 TB〜 | 数百 GB〜 |
| ライセンス | Public Domain | GPL / PostgreSQL ライセンス | MIT |
SQLite と同じ「組み込み 1 ファイル DB」の系譜で、分析用途に特化したのが DuckDB です。SQLite が 行指向の OLTP、DuckDB が 列指向の OLAP という棲み分けで、最近では両方を併用する事例が増えています。
コマンド・ツール
# DB 作成(ファイルがなければ作られる)
sqlite3 shop.db
# CLI 内で
sqlite> .databases -- 開いている DB
sqlite> .tables -- テーブル一覧
sqlite> .schema users -- 特定テーブルの DDL
sqlite> .mode column -- 結果を列整形
sqlite> .headers on -- ヘッダ表示
sqlite> PRAGMA journal_mode=WAL; -- WAL 有効化
sqlite> PRAGMA foreign_keys=ON; -- 外部キー有効化(デフォルト OFF)
# テキストダンプ
sqlite3 shop.db ".dump" > shop.sql
# CSV 取り込み
sqlite3 shop.db ".mode csv" ".import data.csv users"
# ファイルの種別を確認(マジック)
file shop.db
# => shop.db: SQLite 3.x database
GUI クライアントは DB Browser for SQLite(無料 / クロスプラットフォーム)が定番。商用では DBeaver・TablePlus・JetBrains DataGrip がよく使われます。
注意点
- 外部キーはデフォルト OFF:
PRAGMA foreign_keys=ON;を接続ごとに打たないと参照整合性が効かない。接続文字列で強制するライブラリも多い - 動的型付け: SQLite は型を緩く扱う「型親和性」方式で、
INTEGER列に文字列を入れることもできてしまう。アプリ側で CHECK 制約を入れて防ぐ - 大量並行書き込みには弱い: Web の本格運用には MySQL / PostgreSQL を推奨。SQLite を Web で使うなら WAL モード必須、それでも書き込みが秒間数百を超えたら別 DB を検討
- WAL モードのファイル増殖:
*.db-walと*.db-shmが同時に生成される。バックアップ時はこれら 3 つを一緒にコピーするか、VACUUMでチェックポイントを切ってから単体コピーする - ネットワーク越し利用は厳禁: NFS / SMB 越しの SQLite は ファイルロックがバグる ことで有名で、DB 破損の原因になる。SQLite は同一ホスト前提
- 大きな BLOB: 1 行に数 MB の BLOB を入れると性能劣化が目立つ。ファイルは別管理にしてパスだけ DB に持つのが定石
関連リンク
- 親カテゴリ: データベース・データ交換
- 概論: ファイル拡張子とは
- カテゴリ: データベース(カテゴリ)
- SQLite 関連: SQLite / sqlite への接続
- 同 Wave: SQL ダンプ / NDJSON / BSON / DB ダンプ
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?