• Projects
  • Service
  • About
  • branding.bz
  • Podcast
  • Tips
  • FAQ
  • Recruit
  • Download
  • Contact
  • branding.bz(ブランド構築SaaS)
  • DESIGN NOW(デザインメディア)
  • X
  • LinkedIn
  • Spotify
  • Facebook

213-0011 神奈川県川崎市高津区久本3-6-7-303

© 2026 ID INC. All rights reserved

claude-skills/スキル
SKILLOfficialproductivity

tables-analyze

プラグイン
clay
ソース
GitHub で見る ↗
説明

Clay tables — テーブル(データの表形式)が何をしているのかを分析します。列同士のつながり方を図解し、処理の流れを整理してから、その列に組み込まれたワークフロー(一連の処理手順)を説明します。 次のような場合に使用: ユーザーが「このテーブルは何をしているの?」「{テーブル}のワークフローを説明して」「このテーブルの処理を順を追って説明してほしい」「ここではどんな設定がされているの?」といった質問をしたとき

原文を表示

Clay tables — analyze what a table does: reconstruct the column DAG, stage it, and narrate the workflow encoded in its columns. Use when the user asks "what does this table do?", "explain the {table} workflow", "walk me through this table", or "what's set up here?".

ユースケース
  • テーブルの機能を分析したいとき
  • 列同士のつながりを理解したいとき
  • ワークフローの処理流れを確認するとき
  • テーブルの設定内容を知りたいとき
本文(日本語訳)

テーブルを分析する

次のような場合に使用: 「このテーブルは何をしているのか」「{テーブル}のワークフロー(処理の流れ)を説明してください」「このテーブルの処理を順を追って説明してください」「ここでは何が設定されているのか」といった、特定のレコード(行)ではなく、テーブルの構造と列に組み込まれたワークフローについての質問。

Clayのテーブルは列の依存関係グラフ(上流・下流の関係を表した図)です。source列とbasic入力列が起点となり、basicの計算式列やaction(データ拡張)列は設定内の{{f_xxx}}トークンに依存します。テーブルを分析することは、その依存関係グラフを再構築し、処理の段階順に並べ、テーブルが何をしているかを説明することです。処理は軽量で読み取り専用です(約3つのコマンド:メタデータ + 列情報 + サンプル行)。

テーブルを見つける: テーブル入口スキルの「テーブルを見つける」と同じ方法で解決します。

1. テーブルの枠組みを把握する — clay tables get

出力はtypeで分岐します(詳細はclay tables get --helpを参照)。ワークフローが含まれる枠組みを確認します:

clay tables get <tableId> | jq .
  • type — "archive"の場合、これはアーカイブ用テーブル(parentTableIdが元のテーブルを指す)です。代わりに親テーブルを分析してください。アーカイブ自体はワークフローを持ちません。
  • rowCount — 現在のサイズ。
  • archive — null以外の場合、処理済み行がarchive.searchableFieldFormulaでインデックス付けされたアーカイブに流出します。

データがどこから入るのか、またどの規模で入るのかは列(ステップ2)から分かります:source列は各ソースに付属するnumSourceRecordsを持つsources[]を含みます。

2. 依存関係カタログを作成する — clay tables columns get

ここにグラフが存在します。テーブル入口スキルのdependency-catalog.mdにあるトークン抽出レシピをclay tables columns get <tableId>の結果に実行します。これにより1列ごとに1つのエントリが得られます — { id, name, type, role, integration, gate, dependsOn: [names] } 。すべての{{f_xxx}}接続(formulaWaterfallとformulaMapキー内のものを含む)を列名に解決します。dependsOnは上流の列。gate(設定されている場合)はアクションが実行される条件です。

既知のデータ一括拡張テーブルの場合は、ソースエントリを調べて出所を特定してください。ソースにaudienceが含まれている場合、そのentityType、segments[].id、isGlobal、entityIdOnlyをソース設定として使用します。isGlobal: trueはグローバルオーディエンス(データセット)を表し、セグメントリソースオブジェクトがありません。それ以外の場合はsegmentsのIDを使用してください。データ一括拡張テーブルはオーディエンス以外の出所を持つことができ、audience-sourceだけではそのテーブルがデータ一括拡張テーブルであることを証明しません。

3. グラフを段階化する

依存関係の深さ順にカタログを段階化します — 起点から順に、その後は依存関係がすべて前の段階に配置されている列、という具合に進めます:

  • ステージ0(起点): source列とinput basic列(dependsOnが空)。これは生データです。
  • 以降の各ステージ: dependsOnがすべて前のステージにある列。
  • {{f_xxx}}はテーブルを跨がりませんので、グラフ全体が自己完結しています — すべての接続がこの列セット内で解決します。(トークンが列名ではなく単なるf_idに解決された = 削除または名前変更された列。メモしておきます)

