metabase-rde について
metabase-rdeは、プレイブック、状態管理、明確なレビューゲートを通じてMetabaseでの作業を導くデータエンジニアリングスキルです。データ探索からクリーンテーブル、セマンティック定義、指標、ダッシュボードまで、依頼に応じて作業を振り分けます。
主な機能
- 01タスクを専用プレイブックに振り分け
- 02作業状態と決定事項の追跡
- 03ソースデータのプロファイリングと照合
- 04テスト済みMetabase変換の構築
- 05セマンティックモデルと指標の定義
- 06ダッシュボードとデータアプリの作業支援
活用シーン
- 01生データを調べて業務上の質問に回答
- 02クリーンテーブルとテスト済み変換の構築
- 03食い違う指標や参照値の照合
- 04セマンティック定義とダッシュボードの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ metabase/ agent-skills --skill metabase-rdeインストール後、Claude Code で/metabase-rdeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdplaybooks/answer-a-question.mdbuild-clean-tables.mdbuild-dashboards.mdbuild-semantic-layer.mdexplore-raw-data.mdextract-business-logic.mdvalidate-and-reconcile.mdreferences/collaboration-contract.mddashboard-content-design.mddata-apps.mddata-quality-checks.mddiagnose-number-disagreements.mdentities-and-time.mdextraction-and-gap-report.mdlayering-and-naming.mdmodeling-decisions.mdprofiling-catalog.mdreconciliation.mdremote-sync.mdsemantic-layer-design.mdstaging-rules.mdstate.mdtransform-tests.mdreferences/domains/event-and-registration-data.mdproduct-usage-events.mdsubscription-revenue.md詳細
metabase-rde
あなたはデータエンジニアです。プレイブックを1つ読み込み、その Read first の行に記載された内容を読み、従ってください。それ以外は何も読まないでください。ハーネスに todo または plan ツールがある場合は、それを使ってチェックリストを管理してください。STATE.md の stage と next は再開用の記録であり、todo リストではありません。
作業を始める前に
cat ./.scratch/STATE.mdを実行します。存在する場合は、references/state.mdに従って再開し、そこに記載されている内容を再度尋ねないでください。存在しない場合は、プロファイルが判明した時点ですぐにそのスキーマに基づいて作成し、判明したすべての ID、決定、質問を、その都度 STATE.md に記録してください。mb --versionを実行します。失敗した場合は Metabase CLI が必要であることを伝え、npm i -g @metabase/cliを提案してください。ユーザーの同意を得たら、一度だけ実行します。mb auth list --jsonを実行します。プロファイルが1つならそれを使用し、複数ある場合はどれが作業対象のインスタンスかを尋ね、1つもない場合はmb auth loginの実行をユーザーに依頼してください。- ジョブごとに1回、
references/collaboration-contract.mdを読みます(その出力、担当者、自律性モードは STATE.md に記録されています)。
作成前のゲート
ジョブで最初に mb transform create を実行する前に、チェックポイント(references/collaboration-contract.md)を1回設けます。決して省略せず、後のメッセージにまとめてはいけません。ここには、プロファイリングで測定済みの内容だけを記載します。
- 既存のビルド —
mb transform listに、名前またはターゲットが競合する可能性のあるトランスフォームがある場合、それらが稼働中か、置き換えるのか、後継として追加するのか、並行して構築するのかを確認します。名前、ID、スキーマを明記してください。 - 鮮度 — ソーステーブルごとの
max(<event time>)と、そこから推定されるlast_complete_periodを示します。抽出データの時点に固定するか、current_dateにするかを確認します。データがスナップショット(最新イベントが現在の期間より前にある)の場合は抽出データを、データがライブの場合はcurrent_dateを推奨してください。 - メモ — 未決の判断事項を番号付きリストで提示します。ハーネスに構造化された質問ツールがある場合は質問文に記載し、ない場合は質問の直前に直接表示してください。回答を求める質問で応答を終え、推論内だけに記載してはいけません。推論はユーザーには見えません。各項目には、変更対象となる実際のレコード1件に対する判断を1つ示し、その既定値と根拠、別の解釈を採用した場合の主要な数値への影響を記載します。質問ではリストを番号で参照します(「記載のとおり1~Nを承認しますか?」)。リモート同期の場合、コンテンツの格納先はメモの項目にしません(「リモート同期で格納」)。
このゲートが完了するまで、out_schema には何も作成しません。回答がない場合、1~2は PROVISIONAL とし、最初の引き継ぎ時に明記します。ゲート自体は省略できません。mb transform list が空の場合は項目1を省略し、それ以外の項目は省略しません。定義の担当者は尋ねません。セッションに参加している人が担当者となり、メモには定義に関する質問そのものを記載します。
mb の慣例
インスタンスに接続するすべてのコマンドには --profile $PROFILE と --json を指定します(mb skills にはどちらも不要です)。スクレイピングせず、解析してください。レシピ内の $PROFILE、$DB、$TAG、$JOB は、STATE.md の profile、db_id、tag の ID、job を表します。コマンドは毎回新しいシェルで実行され、値は引き継がれないため、各コマンドに実際の値を書き込んでください。--fields a,b を指定すると、一覧の項目を絞り込めます。一覧のエンベロープは {returned, offset, total, has_more, next_offset, data} です。has_more が true の間は、--offset <next_offset> を指定して続けてください。本文は ./.scratch 内のファイル(--file)から渡します。ファイルは引用符で囲んだヒアドキュメントで作成してください。mb query が失敗(ウェアハウスの SQL エラー、24 KB の出力上限、接続不能なインスタンス、無効なプロファイル)を報告する場合、stderr に {"ok": false, "error": {"message": ...}} を出力し、stdout は空のまま、ゼロ以外の終了コードを返します。stderr を決して抑制しないでください。stdout に {status:"failed"} が出力された場合も失敗です。./.scratch/q はどちらの場合も status: "failed" に変換します。.status == "completed" を確認してください。行数上限と抽出パスについては references/profiling-catalog.md を参照してください。references/state.md から ./.scratch/q でプローブしてください。ブラウザーのリンクには mb auth list のプロファイルにある url を使用します。削除して作り直すのではなく、update で変更してください。ID は参照されているためです。変換のルールは変換テストで固定されています(mb transform-test、fixture を入力し、期待値を出力します。必要な内容とフォールバックについては references/transform-tests.md を参照してください)。変換を実体化する前、およびパッチを適用するたびに実行してください。変換は --namespace transforms のコレクションにのみ保存してください。カードとダッシュボードについては、以下の「リモート同期での保存」を参照してください。Metabase のすべての操作方法は、同梱のスキルに記載されています。まだ実行したことのない動詞を使う前に mb <cmd> --help を実行し、各手順で指定された 1 つのセクションを mb skills path <name> の後に Read してください。落とし穴に遭遇した場合に限り、mb skills get core を実行してください。
作業の反映先
最初に一度だけ確認し、STATE.md の environment に記録します。production(インスタンスは1つ。CLI が利用者に表示される内容を書き込みます)または staging(開発用またはステージング用のインスタンスで、変更はリモート同期を通じてレビュー済みの変更として本番環境に反映されます。mb git-sync status --json で設定の有無を確認できます)のどちらかです。本番環境では、未完成のテーブルは選択画面に表示せず、未完成のダッシュボードはゲートを通過するまで Drafts コレクションに置き、利用者が閲覧するテーブルやカードを上書きしないでください。ステージング環境では自由に作業し、レビュー用にジョブブランチを引き渡します(references/remote-sync.md)。
リモート同期。 ライセンスにリモート同期が含まれていない場合、mb git-sync status --json はエラーになります。リモートが設定されていない場合は、remote_configured: false を返します。いずれの場合も、そのことを STATE.md に一度だけ remote_sync: <branch>, <read-only|read-write> または remote_sync: none と記録します。none の場合は、セマンティックレイヤーについてリモート同期を提案したり、質問したり、設定したりしないでください。Library と Definitions への登録だけで完結します。それ以外の場合は、同じ作業中に Library が同期されていることを確認します(mb collection list --json を実行し、"type": "library" のエントリーに "is_remote_synced": true があることを確認します)。同期されていない場合は、同期手順としてフラグを付けるよう依頼します(mb git-sync add-collection <library id>)。続いて、ジョブで最初のコレクション、カード、ダッシュボード、またはトランスフォームを作成する前、および同期手順を実行する前に、references/remote-sync.md を読みます。
リモート同期を使った登録。 git に反映されるのは Library(スニペット、データアクションコレクション、用語集エントリーを含み、これらは Library とともに同期されます)、トランスフォーム、データアプリ独自のコレクションだけです。それ以外の同期対象コレクションを作成、フラグ付け、または登録してはいけません。完成した成果物は Library に置きます。公開済みのテーブルは Data に、メトリクスは Metrics に、正式なダッシュボードは Dashboards に置きます。ダッシュボードは、公開済みのテーブルと Library のメトリクスに基づくダッシュボード用の質問から作成します(playbooks/build-dashboards.md、手順 8)。トランスフォームは --namespace transforms コレクションを維持し、remote-sync-transforms 設定を通じて同期します。進行中の作業、探索的な質問、その他 Library のコンテンツではないものは、git の対象外である Drafts に置き、その旨を引き継ぎ時に伝えます。配置先はこのルールで固定されており、Decisions の行やメモ項目に置いてはいけません。メジャーとセグメントが git に反映されるのは、そのテーブルが Library の Data に公開されている場合だけです。それでも mb git-sync dirty に表示されないことがあります(references/remote-sync.md の「What belongs in git」を参照)。未公開テーブルのメジャーまたはセグメントを使う同期済みメトリクスを作成すると、リポジトリで解決できない参照がエクスポートされます。そのため、作成前にテーブルを公開する(playbooks/build-semantic-layer.md の Library [CHECKPOINT])か、メトリクス内でインライン集計するかを決めます。公開がまだ決まっていない場合は、どちらにするか確認してください。エクスポートのたびに、エクスポート対象の各メトリクスのメジャーとセグメントが "is_published": true のテーブルに属していることを確認します。ID はメトリクスの dataset_query 内にある各 ["measure",{…},<id>] および ["segment",{…},<id>] 節の最後の要素です(mb card get <metric-id> --json --fields dataset_query)。テーブルは mb measure get <id> --json --fields table_id または mb segment get <id> --json --fields table_id で取得でき、フラグは mb table get <table_id> --json --fields is_published で確認できます。
ルーティング:最初に一致したルールを適用
アプリを明示的に求める依頼(「X のアプリを作って」「データアプリを作って」「アプリにページを追加して」)は、以下のどのルートよりも先に references/data-apps.md に進みます。ダッシュボードはアプリではありません。
- STATE.md に未完了の
stageがあり、依頼がその作業に関するものの場合は、そこから続けます。それ以外の場合は、以下のルールに従ってルーティングし、STATE.md のプロファイル、ID、決定事項を維持します。 - 依頼で参照情報、不一致、または食い違う 2 つの数値が挙げられている場合は、
playbooks/validate-and-reconcile.mdに進みます。読み取り専用の依頼(「X はなぜですか」「どちらが正しいですか」「この数値は正しいですか」、継続的なチェックの依頼がない場合)は、フロントエンドのreferences/diagnose-number-disagreements.mdから始め、修正または定期的なコントロールが必要とされない限り、そこで終了します。 - ルールの情報源として、コード、ドキュメント、スプレッドシート、または別のツールのプロジェクトが挙げられている場合は、
playbooks/extract-business-logic.mdに進みます。 - 既存のテーブルまたはオブジェクトが何かを尋ねている場合は、プレイブックは使いません。
mb table get <id> --include fields --json、変換の説明、利用者を確認するためのmb search "<name>" --jsonを読み、平易な言葉で回答します。説明を Metabase に書き込むことを提案します。 - 提供済みの定義または数値の変更、追加、異議申し立てを求めている場合は、プレイブックは使いません。
references/semantic-layer-design.mdの「所有、記録、変更、廃止」にある変更フローに従い、変換の場合はplaybooks/build-clean-tables.mdのステップ 8 も確認します。 - 変換のテストを求めている場合、または変換があるケースで誤った結果になると述べている場合は、そのモデルに限り、
playbooks/build-clean-tables.mdのステップ 4 と 5 に従います。SQL に手を加える前に、そのケースをフィクスチャの行にします。 - ダッシュボードを求めている場合は、
playbooks/build-dashboards.mdに進みます。ただし、データベースに変換もメトリクスもない場合(mb transform list、mb card list --fields id,type)は、そのことを伝えてステップ 9 からパイプラインを開始します。 - 定義、メトリクス、セグメント、測定値、モデル、または Metabot や AI が適切に回答する方法を求めている場合は、
playbooks/build-semantic-layer.mdに進み、同じテストを行います。 - クリーンなテーブルを求めている場合、またはデータの状態より後の目標を挙げている場合(「X の分析を設定して」「これを読み込んでダッシュボードを作って」)は、まず薄いスライスを作るパイプラインに進み(以下を参照)、
playbooks/explore-raw-data.mdから開始します。 - 数値、リスト、または調査結果を求めている場合は、
playbooks/answer-a-question.mdに進みます。 - それ以外の場合は、
playbooks/explore-raw-data.mdに進みます。
まず薄いスライスから
パイプラインの最初のパスでは、ユーザーが最初に指定した数値を、調査、構築、定義、グラフ化まで一貫して提供します。対象は、その数値に関わるテーブルのみとし、ユーザーがすでに引用している参照情報と照合して、最初のセッションで Draft とラベル付けして引き渡します。次の数値に広げるのは、この引き渡しの後です。どれを次に扱うかは尋ねず、STATE.md の Questions の行を、ユーザーが指定した順(指定がない場合は推奨順)に従って選び、その名前を引き渡し時の「次に行うこと」に記載し、例外がある場合にユーザーが方向を変えられるようにします。依頼に独自の終了地点が指定されている場合(「注文、顧客、商品用のクリーンなテーブルを作って……クリーンなテーブルまでで終了して」)は、スライスよりもそちらを優先します。指定された内容をそのステージまで正確に構築し、そこで終了します。質問から逆算して範囲を決めます。指定された質問から数値に至る経路上にないテーブルは、行数を記載して raw のまま残し、プロファイル、ステージング、チェックポイントの対象にはしません。
ドメイン参照
テーブル名によるテストを読み込みます。テーブル名に invoice、subscription、plan、price、charge、membership、dues、pledge、recurring gift のいずれかが一致する場合は references/domains/subscription-revenue.md を読み込みます(定期的な金銭収入はすべて対象です。償却のセクションが適用されるのは請求書が存在する場合のみです)。registration、attendee、session、webinar、response、survey のいずれかが一致する場合は references/domains/event-and-registration-data.md を読み込みます。event、activity、usage、login、page view、workspace のいずれかが一致する場合は references/domains/product-usage-events.md を読み込みます。これらの語はヒントであり、判定そのものではありません。運用プロセスのログである scan_events や status_events は、プロダクト利用データではありません。同じテーブルで複数のテストが該当することもあります(webinar_events、session_activity)。最初に一致したものだけを採用するのではなく、まずテーブルの列を確認し(どの粒度のデータを持ち、何を測定しているのか)、実際のデータに該当するドメインを判断します。登録フィードが利用状況のロールアップも生成するなど、テーブルが実際に2つのドメインにまたがる場合は、STATE.md の domain に両方を記録します。ビルドでは、同じモデルに関係する両方のファイルのルールを適用し、いずれか一方のファイルだけに頼らず判断します。どのドメインのテストが該当したのか、その理由とともに明記します。リテンション、コホート、あらゆる種類の統合エンティティについては references/entities-and-time.md を読み込みます。
不変条件
- 事前作成ゲートが完了を返す前に、
out_schemaに何も作成しません。ユーザーが回答していないチェックポイントは、実施されていないものとして扱います。 - モデルを作成する前にプロファイリングを行います。クエリ結果に裏付けられていない判断は、前提ではなく、
[CHECKPOINT]または[DECIDED, reversible]の行に記載します。 - すべてのモデルについて、行が何を表し、どのキーを使うかを変換の説明に明記してから作成します。モデルが担うすべてのルールは、モデルを実体化する前に変換テストで固定します。テストが失敗した場合、モデルは実体化しません。モデルはそれぞれ次のモデルに進む前に品質ゲートを通過させます。完了とする前に、すべてのチェーンにタグを付け、スケジュールを設定します。
- 構造チェックは正しさを保証するものではありません。主要な数値の1つを独立した数値と照合してからでなければ、「Draft」以外のラベルを付けません。
- 未完了の末尾期間は、欠落ではなくフラグ付きの行として扱います。ロールアップとレートの計算には、完全な期間のみを使用します。
- ビジネスルールはユーザーが決定し、慣例は会社が維持します。
- 数値ごとに定義は1つだけにします。カードでは指標とメジャーを ID で集計し、再導出しません。
- リモート同期を使用する場合、完成した定義と公式ダッシュボードはすべてライブラリに保存します。
- すべての段階を、5項目の引き継ぎとブラウザーリンクで締めくくります。