コンテンツにスキップ

Turso & Astro

Turso は、SQLiteのフォークであるlibSQLを基盤とした分散データベースです。低クエリレイテンシーに最適化されており、グローバルアプリケーションに適しています。

AstroでTursoを初期化する

前提条件

  • Turso CLI がインストールされ、サインインされていること
  • スキーマを持つ Turso データベース
  • データベースURL
  • アクセストークン

環境変数の設定

次のコマンドを使用してデータベース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

新しいクライアントの初期化

src フォルダに turso.ts ファイルを作成し、TURSO_DATABASE_URLTURSO_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文に変数を渡すオブジェクトを受け取ることができます。

次の例では、slugAstro.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>

Tursoリソース

その他のバックエンドサービスガイド

貢献する コミュニティ スポンサー