最近 Turso をいじっているのですが、SQLite のシンプルさとクラウドデータベースの便利さを両立していて、まさに「これが欲しかった」というポイントを突いてきます。

Turso とは?

Turso はもともと libSQL という、SQLite のオープンコントリビューション型フォークとして始まりました。その後プロジェクトは進化し、公式いわく「SQLite の次の進化形」— Rust によるゼロからの書き直しでありながら、SQLite と完全な後方互換性を保ち、本家にはなかった機能を追加しています。

  • AI や RAG アプリケーション向けのネイティブなベクトル検索
  • Linux の io_uring などモダンなプリミティブを使った非同期設計
  • ロック競合のない並行書き込み
  • オープンコントリビューションモデル — SQLite 本家はオープンソースではあるものの、外部からのコントリビューションを受け付けないことで有名ですよね

プロダクトは2つの側面があります。

  1. Turso Database — アプリやデバイス、ブラウザ内でも動く組み込みエンジン
  2. Turso Cloud — ブランチ機能、バックアップ、アナリティクスを備えたマネージドプラットフォーム

Embedded Replica

個人的にはこれがキラー機能です。Embedded Replica はクラウド上のデータベースのローカルコピーを、アプリケーションのすぐ隣に置いてくれます。

  • 読み込みはローカルファイルに対して行われ、マイクロ秒で返ってくる
  • 書き込みはクラウドのプライマリに送られ、レプリカに反映される
  • read-your-writes セマンティクスが保証される — 書き込みが成功したら、明示的な sync() なしでレプリカから即座に新しいデータが見える

セットアップは実質パラメータ2つだけ。ローカルファイルの url と、リモートデータベースを指す syncUrl です。syncInterval で定期同期もできるし、起動時やバックグラウンドジョブで手動 sync() を呼ぶこともできます。

データベース版の CDN みたいなものです。データはエッジ、それもプロセスの中に置かれつつ、信頼できる唯一の情報源はクラウドにある、という構図です。

オフライン書き込み

デフォルトでは書き込みはプライマリに送られるため接続が必要ですが、オフラインモード(offline: true)を有効にすればローカルに書き込み、後からクラウドに同期できます。モバイルアプリや不安定なネットワークで動かす必要があるものにとって、これはまさにみんなが SQLite の上に手作りで再発明してきた local-first パターンそのものです。

注意点

  • 同期中のローカルデータベースファイルを別プロセスで開かないこと。データ破損のリスクがあります。
  • Embedded Replica には実際のファイルシステムが必要なので、ファイルシステムのないサーバーレス環境では動きません。

結論

SQLite は昔から「とにかく動く」お気に入りのデータベースですが、Turso はその感覚を保ちつつ、私を Postgres に向かわせてきた2つの問題 — レプリケーションとバックアップ — をさらっと解決してくれます。SDK は TypeScript、Go、Rust、PHP などに対応しているので、大抵のスタックにすんなり入ります。

「SQLite をそのまま出荷したい、ただし同期付きで」と思ったことがあるなら、半日ほど試す価値はあると思います。