この左から右への順序はClayの画面内の列順≈パイプライン(処理の流れ)です。

4. 軽い健全性チェック — サンプル行を確認する

clay tables rows list … --limit 10(別のサンプルコマンドはない)で、列ごとの状態をざっくり確認します — どの列がほぼ動いているか、休止中かエラーか:

clay tables rows list <tableId> --limit 10 | jq '{ truncated, columns: ([ .data[].cells | to_entries[] ] | group_by(.key) | map({ col: .[0].key, n: length, statuses: (group_by(.value.status) | map({ (.[0].value.status): length }) | add) })) }'

colのIDをカタログから列名にマッピングしてください。これは最大10行のサンプルなので、参考情報として扱ってください。真の比率ではありません。ステータスは小文字(success、empty、error、queued/runningなど)です。ステージに大量のerrorが表示される場合は、/tables-error-sweepへの手渡しを提案してください。このコマンドは通常テーブルでは完全スキャンを実行し、データ一括拡張テーブルでは保持されている行のサンプルを実行します。クエリ対応テーブルでは、tables queryのグループ化により正確な値の分布を説明に追加できます — ステータスはサンプルから得られるもの(クエリできません)です。

rows listがtruncated: trueを返す場合、現在保持されている最大20行のフィルタリング・ソート無しのサンプルに意図的に制限されています。カーソルを受け入れたり返したりできず、完了済み行はすでに削除されている可能性があります。したがってサンプルは空の場合があり、ソースデータセットや完全な行リストとして提示されてはいけません。ステップ2のソース設定が信頼できます。

5. 報告 — 説明文 + ASCII図

ソース情報から始め、段階化されたグラフを各列の統合内容とゲート条件とともに示し、その後に1段落の平易な英語による要約を追加します。最後にサンプル調査の健全性結果を付加します:

People — 1,543行 · ソース: CSVインポート (1,543) · t_xyz789にアーカイブ(メールでインデックス付け)

ステージ1  Domain        (basic, 計算式)        ← Company
ステージ2  Find Email    (アクション: Prospeo)  ← Domain
             条件付き実行: {{Domain}}が存在する場合のみ実行
ステージ3  Enrich Person (アクション: Clearbit) ← Find Email
ステージ4  Push to HubSpot (アクション: HubSpot) ← Enrich Person
             条件付き実行: {{Find Email}}が存在する場合のみ実行

→ このテーブルはCSVから企業情報を取得し、各企業のドメインを導出し、ドメイン
  がある場合はProspeoで担当者メールを検索し、Clearbitで担当者を拡張して、メール
  が見つかった場合はHubSpotに結果を同期します。処理済み行はメールでアーカイブ
  されます。使用統合: Prospeo、Clearbit、HubSpot。

健全性(サンプル調査、10行): Domain 10/10成功 · Find Email 8成功 / 2空 ·
  Enrich Person 7成功 / 1エラー / 2空 · Push HubSpot 7成功 / 3空。
  参考情報のみ(小規模サンプル)— より詳しい診断は /tables-error-sweep を実行してください。

報告は誠実にグラフに従ってください。トークンが実際に示している接続のみを主張し、ゲート条件はconditionalRunFormulaTextの表現のとおりに説明します(条件を自分で作り上げないでください)。

手渡し

  • 特定の値の出所 / あるアクションが実行されなかった理由 → /tables-value-trace(同じトークン抽出を使い、1列分遡ります)
  • ステージの大量エラー → /tables-error-sweep(データ一括拡張テーブルではサンプルのみ)
  • 「行が追加されていない」がメタデータで表面化 → /tables-capacity
原文(English)を表示

Analyze a table

Use when: "what does this table do?", "explain the {table} workflow", "walk me through this table", "what's set up here?" — a question about the table's structure and the workflow encoded in its columns, not about any single record.

A Clay table is a column DAG: source and input basic columns are roots; basic formula columns and action (enrichment) columns depend on the {{f_xxx}} tokens in their settings. Analyzing the table = reconstructing that graph, ordering it into stages, and narrating what it does. Cheap and read-only: ~3 commands (metadata + columns + a row sample).

Finding the table: resolve it as in the tables entry-point skill ("Finding a table").

1. Frame the table — clay tables get

(The output is discriminated on type — shape in clay tables get --help.) Read off the frame the workflow sits in:

