SQLite にも Rust 風「エディション」が必要だ

Original : SQLite should have (Rust-style) editions

Pourquoi c'est important

SQLite のデフォルト設定の欠陥は、数百万のアプリに潜在的なデータ整合性リスクをもたらす。

ブロガーの Mort 氏は2026年7月15日、SQLite のデフォルト設定に重大な欠陥があると指摘。外部キー制約の無効化やカラム型の非強制など、開発者が陥りやすいバグの温床となっている問題を詳述し、Rust のエディション制度を手本にした解決策を提案した。

Mort 氏によると、SQLite は組み込みプロジェクトやサーバー用途(例:lobste.rs)で広く使われる業界標準のローカルデータストレージだが、そのデフォルト設定には根本的な問題が2つある。

**問題1:外部キー制約がデフォルトで無視される**

SQLite は他の RDBMS と異なり、`FOREIGN KEY` 制約をデフォルトで適用しない。これにより、参照先が存在しない「ダングリング参照」が発生しても検出されない。さらに SQLite は ROWID を再利用するため、削除済みユーザーの ID を別ユーザーが取得し、誤ったデータ関連付けが無音で起きる(例:Bob 削除後に Alice が同一 ID を取得し、Bob の投稿を「継承」する)。修正には `PRAGMA foreign_keys = ON;` が必要だが、デフォルトではオフのままだ。

**問題2:カラムに誤った型のデータを保存できる**

SQLite の型システムは `NULL`・`INTEGER`・`REAL`・`TEXT`・`BLOB` の5種だが、`INTEGER` 型カラムに文字列を格納することも可能で、型制約が実質的に機能しない。

Mort 氏はこれらの問題を解決するため、後方互換性を維持しつつ新しい安全なデフォルトを段階的に導入する Rust の「エディション」モデルを SQLite にも採用すべきだと主張している。

Source

mort.coffee — Lire l'original →