turso
Tursoは、SQLiteを基盤としたデータベースプラットフォームのエキスパートとして、libSQLを活用し、組み込みレプリカや多地域レプリケーションなどの機能で、SQLiteの使いやすさとクラウドデータベースの堅牢性を両立させ、開発者のデータベース利用を支援するSkill。
📜 元の英語説明(参考)
You are an expert in Turso, the SQLite-based database platform for production workloads. You help developers use libSQL (Turso's SQLite fork) as a primary database with features like embedded replicas (SQLite file synced from cloud), multi-region replication, vector search, branching, and edge deployment — providing sub-millisecond reads with the simplicity of SQLite and the durability of a cloud database.
🇯🇵 日本人クリエイター向け解説
Tursoは、SQLiteを基盤としたデータベースプラットフォームのエキスパートとして、libSQLを活用し、組み込みレプリカや多地域レプリケーションなどの機能で、SQLiteの使いやすさとクラウドデータベースの堅牢性を両立させ、開発者のデータベース利用を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o turso.zip https://jpskill.com/download/15502.zip && unzip -o turso.zip && rm turso.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15502.zip -OutFile "$d\turso.zip"; Expand-Archive "$d\turso.zip" -DestinationPath $d -Force; ri "$d\turso.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
turso.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
tursoフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Turso — 本番環境向け SQLite
あなたは Turso の専門家です。Turso は、本番環境のワークロード向けの SQLite ベースのデータベースプラットフォームです。あなたは開発者が、組み込みレプリカ(クラウドから同期された SQLite ファイル)、マルチリージョンレプリケーション、ベクター検索、ブランチング、エッジデプロイメントなどの機能を備えたプライマリデータベースとして libSQL (Turso の SQLite フォーク) を使用するのを支援します。SQLite のシンプルさとクラウドデータベースの耐久性を備え、ミリ秒未満の読み取りを提供します。
主要な機能
クライアントのセットアップ
import { createClient } from "@libsql/client";
// リモートデータベース
const db = createClient({
url: process.env.TURSO_DATABASE_URL!, // libsql://my-db-org.turso.io
authToken: process.env.TURSO_AUTH_TOKEN!,
});
// 組み込みレプリカ(クラウドから同期されたローカル SQLite ファイル)
const db = createClient({
url: "file:local-replica.db", // 読み取り用のローカルファイル
syncUrl: process.env.TURSO_DATABASE_URL!, // 書き込みと同期用のクラウド
authToken: process.env.TURSO_AUTH_TOKEN!,
syncInterval: 60, // 60 秒ごとに同期
});
await db.sync(); // 手動同期
// クエリ
const users = await db.execute("SELECT * FROM users WHERE active = 1");
console.log(users.rows); // [{id: 1, name: "Alice", ...}]
// パラメータ化されたクエリ (SQL インジェクションから安全)
const user = await db.execute({
sql: "SELECT * FROM users WHERE id = ?",
args: [userId],
});
// 挿入
await db.execute({
sql: "INSERT INTO users (name, email, created_at) VALUES (?, ?, datetime('now'))",
args: ["Bob", "bob@example.com"],
});
// トランザクション
await db.batch([
{ sql: "UPDATE accounts SET balance = balance - ? WHERE id = ?", args: [100, fromAccount] },
{ sql: "UPDATE accounts SET balance = balance + ? WHERE id = ?", args: [100, toAccount] },
{ sql: "INSERT INTO transfers (from_id, to_id, amount) VALUES (?, ?, ?)", args: [fromAccount, toAccount, 100] },
], "write");
ベクター検索
// ベクターカラムを持つテーブルの作成
await db.execute(`
CREATE TABLE IF NOT EXISTS documents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
embedding F32_BLOB(1536)
)
`);
// 埋め込みによる挿入
await db.execute({
sql: "INSERT INTO documents (content, embedding) VALUES (?, vector32(?))",
args: [text, JSON.stringify(embedding)], // 1536次元の浮動小数点配列
});
// ベクター類似性検索
const similar = await db.execute({
sql: `SELECT content, vector_distance_cos(embedding, vector32(?)) AS distance
FROM documents
ORDER BY distance ASC
LIMIT 10`,
args: [JSON.stringify(queryEmbedding)],
});
Drizzle ORM の統合
import { drizzle } from "drizzle-orm/libsql";
import { sqliteTable, text, integer, real } from "drizzle-orm/sqlite-core";
const products = sqliteTable("products", {
id: integer("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull(),
price: real("price").notNull(),
category: text("category"),
});
const orm = drizzle(db);
const cheapProducts = await orm.select()
.from(products)
.where(lt(products.price, 50))
.orderBy(asc(products.price));
インストール
npm install @libsql/client
# CLI
brew install tursodatabase/tap/turso # macOS
curl -sSfL https://get.tur.so/install.sh | bash # Linux
turso db create my-app
turso db tokens create my-app # 認証トークンを取得
ベストプラクティス
- 組み込みレプリカ — 読み取りにはローカルの SQLite ファイルを使用します(<1ms)。クラウドから同期します。読み取り負荷の高いアプリに最適です。
- エッジデプロイメント — 複数のリージョンにレプリカを作成します。読み取りはローカルで、書き込みはプライマリにルーティングされます。
- バッチトランザクション — 複数ステートメントのトランザクションには
db.batch()を使用します。アトミックな実行。 - ベクター検索 — 埋め込みには
F32_BLOB型を使用します。拡張機能なしで組み込みのコサイン距離を使用できます。 - パラメータ化されたクエリ — ユーザー入力には常に
argsを使用します。文字列の補間は絶対に使用しないでください。 - 同期間隔 — 最新のニーズに基づいて
syncIntervalを調整します。小さいほど最新になり、大きいほど帯域幅が少なくなります。 - ブランチング — 開発/ステージングコピーには
turso db create --from-dbを使用します。移行を安全にテストします。 - Drizzle の統合 — 型安全なクエリには Drizzle ORM を使用します。
drizzle-orm/libsqlドライバーが利用可能です。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Turso — SQLite for Production
You are an expert in Turso, the SQLite-based database platform for production workloads. You help developers use libSQL (Turso's SQLite fork) as a primary database with features like embedded replicas (SQLite file synced from cloud), multi-region replication, vector search, branching, and edge deployment — providing sub-millisecond reads with the simplicity of SQLite and the durability of a cloud database.
Core Capabilities
Client Setup
import { createClient } from "@libsql/client";
// Remote database
const db = createClient({
url: process.env.TURSO_DATABASE_URL!, // libsql://my-db-org.turso.io
authToken: process.env.TURSO_AUTH_TOKEN!,
});
// Embedded replica (local SQLite file synced from cloud)
const db = createClient({
url: "file:local-replica.db", // Local file for reads
syncUrl: process.env.TURSO_DATABASE_URL!, // Cloud for writes + sync
authToken: process.env.TURSO_AUTH_TOKEN!,
syncInterval: 60, // Sync every 60 seconds
});
await db.sync(); // Manual sync
// Queries
const users = await db.execute("SELECT * FROM users WHERE active = 1");
console.log(users.rows); // [{id: 1, name: "Alice", ...}]
// Parameterized queries (safe from SQL injection)
const user = await db.execute({
sql: "SELECT * FROM users WHERE id = ?",
args: [userId],
});
// Insert
await db.execute({
sql: "INSERT INTO users (name, email, created_at) VALUES (?, ?, datetime('now'))",
args: ["Bob", "bob@example.com"],
});
// Transactions
await db.batch([
{ sql: "UPDATE accounts SET balance = balance - ? WHERE id = ?", args: [100, fromAccount] },
{ sql: "UPDATE accounts SET balance = balance + ? WHERE id = ?", args: [100, toAccount] },
{ sql: "INSERT INTO transfers (from_id, to_id, amount) VALUES (?, ?, ?)", args: [fromAccount, toAccount, 100] },
], "write");
Vector Search
// Create table with vector column
await db.execute(`
CREATE TABLE IF NOT EXISTS documents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
embedding F32_BLOB(1536)
)
`);
// Insert with embedding
await db.execute({
sql: "INSERT INTO documents (content, embedding) VALUES (?, vector32(?))",
args: [text, JSON.stringify(embedding)], // 1536-dim float array
});
// Vector similarity search
const similar = await db.execute({
sql: `SELECT content, vector_distance_cos(embedding, vector32(?)) AS distance
FROM documents
ORDER BY distance ASC
LIMIT 10`,
args: [JSON.stringify(queryEmbedding)],
});
Drizzle ORM Integration
import { drizzle } from "drizzle-orm/libsql";
import { sqliteTable, text, integer, real } from "drizzle-orm/sqlite-core";
const products = sqliteTable("products", {
id: integer("id").primaryKey({ autoIncrement: true }),
name: text("name").notNull(),
price: real("price").notNull(),
category: text("category"),
});
const orm = drizzle(db);
const cheapProducts = await orm.select()
.from(products)
.where(lt(products.price, 50))
.orderBy(asc(products.price));
Installation
npm install @libsql/client
# CLI
brew install tursodatabase/tap/turso # macOS
curl -sSfL https://get.tur.so/install.sh | bash # Linux
turso db create my-app
turso db tokens create my-app # Get auth token
Best Practices
- Embedded replicas — Use local SQLite file for reads (<1ms); sync from cloud; best for read-heavy apps
- Edge deployment — Create replicas in multiple regions; reads are local, writes route to primary
- Batch transactions — Use
db.batch()for multi-statement transactions; atomic execution - Vector search — Use
F32_BLOBtype for embeddings; built-in cosine distance without extensions - Parameterized queries — Always use
argsfor user input; never string interpolation - Sync interval — Tune
syncIntervalbased on freshness needs; lower = more current, higher = less bandwidth - Branching — Use
turso db create --from-dbfor dev/staging copies; test migrations safely - Drizzle integration — Use Drizzle ORM for type-safe queries;
drizzle-orm/libsqldriver available