Turso

Turso は、SQLite のオープンソースでオープンコントリビューションのフォークである libSQL に基づくエッジデータベースです。

世界中の35以上の場所で、ユーザーの近くにデータを配置できます。

使用方法

次の Qwik スタータースクリプトを使用して、Turso を簡単に追加できます。

npm run qwik add turso

このコマンドは、Turso を使用するのに必要な依存関係を追加します。

また、プロジェクトフォルダ内に新しいファイルを追加します。

  • src/lib/turso.ts

そして、以下を含むように .env.local ファイルを追加または変更します。

.env.local
PRIVATE_TURSO_DATABASE_URL=
PRIVATE_TURSO_AUTH_TOKEN=

ファイルデータベースの使用

ローカル開発とCI統合には、ローカルデータベースファイルを使用するのが理想的です。

まず、sqlite3 --version を実行して、マシンに SQLite がインストールされていることを確認します。バージョン番号(例:0-14 20:58:05 554764a6e721fab307c63a4f98cd958c8428a5d9d8edfde951858d6fd02daapl)以外が表示された場合は、このリンクのインストール手順をご覧ください。

次のコマンドを実行して、SQLiteファイルデータベースを作成します。

sqlite3 foo.db

データベーススキーマを作成します。

sqlite> create table todo (id integer not null, task text, done int default 0);

テーブルにデータをシードします。

sqlite> insert into todo(id, task) values(1, "Go to the gym");
sqlite> insert into todo(id, task) values(2, "Buy groceries");

シェルを終了します .quit

次に、.env.local 内の PRIVATE_TURSO_DATABASE_URL 環境変数にデータベースファイルのパスを割り当てます。

PRIVATE_TURSO_DATABASE_URL=file:foo.db

:ファイルデータベースで作業する場合、データベーストークンは必要ありません。

Tursoデータベースの使用

プロジェクトを本番環境にデプロイする場合、Turso CLIをマシンにインストールし、Tursoデータベースを作成できます。

Turso CLIの db shell コマンドを使用して、データベースにクエリを発行します。

turso db shell <database-name>

データベーススキーマを作成します。

  create table todo (id integer not null, task text, done int default 0);

テーブルにデータをシードします。

  insert into todo(id, task) values(1, "Go to the gym");
  insert into todo(id, task) values(2, "Buy groceries");

シェルを終了します .quit

次の手順に従って、Tursoデータベースの資格情報を取得し、デプロイ環境内の環境変数に割り当てます。

データベースURLから始めて、次のコマンドを実行します。

turso db show <database-name> --url

結果のURLをコピーして、PRIVATE_TURSO_DATABASE_URL 環境変数に割り当てます。

また、データベース認証トークンについては、コマンドを実行します。

turso db tokens create <database-name>

結果のトークンをコピーして、PRIVATE_TURSO_AUTH_TOKEN 環境変数に割り当てます。

Qwik内でTursoを使用する方法

ルート内で tursoClient をインポートし、RequestEvent オブジェクトを公開する Qwik のサーバーサイド API 内でデータベースクライアントインスタンスを開始します。たとえば、routeLoader$()routeAction$()server$()、および onGetonPostonRequest などのエンドポイントハンドラです。

import { tursoClient } from "~/utils/turso";
 
export const useRouteLoader = routeLoader$(
  async (requestEvent: RequestEventBase) => {
    const client = tursoClient(requestEvent);
 
    const items = await client.execute("select * from table");
 
    return {
      items: items.rows,
    };
  }
);

詳細については、Tursoドキュメントをご覧ください。

貢献者

このドキュメントの改善に貢献してくれたすべての貢献者に感謝します!

  • xinnks