Back

Turso:RustベースのSQLiteの進化形

Turso:RustベースのSQLiteの進化形

SQLiteでアプリを構築したことがあれば、その強みはすでにご存知でしょう。設定不要、単一ファイル、高速な読み取り、そしてどこでも動作します。しかし、おそらくその限界にも直面しているはずです — 同時書き込みができない、非同期ランタイムと相性の悪い同期API、そしてエッジや分散デプロイメントへの明確なパスがないことなどです。

Tursoは、まさにそのギャップを埋めるために設計されています。

重要なポイント

  • Tursoのエコシステムには2つの柱があります:libSQL(本番環境対応のCベースSQLiteフォーク)とTurso Database(ベータ段階の、以前「Limbo」というコードネームだったRustによるクリーンルーム実装)
  • Rustによる書き直しは、メモリ安全性、非同期ファーストAPI、ネイティブベクトル検索、MVCCベースの同時書き込みをもたらします — これらはSQLiteのCコードベースに後付けすることが困難な機能です
  • libSQLとTurso Cloudは、組み込みレプリカを使用したユーザーごとのデータベースのようなパターンを可能にし、今日のエッジ、サーバーレス、マルチテナントアーキテクチャにおいて実用的な選択肢となっています
  • Rustによる書き直しはまだ本番環境対応ではありませんが、エコシステムの長期的な方向性を示しています

Turso Databaseとは正確には何か?

Tursoは単一のものではありません。モダンなアプリケーションアーキテクチャ向けにSQLiteを拡張することを中心に構築されたエコシステムです。明確に理解するには、関連しているが異なる2つの技術について知る必要があります:

**libSQL**は、SQLiteのフォークです — Cで書かれており、今日本番環境対応で、Turso Cloudの基盤となっています。レプリケーション、組み込みレプリカ、HTTPベースのアクセスを追加し、リモートプライマリと同期しながらエッジでSQLiteスタイルのデータベースを実行することを可能にします。現在Turso Cloudを使用している場合、libSQLを使用していることになります。

Turso Database(元々「Limbo」というコードネーム)は、SQLiteをゼロからRustで完全に書き直したものです。現在ベータ版です。目標は、SQLiteのファイル形式とSQLエンジンのクリーンルーム再実装をRustで行い、モダンな機能を最初から組み込むことです — 後付けではありません。

これら2つのプロジェクトは名前とミッションを共有していますが、成熟度の段階が異なります。libSQLは今日の本番デプロイメントを支えているものです。Rustによる書き直しは、エコシステムが向かっている方向です。

なぜSQLiteをRustで書き直すのか?

SQLiteはCで書かれているため、安全に拡張することが困難です。テストスイートはクローズドソースであるため、外部の貢献者はコアチームと同じ信頼性で変更を検証できません。そして、プロジェクトは外部からの貢献を一切受け入れていないため、改善は遅々として進みません。

Rustによる書き直しは、これに直接対処します:

  • ガベージコレクタなしのメモリ安全性 — Rustのボローチェッカーは、Cコードベースで一般的なバグのクラス全体を排除します
  • 非同期ファーストAPI — SQLiteの同期インターフェースとは異なり、TursoのAPIは非同期ランタイムやブラウザ環境で自然に動作するように設計されています
  • ネイティブベクトル検索 — AIおよびMLワークロード向けに組み込まれており、外部拡張は不要です
  • 同時書き込みのためのMVCC — SQLiteの書き込みロックは既知のボトルネックであり、Tursoのアーキテクチャはこれを根本から対象としています
  • オープンな貢献モデル — プロジェクトは成長する貢献者コミュニティを引き付けています

Rust APIでの基本的なクエリは次のようになります:

use limbo_driver::Builder;

#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
    let db = Builder::new_local("test.db").build().await?;
    let conn = db.connect()?;
    let rows = conn.query("SELECT * FROM users", ()).await?;
    Ok(())
}

注意: Turso Database(Limbo)APIはまだ進化中であり、正確なクレート名やメソッドシグネチャは安定版リリース前に変更される可能性があります。最新の使用例については、常に公式リポジトリを確認してください。