clay tables get <tableId> | jq .
  • type — "archive" means this is an archive companion (its parentTableId points at the regular table); analyze the parent instead, the archive has no workflow of its own.
  • rowCount — current size.
  • archive — non-null means processed rows flow out to an archive, indexed on archive.searchableFieldFormula.

Where data enters and at what scale comes from the columns (step 2): source columns carry sources[] with each attached source's numSourceRecords.

2. Build the dependency catalog — clay tables columns get

This is where the graph lives. Run the token-extraction recipe in the tables entry-point skill's dependency-catalog.md over clay tables columns get <tableId>. It yields one entry per column — { id, name, type, role, integration, gate, dependsOn: [names] } — resolving every {{f_xxx}} edge (including those in formulaWaterfall and formulaMap keys) to a column name. dependsOn are the upstream columns; gate (when set) is the condition under which an action runs.

For a known bulk enrichment table, inspect the source entries to determine the origin. If a source includes audience, use its entityType, segments[].id, isGlobal, and entityIdOnly as the source configuration when rebuilding it as a workflow. isGlobal: true represents the global Audience and has no segment resource objects; otherwise use the ids from segments. Bulk enrichment tables can have non-Audiences origins, and an audience-source on its own does not prove the table is a bulk enrichment table.

3. Stage the graph

Order the catalog into stages by dependency depth — roots first, then columns whose deps are all already placed, and so on:

  • Stage 0 (roots): source columns and input basics (empty dependsOn). This is the raw data.
  • Each next stage: columns whose dependsOn are all in earlier stages.
  • {{f_xxx}} never crosses tables, so the whole graph is self-contained — every edge resolves within this column set. (A token that resolved to a bare f_id rather than a name = a deleted/renamed column; note it.)

This left-to-right order ≈ the column order in the Clay UI and gives you the pipeline.

4. Light health read — sample rows

clay tables rows list … --limit 10 (no separate sample command) for a rough per-column status read — which columns mostly run vs sit idle or error:

clay tables rows list <tableId> --limit 10 | jq '{ truncated, columns: ([ .data[].cells | to_entries[] ] | group_by(.key) | map({ col: .[0].key, n: length, statuses: (group_by(.value.status) | map({ (.[0].value.status): length }) | add) })) }'

Map col ids to names from the catalog. This is a sample of ≤10 rows, so treat it as indicative, not a true rate — say so. Statuses are lowercase (success, empty, error, queued/running/…). If a stage shows heavy error, offer to hand off to /tables-error-sweep; it performs a full scan for normal tables and a retained-row sample for bulk enrichment tables. On a query-enabled table, tables query group-bys can add exact value distributions to the narrative — statuses still come from the sample (they aren't queryable).

If rows list returns truncated: true, it is deliberately limited to one unfiltered, unordered sample of at most 20 currently retained passthrough rows. It neither accepts nor returns a cursor, and completed rows may already have been deleted. The sample can therefore be empty and must never be presented as the source dataset or a complete row listing; the source configuration from step 2 is authoritative for migration.

5. Report — narrative + ASCII DAG

Lead with the source(s), show the staged DAG with each column's integration and gate, then a one-paragraph plain-English summary. Append the sampled health read.

People — 1,543 rows · source: CSV Import (1,543) · archives to t_xyz789 (on Email)

Stage 1  Domain        (basic, formula)      ← Company
Stage 2  Find Email    (action: Prospeo)     ← Domain
              gated: only runs if {{Domain}} is present
Stage 3  Enrich Person (action: Clearbit)    ← Find Email
Stage 4  Push to HubSpot (action: HubSpot)   ← Enrich Person
              gated: only runs if {{Find Email}} is present

→ This table takes companies from a CSV, derives each company's domain, finds a
  contact email via Prospeo (when a domain exists), enriches the person via
  Clearbit, and syncs the result to HubSpot when an email was found. Processed
  rows are archived by email. Integrations used: Prospeo, Clearbit, HubSpot.

Health (sampled, 10 rows): Domain 10/10 success · Find Email 8 success / 2 empty ·
  Enrich Person 7 success / 1 error / 2 empty · Push HubSpot 7 success / 3 empty.
  Indicative only (small sample) — run /tables-error-sweep for a deeper diagnosis.

Keep the narrative honest to the graph: only claim an edge the tokens actually show, and describe a gate exactly as its conditionalRunFormulaText reads (don't invent the condition).

Hand-offs

  • A specific value's origin / why one action didn't fire → /tables-value-trace (uses the same token extraction, walking one column backward).
  • Heavy errors in a stage → /tables-error-sweep (sample-only for bulk enrichment tables).
  • "Rows aren't being added" surfaced by metadata → /tables-capacity.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。