mcpField
A
appdb

appdb

github.com/stahuraデータ・データベース24193 回インストール26 週間前に更新
リポジトリ

appdb について

appdbは、Domo App Platformの開発者向けガイドです。@domoinc/toolkitのAppDBClientによるコレクション文書の操作と、クエリ結果の内容やメタデータの扱いを説明します。

主な機能

  1. 01AppDBClientによる文書のCRUD
  2. 02条件検索と一括更新
  3. 03文書contentからアプリ項目を解析
  4. 04manifest.jsonでコレクションを宣言

活用シーン

  1. 01Domoアプリでコレクションデータを管理
  2. 02状態や優先度による文書の絞り込み
  3. 03クエリ結果をアプリ画面向けに整形

インストール

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

$npx skills add https://github.com/stahura/domo-ai-vibe-rules --skill appdb

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

詳細

ルール:Domo App Platform AppDB(ツールキット優先)

このルールはツールキット優先です。生の domo.get/post/put/delete エンドポイントではなく、AppDBClient を使用してください。

標準クライアント

yarn add @domoinc/toolkit
import { AppDBClient } from '@domoinc/toolkit';

type Task = {
  title: string;
  status: 'active' | 'completed';
  priority: 'Low' | 'High' | 'Urgent';
};

const tasksClient = new AppDBClient.DocumentsClient<Task>('TasksCollection');

基本操作

作成
const created = await tasksClient.create({
  title: 'New Task',
  status: 'active',
  priority: 'High'
});
const task = created.body;
読み取り/クエリ
const all = await tasksClient.get();
const active = await tasksClient.get({ status: { $eq: 'active' } });
const highOpen = await tasksClient.get({
  $and: [{ status: { $ne: 'completed' } }, { priority: { $in: ['High', 'Urgent'] } }]
});

AppDB のレスポンス構造(重要)

.get() が返すドキュメントはメタデータでラップされており、フィールドは doc.content の中にあります。

.create() が受け付ける内容:

{ vendor: 'Acme', riskLevel: 'High', notes: 'Late payments' }

.get() が返す内容(構造):

[
  {
    "id": "04b1756e-7b6d-4d77-842f-7975a6474d8a",
    "datastoreId": "a3b85171-...",
    "collectionId": "ba194a7d-...",
    "syncRequired": true,
    "owner": 767612617,
    "createdOn": "2026-03-22T02:22:42.030Z",
    "updatedOn": "2026-03-22T02:22:42.030Z",
    "updatedBy": 767612617,
    "content": {
      "vendor": "Acme",
      "riskLevel": "High",
      "notes": "Late payments"
    }
  }
]

重要なポイント:

  • アプリのフィールドはトップレベルではなく、doc.content の中にネストされています。
  • doc.id は .update() と .delete() で使用するドキュメント ID です。
  • メタデータフィールド(datastoreId、collectionId、owner、createdOn など)はトップレベルにあります。
  • 結果全体は response.body に含まれる場合と、配列として直接返される場合があります。

必須の解析パターン:

const response = await tasksClient.get();
const rawDocs = response.body || response;
const docs = Array.isArray(rawDocs) ? rawDocs : [];

const parsed = docs.map((doc) => ({
  id: doc.id,
  ...doc.content
}));

よくある間違い:

// WRONG: fields are inside content
const docs = response.body || response;
docs[0].vendor; // undefined

// CORRECT
docs[0].content.vendor; // "Acme"
更新
await tasksClient.update({
  id: 'document-uuid',
  content: { title: 'Updated', status: 'completed', priority: 'Low' }
});

await tasksClient.partialUpdate(
  { status: { $eq: 'active' } },
  { $set: { status: 'archived' } }
);
削除
await tasksClient.delete('document-uuid');
await tasksClient.delete(['uuid-1', 'uuid-2']);

マニフェスト要件

コレクションは引き続き、manifest.json の collections に定義する必要があります。

{
  "collections": [
    {
      "name": "TasksCollection",
      "schema": {
        "columns": [
          { "name": "title", "type": "STRING" },
          { "name": "status", "type": "STRING" }
        ]
      }
    }
  ]
}

チェックリスト

  • collections のマッピングがマニフェストに存在する
  • CRUD に AppDBClient.DocumentsClient を使用している
  • UI での表示や使用の前に、.get() の結果を doc.content から取り出している
  • クエリ/更新演算子($eq、$in、$set、$inc など)を正しく使用している
  • UI のフローにエラー処理と読み込み状態が含まれている

コメント