ソフトウェアエンジニア必見!Tursoが変えるデータアクセス:libSQLとWebAssemblyが実現する「インプロセスDB」の未来
Tursoは、一言で言うと「SQLiteと互換性のある、分散型の組み込み可能なSQLデータベース」です。
SQLite互換
普段使い慣れたSQLiteと同じように扱えます。
In-Process(インプロセス)
アプリケーションと同じプロセス内で動作します。これにより、従来のデータベースサーバーとの通信によるレイテンシ(遅延)が極めて少なくなります。
分散型
Tursoは、基盤技術としてlibSQL(SQLiteのフォーク)を用いており、世界中のエッジロケーションにデータを分散配置できます。
| 推し活の悩み(現状の課題) | Tursoで解決!(熱い応援ポイント) |
| 「推しイベントのチケット購入、通信が遅くて失敗...」 | 極小レイテンシ: アプリケーションとDBが近く(インプロセスやエッジ)にあるので、データアクセスが超高速!ユーザー体験が劇的に向上します。 |
| 「推しの最新情報、世界のファンにどう公平に届けるの?」 | グローバル分散: 世界中のエッジにデータを配置できるので、どこからアクセスしても高速かつ一貫性のあるデータを提供できます。 |
| 「DBサーバーの管理が面倒で、推しへの愛をコードに注げない...」 | サーバーレス・組み込み: DBサーバーの運用・管理から解放され、アプリケーションのロジック開発に集中できます。 |
| 「WebAssembly (Wasm) との連携が難しい...」 | Wasmネイティブ: WebAssembly環境(Cloudflare Workers, Vercel Edge Functionsなど)でネイティブに動作するように設計されています。 |
Tursoを使い始めるには、CLI(コマンドラインインターフェース)を使うのが最も簡単で強力です。
まず、Tursoアカウントを作成し、CLIをインストールします。
# Turso CLIのインストール (macOS/Linuxの例)
curl -sSfL https://get.tur.so/install.sh | bash
# 認証
turso auth login
# ブラウザでログインが完了したら、CLIに戻って認証が完了します
turso db create コマンドで、新しいデータベースを作成します。これは、あなたの「推し専用データ保管庫」を作るイメージです。
# データベース名を設定して作成
turso db create my-oshi-db
# データベースの接続URLを確認
turso db show my-oshi-db
# > URL: libsql://...
アプリケーションからデータベースに接続するために、認証トークンを発行します。
# 読み書き可能な認証トークンを発行
turso db tokens create my-oshi-db
# > ...長い文字列のトークンが表示されます。これを環境変数などに保存します。
Tursoは多くの言語で利用できますが、ここではWeb開発でよく使われるNode.js環境での例を紹介します。Tursoが提供するlibSQLクライアントを使用します。
# プロジェクトフォルダを作成
mkdir turso-demo
cd turso-demo
npm init -y
npm install @libsql/client
# 実行ファイルを作成
touch index.js
環境変数から接続URLとトークンを取得して接続します。
import { createClient } from "@libsql/client";
// 環境変数から接続情報を取得
const url = process.env.TURSO_DATABASE_URL;
const authToken = process.env.TURSO_AUTH_TOKEN;
// URLとトークンが設定されているか確認
if (!url || !authToken) {
console.error("エラー: TURSO_DATABASE_URL および TURSO_AUTH_TOKEN を設定してください。");
process.exit(1);
}
// libSQLクライアントの初期化
const client = createClient({
url: url,
authToken: authToken,
});
async function runExample() {
try {
// 1. テーブルの作成 (推しのグッズ情報を保存)
console.log(" テーブルを作成します...");
await client.execute(`
CREATE TABLE IF NOT EXISTS goods (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price INTEGER,
release_date TEXT
);
`);
console.log(" テーブル作成完了!");
// 2. データの挿入
console.log(" グッズデータを挿入します...");
const resultInsert = await client.execute({
sql: "INSERT INTO goods (name, price, release_date) VALUES (?, ?, ?)",
args: ["公式ペンライト", 5500, "2025-01-15"],
});
console.log(` データ挿入完了!ID: ${resultInsert.lastInsertRowid}`);
// 3. データの取得
console.log(" 全てのグッズを取得します...");
const resultSelect = await client.execute("SELECT * FROM goods WHERE price > 5000");
// 結果の表示
console.log(" 取得したグッズ情報:");
resultSelect.rows.forEach(row => {
console.log(` - 名前: ${row.name}, 価格: ${row.price}円, 発売日: ${row.release_date}`);
});
} catch (e) {
console.error(" エラーが発生しました:", e);
}
}
runExample();
ターミナルで環境変数を設定し、実行します。
# 環境変数を設定 (YOUR_URLとYOUR_TOKENは適宜置き換えてください)
export TURSO_DATABASE_URL="YOUR_URL"
export TURSO_AUTH_TOKEN="YOUR_TOKEN"
# 実行
node index.js
テーブルを作成します...
テーブル作成完了!
グッズデータを挿入します...
データ挿入完了!ID: 1
全てのグッズを取得します...
取得したグッズ情報:
- 名前: 公式ペンライト, 価格: 5500円, 発売日: 2025-01-15
このように、TursoはSQLiteのシンプルさと、グローバルな分散能力・低レイテンシを兼ね備えた、モダンなサーバーレス/エッジ環境に最適なデータベースです。あなたのアプリケーション開発を強力に後押ししてくれること間違いなしですよ!