コンテンツにスキップ

スクリプトからデータベースを操作する

スクリプトノードファンクションから、synqlet:database/{テーブルのID} をインポートすると、そのテーブルの行を読み書きできます。

モジュールの型は テーブルのフィールド定義から自動生成 されるため、フィールド名や値の型をエディタ上で補完・チェックできます。

エディタ右の「ライブラリ」パネル(またはエディタ上部のインポート欄)の「データベース」タブでテーブルを選び、「+」を押すと import 文が挿入されます。ID を手入力する必要はありません。

import * as customers from "synqlet:database/{テーブルのID}";
関数説明
list(parameter?)行を一覧取得する(非同期イテレーター。ページングは自動)
get(id)行を1件取得する
insertOne(input)行を1件作成する
insertMany(input)行をまとめて作成する(最大100件)
updateOne(input)行を1件更新する(部分更新)
updateMany(input)行をまとめて更新する(部分更新・最大100件)
deleteOne(id)行を1件削除する
deleteMany(input)行をまとめて削除する(最大100件)
Id(id)文字列をこのテーブルの行ID型に変換する

いずれの関数も失敗すると例外を投げます。呼び出し元で try / catch するか、そのままノードを失敗させてスクリプトノードのリトライに任せます。

list() は非同期イテレーターを返します。for await で回すと、次のページを自動的に取得しながら全件をたどれます。

import * as customers from "synqlet:database/{テーブルのID}";
export default async function () {
for await (const row of customers.list({
filter: { values: { status: { _eq: "active" } } },
sort: [{ values: { name: { direction: "asc", nulls: "nullsLast" } } }],
pageSize: 100,
})) {
console.log(row.id, row.values.name);
}
return {};
}
パラメータ既定値説明
pageSize501回のリクエストで取得する件数(1〜200)
filter{}絞り込み条件 → フィルター
sort[]並び替え → 並び替え

1件だけ取得する場合は get() を使います。

const row = await customers.get(customers.Id("customer-001"));

取得した行は次の形です。

{
id: Id; // 行ID
createdAt: Temporal.Instant; // 作成日時
updatedAt: Temporal.Instant; // 更新日時
createdBy: string; // 作成ユーザーID
updatedBy: string; // 更新ユーザーID
values: RowValues; // フィールドの値
}

values の型はテーブルのフィールド定義から生成されます。値の型は次のように扱いやすい形に変換されています。

フィールドの型スクリプト上の値
テキスト / メールアドレス / 電話番号string
数値number
真偽値boolean
URLURL
日時Temporal.Instant
日付 / 時刻 / 年月Temporal.PlainDate / Temporal.PlainTime / Temporal.PlainYearMonth
ファイルFileOutputファイル型フィールドを扱う
レコード / リストオブジェクト / 配列

必須でないフィールドの値は null になることがあります。

行ID は、テーブルごとに区別される専用の型(Id)です。文字列から作るには Id() を使います。

const id = customers.Id("customer-001");

別のテーブルの行ID を渡すと型エラーになるため、テーブルを取り違えるミスを防げます。

// ID は自動で割り振られる
const created = await customers.insertOne({
values: { name: "株式会社サンプル", status: "active" },
});
// ID を指定し、既にあれば更新する(upsert)
await customers.insertOne({
id: customers.Id("customer-001"),
values: { name: "株式会社サンプル", status: "active" },
options: { upsert: true },
});
  • id を省略すると自動で割り振られます。
  • id を指定してその行が既に存在する場合、既定ではエラーになります。options.upserttrue を指定すると、既存の行を更新します。

まとめて作成するときは insertMany() を使います(1回につき最大100件)。

await customers.insertMany({
data: [
{ values: { name: "A社", status: "active" } },
{ id: customers.Id("customer-002"), values: { name: "B社", status: "active" } },
],
options: { upsert: true },
});

更新は 部分更新 です。指定しなかったフィールドは変更されません。

await customers.updateOne({
id: customers.Id("customer-001"),
values: { status: "archived" },
});
await customers.updateMany({
data: [
{ id: customers.Id("customer-001"), values: { status: "archived" } },
{ id: customers.Id("customer-002"), values: { status: "archived" } },
],
});

値を空にしたいときは null を指定します。ただし 必須フィールドは null にできません(省略はできます)。

await customers.deleteOne(customers.Id("customer-001"));
await customers.deleteMany({
ids: [customers.Id("customer-001"), customers.Id("customer-002")],
});

filter には、システム項目(id / createdAt / updatedAt / createdBy / updatedBy)と、フィールドの値(values)に対する条件を指定します。同時に指定した条件は すべて満たす(AND)扱いです。

customers.list({
filter: {
createdAt: { _gte: Temporal.Instant.from("2026-07-01T00:00:00Z") },
values: {
name: { _contains: "サンプル" },
score: { _gte: 50 },
closedAt: { _isNull: true },
},
},
});

指定できる演算子は、フィールドの型によって変わります。

演算子意味使える型
_eq等しいすべて(ID・真偽値はこれのみ)
_gt / _gte / _lt / _lteより大きい / 以上 / より小さい / 以下(日時系は 後 / 以降 / 前 / 以前)文字列系・数値・日時系
_contains含む文字列系(テキスト / メールアドレス / URL / 電話番号)
_startsWith指定した文字列で始まる文字列系
_endsWith指定した文字列で終わる文字列系
_isNulltrue で値がない、false で値がある必須でないフィールド
  • _contains / _startsWith / _endsWith は大文字・小文字を区別しません。
  • 日時系の条件には Temporal の値をそのまま渡せます。
  • レコード型・リスト型は絞り込みの対象外です。ファイル型は name / mimeType / size / id で絞り込めます。

_and / _or / _not で条件を組み合わせられます。_and / _or2件以上 を指定します。

customers.list({
filter: {
_or: [
{ values: { status: { _eq: "active" } } },
{ values: { score: { _gte: 80 } } },
],
_not: { values: { name: { _startsWith: "テスト" } } },
},
});

sort は条件の配列です。配列の先頭ほど優先 され、1件につき1つの項目を指定します。directionasc / desc)と nullsnullsFirst / nullsLast)の両方が必要です。

customers.list({
sort: [
{ values: { score: { direction: "desc", nulls: "nullsLast" } } },
{ createdAt: { direction: "asc", nulls: "nullsLast" } },
],
});
  • システム項目(id / createdAt / updatedAt / createdBy / updatedBy)と、フィールドの値(values)を指定できます。
  • レコード型・リスト型・ファイル型のフィールドは並び替えできません。
  • 最後に行ID の昇順が自動的に追加されるため、ページをまたいでも並び順が安定します。
項目上限
list()pageSize1〜200(既定 50)
insertMany() / updateMany() / deleteMany() の件数100件

件数が多い場合は、100件ずつに分けて呼び出してください。

  • スクリプトは、実行しているランナーが属する組織 のテーブル・行のみ読み書きできます。他の組織のテーブルは参照できません。
  • APIキーやトークンをスクリプト内に用意する必要はありません。ランナーが自動で認証します。
  • Synqlet API への通信は自動的に許可されるため、セキュリティフラグの「ネットワークアクセス」を設定しなくてもデータベースを操作できます。ファイル型フィールドを持つテーブルを参照している場合は、ファイルの保存先への通信も自動的に許可されます。