非同期インターフェースは意味のある変化です。これは、Tursoがブロッキング I/Oが選択肢にない環境、エッジランタイムやWebAssemblyターゲットを含む環境で実行されるように設計されていることを意味します。

libSQL vs SQLite:Web開発者にとって何が違うのか?

フロントエンドおよびフルスタック開発者にとって、今日のTursoエコシステムの最も実用的な部分は、libSQLとTurso Cloudです。それが可能にする一般的なパターンの1つは次のようなものです:

  • 各ユーザーまたはテナントが独自のSQLiteスタイルのデータベースを持つことができます
  • そのデータベースは、ユーザーに近い場所 — エッジまたはアプリ内のローカルで組み込みレプリカとして実行されます
  • 読み取りは高速でローカルであり、書き込みはリモートプライマリに同期されます

このユーザーごとのデータベースモデルは、サーバーレス環境、マルチテナントSaaSアプリ、セッションごとに完全なPostgresインスタンスを起動することなく分離された軽量ストレージを必要とするAIエージェントに自然に適合します。

実際の採用はすでに起こっています。Spice.aiは、DuckDBと並んでTursoをアクセラレータとして使用しており、特定のクエリパターンに対してSQLite実装よりもパフォーマンスが向上したと報告しています。

今日のTursoの位置づけ

シナリオ推奨アプローチ
SQLiteを必要とするエッジまたはサーバーレスアプリlibSQL + Turso Cloud(本番環境対応)
リモート同期を伴うローカルファーストアプリlibSQL組み込みレプリカ
Rustによる書き直しの評価Turso Databaseベータ版(本番環境対応ではない)
分離されたストレージを持つAIエージェントlibSQLエージェントごとのデータベースパターン

Rustによる書き直しはまだ進化中であり、本番環境でのSQLiteのドロップイン置き換えではありません。

まとめ

Tursoは、単なるフォークではなく、SQLiteエコシステムの真の進化を表しています。libSQLは今日、分散SQLiteの問題を解決します。Rustによる書き直しは、次に来るものの基盤を構築しています:完全にオープンで、非同期ネイティブで、エッジ対応のデータベースであり、SQLiteのシンプルさをモダンなインフラストラクチャに引き継ぎます。

すでにSQLiteを使用していて、その先がどうなるか疑問に思っている場合、Tursoは利用可能な最も具体的な答えの1つです。本番ワークロードにはlibSQLとTurso Cloudから始め、Rustによる書き直しが安定性に向けて成熟するのを注視してください。

よくある質問

Rustによる書き直しはできません。まだベータ版であり、SQLiteの本番環境でのドロップイン置き換えを目指していません。ただし、libSQLは本番環境対応であり、SQLiteとほぼ互換性があります。ほとんどのアプリケーションでは、Turso CloudとlibSQLが今日の推奨される出発点です。

libSQLは、レプリケーション、組み込みレプリカ、HTTPアクセスを追加するCベースのSQLiteフォークです。今日のTurso Cloudを支えています。Turso Database(以前のコードネームLimbo)は、RustでのSQLiteの別個のクリーンルーム再実装です。現在ベータ版であり、長期的な置き換えとして非同期ネイティブでメモリ安全な動作を目指しています。

SQLiteは単一ライターロックを使用しており、書き込みの同時実行性を制限します。Rustによる書き直しは、MVCCベースの同時書き込みをサポートすることを目指していますが、この機能はまだ開発中です。libSQLはSQLiteの書き込みモデルを継承しているため、本番環境のTursoデプロイメントでは同時書き込みサポートはまだ利用できません。

はい。Rustによる書き直しは、ブロッキングIOが許可されないWebAssemblyやエッジランタイムのような環境向けに設計されています。libSQLも、Turso Cloudの組み込みレプリカモデルを通じてエッジデプロイメントをサポートしており、読み取りをローカルに保ち、書き込みをリモートプライマリに同期します。

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay