mcpField
S
sqlite-storage

sqlite-storage

github.com/val-townデータ・データベース1041 回インストール5 週間前に更新
リポジトリ

sqlite-storage について

Val Townの組み込みSQLiteを、リレーショナルまたは構造化された永続データに使うためのスキルです。データベースのスコープ、アトミックなバッチ、安全なクエリ、スキーマ設定を説明します。

主な機能

  1. 01Val単位または組織単位のDBを利用
  2. 02複数SQL文をアトミックに実行
  3. 03ユーザー入力にパラメーター化クエリを使用
  4. 04テーブル作成とスキーマ移行

活用シーン

  1. 01Valのリレーショナルデータを保存
  2. 02組織内の複数ValでDBデータを共有
  3. 03複数レコードをアトミックに更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/val-town/plugins --skill sqlite-storage

インストール後、Claude Code で/sqlite-storageを入力して読み込まれたか確認します。

詳細

SQLite ストレージ

Val Town には、std/sqlite モジュールを使った SQLite が組み込まれています。val でリレーショナルデータや構造化された永続データが必要な場合は、こちらを使用してください。シンプルなキー/バリュー形式のデータには、代わりに std/blob を使用してください。

基本的な使い方

import { sqlite } from "https://esm.town/v/std/sqlite/main.ts";

await sqlite.execute(`CREATE TABLE IF NOT EXISTS users (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT UNIQUE
)`);

await sqlite.execute({
  sql: "INSERT INTO users (name, email) VALUES (?, ?)",
  args: ["Alice", "[email protected]"],
});

const result = await sqlite.execute("SELECT * FROM users");
// result.rows = [{ id: 1, name: "Alice", email: "[email protected]" }]

トランザクション

複数のステートメントをアトミックなトランザクションとして実行するには、sqlite.batch を使用します。すべて成功するか、すべてロールバックされます。

await sqlite.batch([
  { sql: "INSERT INTO users (name, email) VALUES (?, ?)", args: ["Bob", "[email protected]"] },
  { sql: "UPDATE users SET name = ? WHERE id = ?", args: ["Robert", 2] },
]);

val ごとのデータベースと組織ごとのデータベース

インポートパスによって使用するデータベースが決まります。どちらも同じ @libsql/client API(execute、batch)を公開し、行をキー付きオブジェクト(Record<string, unknown>[])として返します。

  • std/sqlite/main.ts — val スコープのデータベースで、この val 専用です。新しい val のデフォルトであり、ほとんどの場合こちらを使用します。
  • std/sqlite/global.ts — 組織スコープのデータベースで、同じアカウントが所有するすべての val で共有されます。(ここでは個人アカウントもそれ自体が組織として扱われるため、このデータベースはすべての val 間で共有されます。)

既存の val で、これらのインポートパスを切り替えないでください。val が読み書きするデータベースが変わります。

ツールを使った組織所有 val のクエリ

sqlite_execute または sqlite_batch ツールを使って、個人アカウントではなく組織が所有する val にクエリを実行する場合は、適切なデータベースにアクセスできるよう、組織のハンドルを org パラメーターに渡してください。例:{ sql: "SELECT * FROM users", org: "some-org" }。これはツール呼び出しにのみ関係します。val 内のコードは、自身のデータベースを自動的に読み取ります。

ルール

  • ユーザー入力に由来する値には、必ずパラメーター化クエリ(args フィールド)を使用してください。文字列を SQL に直接埋め込まないでください。
  • val の再起動後もスキーマ設定を冪等にするため、CREATE TABLE IF NOT EXISTS を使用してください。
  • スキーマのマイグレーション:ALTER TABLE ... ADD COLUMN で新しい列を追加してください。更新済みのテーブルに対してマイグレーションが実行される可能性がある場合は、try/catch で囲んでください。

リファレンス

API ドキュメント全文:https://docs.val.town/reference/std/sqlite/usage/

コメント