Turso & Astro
Turso は、SQLiteのフォークであるlibSQLを基盤とした分散データベースです。低クエリレイテンシーに最適化されており、グローバルアプリケーションに適しています。
AstroでTursoを初期化する
前提条件
環境変数の設定
次のコマンドを使用してデータベースURLを取得します。
turso db show <database-name> --urlデータベースの認証トークンを作成します。
turso db tokens create <database-name>上記の両方のコマンドからの出力を、プロジェクトのルートにある .env ファイルに追加します。このファイルが存在しない場合は、作成してください。
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=:::cautionこれらのプライベートな環境変数 (EN)を作成する際は、PUBLIC_ プレフィックスを使用しないでください。これらの値がクライアントに公開されてしまいます。:::
LibSQLクライアントのインストール
TursoをAstroに接続するために @libsql/client をインストールします。
npm install @libsql/client
pnpm add @libsql/client
yarn add @libsql/client
新しいクライアントの初期化
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,
});データベースのクエリ
データベースから情報にアクセスするには、任意の .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プレースホルダー
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>