Turso & Astro
Turso は、SQLiteのフォークであるlibSQLを基盤とした分散データベースです。低クエリレイテンシーに最適化されており、グローバルアプリケーションに適しています。
AstroでTursoを初期化する
Section titled “AstroでTursoを初期化する”環境変数の設定
Section titled “環境変数の設定”次のコマンドを使用してデータベースURLを取得します。
turso db show <database-name> --url
データベースの認証トークンを作成します。
turso db tokens create <database-name>
上記の両方のコマンドからの出力を、プロジェクトのルートにある .env
ファイルに追加します。このファイルが存在しない場合は、作成してください。
TURSO_DATABASE_URL=libsql://...TURSO_AUTH_TOKEN=
これらのプライベートな環境変数を作成する際は、PUBLIC_
プレフィックスを使用しないでください。これらの値がクライアントに公開されてしまいます。
LibSQLクライアントのインストール
Section titled “LibSQLクライアントのインストール”TursoをAstroに接続するために @libsql/client
をインストールします。
npm install @libsql/client
pnpm add @libsql/client
yarn add @libsql/client
新しいクライアントの初期化
Section titled “新しいクライアントの初期化”src
フォルダに turso.ts
ファイルを作成し、TURSO_DATABASE_URL
と TURSO_AUTH_TOKEN
を渡して createClient
を呼び出します。
import { createClient } from "@libsql/client/web";
export const turso = createClient({ url: import.meta.env.TURSO_DATABASE_URL, authToken: import.meta.env.TURSO_AUTH_TOKEN,});
データベースのクエリ
Section titled “データベースのクエリ”データベースから情報にアクセスするには、任意の .astro
コンポーネント内で turso
をインポートし、SQL クエリを実行します。
次の例では、テーブルからすべての posts
を取得し、<BlogIndex />
コンポーネントでタイトルのリストを表示します。
---import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')---
<ul> {rows.map((post) => ( <li>{post.title}</li> ))}</ul>
SQLプレースホルダー
Section titled “SQLプレースホルダー”execute()
メソッドは、slug
やページネーションなど、SQL文に変数を渡すオブジェクトを受け取ることができます。
次の例では、slug
が Astro.params
から取得した値と一致する posts
テーブルから単一のエントリを取得し、投稿のタイトルを表示します。
---import { turso } from '../turso'
const { slug } = Astro.params
const { rows } = await turso.execute({ sql: 'SELECT * FROM posts WHERE slug = ?', args: [slug!]})---
<h1>{rows[0].title}</h1>