SQLite は、サーバーを別途立てずにアプリケーションへ組み込んで使える関係データベースエンジンです。データは 1 つのファイルに保存され、設定や運用の負担が小さいため、試作ツールから組み込み機器、デスクトップアプリまで広く使われます。扱うのは SQL ですが、一般的なクライアント・サーバー型 DB と比べると、導入のしやすさと移植性に強みがあります。
1 つのファイルに収まるデータベース
SQLite の大きな特徴は、データベース全体が 1 つのファイルとして扱えることです。テーブル定義、データ、索引、トランザクションの状態まで、すべてがこのファイルにまとまります。バックアップもコピーで済み、アプリの配布物にそのまま含められるので、データベース用のサービスを常駐させる必要がありません。
この性質は、機械装置の設定値、ログ、検査結果の記録など、比較的小規模だが確実に保存したいデータと相性がよいです。たとえば制御盤用の設定画面や、計測ソフトの履歴保存では、ネットワーク越しの DB に依存せずに済むため、現場での扱いが楽になります。
SQL の書き方と使いどころ
SQLite は SQL を使って操作します。基本は他の関係データベースと同じで、`CREATE TABLE` で表を作り、`INSERT` で追加し、`SELECT` で検索します。よくある範囲では、日付・数値・文字列を表に分けて整理し、条件検索や集計を行う用途に向いています。
CREATE TABLE measurements (
id INTEGER PRIMARY KEY,
measured_at TEXT NOT NULL,
pressure_mpa REAL,
note TEXT
);
INSERT INTO measurements (measured_at, pressure_mpa, note)
VALUES ('2026-01-01 09:00:00', 12.4, 'start');
SELECT id, measured_at, pressure_mpa
FROM measurements
WHERE pressure_mpa >= 10.0
ORDER BY measured_at;
このような使い方では、アプリ側から必要なデータだけを取り出しやすくなります。SQL を覚えると、CSV のような一方向の保存よりも、検索・更新・削除を含むデータ管理がしやすくなります。
ACID と同時書き込みの考え方
SQLite はトランザクションを扱えます。トランザクションとは、複数の更新をひとまとまりとして扱い、途中で失敗したら元に戻せる仕組みです。一般に SQLite は ACID 特性を備え、データの一貫性を保ちやすい設計になっています。
ただし、同時に多くの書き込みが発生する用途では注意が必要です。SQLite は 1 つのデータベースファイルを共有するため、書き込み競合が増えると待ちが発生しやすくなります。読み取り中心の用途には強い一方で、複数のプロセスが高頻度に更新する大規模システムでは、サーバー型 DB のほうが適することがあります。
型のゆるさと列の設計
SQLite は動的型付けの性質が強く、列に対して厳密な固定型 DB ほど硬くありません。列の宣言はできますが、実際の格納では柔軟な振る舞いをするため、入力データの取り扱いには設計意図が必要です。特に数値・文字列・空値の混在が起きると、集計や比較で思わぬ結果になることがあります。
実務では、列名を明確にし、NULL を許すかどうか、文字列で持つか数値で持つかを先に決めておくと安定します。日付時刻は `TEXT` で ISO 形式にそろえる方法がよく使われますが、比較方法まで含めて決めておくことが大切です。
他のデータ保存方式との違い
SQLite は「ファイルに保存する DB」であり、JSON や CSV と用途が少し違います。JSON は階層構造を持たせやすく、設定ファイルや API のデータ交換に向きます。CSV は表形式の単純な受け渡しに便利ですが、更新や検索の機能はありません。SQLite は、これらよりもデータ操作の自由度が高く、複数条件の検索や整合性の管理がしやすい点が利点です。
| 方式 | 得意なこと | 苦手なこと |
|---|---|---|
| SQLite | 検索、更新、整合性の維持 | 超高頻度の同時書き込み |
| JSON | 階層データ、設定、受け渡し | 複雑な検索、集計 |
| CSV | 単純な表の交換 | 型情報、制約、更新管理 |
機械・電気系のツールでは、設定は JSON、履歴やログは SQLite、外部システムとの受け渡しは CSV というように使い分けると整理しやすくなります。
Python から使うときの基本形
SQLite は Python との相性がよく、標準ライブラリの `sqlite3` でそのまま使えます。外部ライブラリを入れずに扱えるため、試作や自動化スクリプトに組み込みやすいのが利点です。
import sqlite3
conn = sqlite3.connect("sample.db")
cur = conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY, message TEXT)")
cur.execute("INSERT INTO logs (message) VALUES (?)", ("hello",))
conn.commit()
rows = cur.execute("SELECT id, message FROM logs").fetchall()
print(rows)
conn.close()
このように、ファイルを開いて SQL を実行し、必要なら `commit()` で確定します。自動化処理では、計測値の蓄積、装置状態の記録、実験条件の保存などに使うと、後から再現しやすいデータが残せます。





